egencache: --write-timestamp to create metadata/timestamp.chk
authorSebastian Luther <SebastianLuther@gmx.de>
Fri, 29 Nov 2013 18:02:21 +0000 (19:02 +0100)
committerMike Frysinger <vapier@gentoo.org>
Fri, 29 Nov 2013 23:21:03 +0000 (18:21 -0500)
This is required to sync repositories using rsnyc.

URL: https://bugs.gentoo.org/488972

bin/egencache
pym/portage/const.py

index 54c517e1dcdc84586c4ea675126e6d485e12baba..915adc847046c543ef11d46f8da86ce821593421 100755 (executable)
@@ -48,6 +48,7 @@ portage._internal_caller = True
 from portage import os, _encodings, _unicode_encode, _unicode_decode
 from _emerge.MetadataRegen import MetadataRegen
 from portage.cache.cache_errors import CacheError, StatCollision
+from portage.const import TIMESTAMP_FORMAT
 from portage.manifest import guessManifestFileType
 from portage.package.ebuild._parallel_manifest.ManifestScheduler import ManifestScheduler
 from portage.util import cmp_sort_key, writemsg_level
@@ -133,6 +134,9 @@ def parse_args(args):
        common.add_argument("--ignore-default-opts",
                action="store_true",
                help="do not use the EGENCACHE_DEFAULT_OPTS environment variable")
+       common.add_argument("--write-timestamp",
+               action="store_true",
+               help="write metdata/timestamp.chk as required for rsync repositories")
 
        update = parser.add_argument_group('--update options')
        update.add_argument("--cache-dir",
@@ -1063,6 +1067,16 @@ def egencache_main(args):
                gen_clogs.run()
                ret.append(gen_clogs.returncode)
 
+       if options.write_timestamp:
+               timestamp_path = os.path.join(repo_path, 'metadata', 'timestamp.chk')
+               try:
+                       with open(timestamp_path, 'w') as f:
+                               f.write(time.strftime('%s\n' % TIMESTAMP_FORMAT, time.gmtime()))
+               except IOError:
+                       ret.append(os.EX_IOERR)
+               else:
+                       ret.append(os.EX_OK)
+
        return max(ret)
 
 if __name__ == "__main__":
index 214ede41453eb04b9f13a82c2f0cbb4cb6d4daaf..b2e970eb72f13c554a032c41d3af1eacd742d61b 100644 (file)
@@ -175,6 +175,10 @@ if "PORTAGE_OVERRIDE_EPREFIX" in os.environ:
 VCS_DIRS = ("CVS", "RCS", "SCCS", ".bzr", ".git", ".hg", ".svn")
 
 SUPPORTED_BINPKG_FORMATS = ("tar", "rpm")
+
+# Time formats used in various places like metadata.chk.
+TIMESTAMP_FORMAT = "%a, %d %b %Y %H:%M:%S +0000"       # to be used with time.gmtime()
+
 # ===========================================================================
 # END OF CONSTANTS -- END OF CONSTANTS -- END OF CONSTANTS -- END OF CONSTANT
 # ===========================================================================