commit:     7e93192fda22594b9e9d223c54a39b4bad0554f9
Author:     Alexey Gladkov <legion <AT> kernel <DOT> org>
AuthorDate: Mon Mar 11 00:25:07 2024 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Sun Apr 28 00:04:08 2024 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=7e93192f

sync/zipfile: Add retrieve_head to return archive checksum

Since we have an ETag, we can return the checksum of the archive. It
will be a replacement for the head commit of the repository.

Suggested-by: Zac Medico <zmedico <AT> gentoo.org>
Signed-off-by: Alexey Gladkov <legion <AT> kernel.org>
Signed-off-by: Sam James <sam <AT> gentoo.org>

 lib/portage/sync/modules/zipfile/__init__.py | 3 ++-
 lib/portage/sync/modules/zipfile/zipfile.py  | 9 +++++++++
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/lib/portage/sync/modules/zipfile/__init__.py 
b/lib/portage/sync/modules/zipfile/__init__.py
index 19fe3af412..e44833088c 100644
--- a/lib/portage/sync/modules/zipfile/__init__.py
+++ b/lib/portage/sync/modules/zipfile/__init__.py
@@ -21,10 +21,11 @@ module_spec = {
             "sourcefile": "zipfile",
             "class": "ZipFile",
             "description": doc,
-            "functions": ["sync"],
+            "functions": ["sync", "retrieve_head"],
             "func_desc": {
                 "sync": "Performs an archived http download of the "
                 + "repository, then unpacks it.",
+                "retrieve_head": "Returns the checksum of the unpacked 
archive.",
             },
             "validate_config": CheckSyncConfig,
             "module_specific_options": (),

diff --git a/lib/portage/sync/modules/zipfile/zipfile.py 
b/lib/portage/sync/modules/zipfile/zipfile.py
index bb78b39243..3cd210a64b 100644
--- a/lib/portage/sync/modules/zipfile/zipfile.py
+++ b/lib/portage/sync/modules/zipfile/zipfile.py
@@ -26,6 +26,15 @@ class ZipFile(SyncBase):
     def __init__(self):
         SyncBase.__init__(self, "emerge", ">=sys-apps/portage-2.3")
 
+    def retrieve_head(self, **kwargs):
+        """Get information about the checksum of the unpacked archive"""
+        if kwargs:
+            self._kwargs(kwargs)
+        info = portage.grabdict(os.path.join(self.repo.location, ".info"))
+        if "etag" in info:
+            return (os.EX_OK, info["etag"][0])
+        return (1, False)
+
     def sync(self, **kwargs):
         """Sync the repository"""
         if kwargs:

Reply via email to