if not kwlist:
err("Couldn't read KEYWORDS from arch.list")
+manifest1_compat = not os.path.exists(
+ os.path.join(portdir, "manifest1_obsolete"))
if portdir_overlay != portdir:
kwlist.update(portage.grabfile(
os.path.join(portdir_overlay, "profiles", "arch.list")))
+ manifest1_compat = not os.path.exists(
+ os.path.join(portdir_overlay, "manifest1_obsolete"))
scanlist=[]
if repolevel==2:
if os.path.exists(checkdir+"/files"):
filesdirlist=os.listdir(checkdir+"/files")
- for y in filesdirlist:
- if y[:7]=="digest-":
+ if manifest1_compat:
+ for y in filesdirlist:
+ if not y.startswith("digest-"):
+ continue
if y[7:] not in dadded:
#digest not added to cvs or svn
stats["digest.notadded"]=stats["digest.notadded"]+1
if y in dadded:
stats["ebuild.disjointed"]=stats["ebuild.disjointed"]+1
fails["ebuild.disjointed"].append(x+"/"+y+".ebuild")
- if not os.path.exists(checkdir+"/files/digest-"+y):
+ if manifest1_compat and \
+ not os.path.exists(os.path.join(checkdir, "files", "digest-"+y)):
if mymode=="fix":
if "--pretend" in myoptions:
print "You will need to run:"
except AttributeError:
print "Failed to insert portage version in message!"
commitmessage+="\n(Portage version: Unknown)"
+
+ if not manifest1_compat:
+ myfiles = myupdates + myremoved + mymanifests
+ filesdirs = set()
+ if repolevel == 3:
+ filesdirs.add(os.path.join(".", "files"))
+ elif repolevel in (1, 2):
+ for x in myfiles:
+ xs = x.split(os.path.sep)
+ if len(xs) < 4-repolevel:
+ continue
+ xs = xs[0:4-repolevel]
+ xs.append("files")
+ filesdirs.add(os.path.join(*xs))
+ else:
+ raise AssertionError("repolevel=%s" % str(repolevel))
+ digest_files = []
+ for x in filesdirs:
+ dir_path = os.path.join(startdir, x)
+ if not os.path.isdir(dir_path):
+ continue
+ for y in os.listdir(dir_path):
+ if y.startswith("digest-"):
+ digest_files.append(os.path.join(x, y))
+ if digest_files:
+ digest_files.sort()
+ if "--pretend" in myoptions:
+ print "(rm %s)" % " ".join(digest_files)
+ if isCvs:
+ print "(cvs remove %s)" % " ".join(digest_files)
+ elif isSvn:
+ print "(svn remove %s)" % " ".join(digest_files)
+ else:
+ for x in digest_files:
+ os.unlink(os.path.join(startdir, x))
+ if isCvs:
+ retval = spawn(["cvs", "remove"] + digest_files,
+ env=os.environ)
+ elif isSvn:
+ retval = spawn(["svn", "remove"] + digest_files,
+ env=os.environ)
+ if retval != os.EX_OK:
+ print "!!! Exiting on vcs (shell) error code:",retval
+ sys.exit(retval)
+ myremoved.extend(digest_files)
+ myremoved = list(set(myremoved))
+ myremoved.sort()
+
if myupdates or myremoved:
myfiles = myupdates + myremoved
fd, commitmessagefile = tempfile.mkstemp(".repoman.msg")
"--delete-after", # Delete only after everything else is done
"--stats", # Show final statistics about what was transfered
"--timeout="+str(mytimeout), # IO timeout if not done in X seconds
- "--exclude='/distfiles'", # Exclude distfiles from consideration
- "--exclude='/local'", # Exclude local from consideration
- "--exclude='/packages'", # Exclude packages from consideration
+ "--exclude=/distfiles", # Exclude distfiles from consideration
+ "--exclude=/local", # Exclude local from consideration
+ "--exclude=/packages", # Exclude packages from consideration
+ "--filter=H_**/files/digest-*" # Exclude manifest1 digests and delete on the receiving side
])
else:
writemsg("!!! Invalid SRC_URI for '%s'.\n" % cpv, noiselevel=-1)
del e
return 0
+ mytree = os.path.dirname(os.path.dirname(mysettings["O"]))
+ manifest1_compat = not os.path.exists(
+ os.path.join(mytree, "manifest1_obsolete"))
mf = Manifest(mysettings["O"], mysettings["DISTDIR"],
- fetchlist_dict=fetchlist_dict)
+ fetchlist_dict=fetchlist_dict, manifest1_compat=manifest1_compat)
# Don't require all hashes since that can trigger excessive
# fetches when sufficient digests already exist. To ease transition
# while Manifest 1 is being removed, only require hashes that will
self.hashes = sets.Set(self.hashes)
for t in portage.const.MANIFEST2_IDENTIFIERS:
self.fhashdict[t] = {}
+ self.compat = manifest1_compat
if not from_scratch:
self._read()
- self.compat = manifest1_compat
if fetchlist_dict != None:
self.fetchlist_dict = fetchlist_dict
else:
self._readManifest(self.getFullname(), myhashdict=self.fhashdict)
except FileNotFound:
pass
- self._readDigests(myhashdict=self.fhashdict)
-
+ if self.compat:
+ self._readDigests(myhashdict=self.fhashdict)
def _parseManifestLines(self, mylines):
"""Parse manifest lines and return a list of manifest entries."""
else:
distfilehashes = {}
self.__init__(self.pkgdir, self.distdir,
- fetchlist_dict=self.fetchlist_dict, from_scratch=True)
+ fetchlist_dict=self.fetchlist_dict, from_scratch=True,
+ manifest1_compat=self.compat)
for pkgdir, pkgdir_dirs, pkgdir_files in os.walk(self.pkgdir):
break
for f in pkgdir_files: