summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2009-03-09 06:03:06 +0000
committerZac Medico <zmedico@gentoo.org>2009-03-09 06:03:06 +0000
commit005f56110e90c4ff1fef5a8eccd99ecd85cf908b (patch)
treef363c98ea2c936228653b6c86c677ad20b832158 /bin/repoman
parentReorganize code for --digests and FEATURES=digest. (diff)
downloadportage-idfetch-005f56110e90c4ff1fef5a8eccd99ecd85cf908b.tar.gz
portage-idfetch-005f56110e90c4ff1fef5a8eccd99ecd85cf908b.tar.bz2
portage-idfetch-005f56110e90c4ff1fef5a8eccd99ecd85cf908b.zip
Make manifest mode with --force option cause existing digests to be replaced
for any files that exist in ${DISTDIR}. This provides an alternative to ebuild --force manifest for updating existing distfiles digests. Digests are assumed to be corect for files that do not exist in ${DISTDIR} since the user could simply remove the whole Manifest if they wanted to regenerate digests for all files (and it's safer to regenerate as few as possible because it's less probably that a valid digest will get replaced by an invalid one). svn path=/main/trunk/; revision=12802
Diffstat (limited to 'bin/repoman')
-rwxr-xr-xbin/repoman39
1 files changed, 39 insertions, 0 deletions
diff --git a/bin/repoman b/bin/repoman
index 318bc1ca..bc962823 100755
--- a/bin/repoman
+++ b/bin/repoman
@@ -799,11 +799,50 @@ for x in scanlist:
if options.mode == "manifest" or \
options.mode in ('commit', 'fix') and not options.pretend:
+ auto_assumed = set()
+ fetchlist_dict = portage.FetchlistDict(checkdir,
+ repoman_settings, portdb)
+ if options.mode == 'manifest' and options.force:
+ portage._doebuild_manifest_exempt_depend += 1
+ try:
+ distdir = repoman_settings['DISTDIR']
+ mf = portage.manifest.Manifest(checkdir, distdir,
+ fetchlist_dict=fetchlist_dict)
+ mf.create(requiredDistfiles=None,
+ assumeDistHashesAlways=True)
+ for distfiles in fetchlist_dict.itervalues():
+ for distfile in distfiles:
+ if os.path.isfile(os.path.join(distdir, distfile)):
+ mf.fhashdict['DIST'].pop(distfile, None)
+ else:
+ auto_assumed.add(distfile)
+ mf.write()
+ finally:
+ portage._doebuild_manifest_exempt_depend -= 1
+
repoman_settings["O"] = checkdir
if not portage.digestgen([], repoman_settings, myportdb=portdb):
print "Unable to generate manifest."
dofail = 1
if options.mode == "manifest":
+ if not dofail and options.force and auto_assumed and \
+ 'assume-digests' in repoman_settings.features:
+ # Show which digests were assumed despite the --force option
+ # being given. This output will already have been shown by
+ # digestgen() if assume-digests is not enabled, so only show
+ # it here if assume-digests is enabled.
+ pkgs = list(fetchlist_dict)
+ pkgs.sort()
+ portage.writemsg_stdout(" digest.assumed" + \
+ portage.output.colorize("WARN",
+ str(len(auto_assumed)).rjust(18)) + "\n")
+ for cpv in pkgs:
+ fetchmap = fetchlist_dict[cpv]
+ pf = portage.catsplit(cpv)[1]
+ for distfile in sorted(fetchmap):
+ if distfile in auto_assumed:
+ portage.writemsg_stdout(
+ " %s::%s\n" % (pf, distfile))
continue
elif dofail:
sys.exit(1)