diff options
author | Zac Medico <zmedico@gentoo.org> | 2008-09-20 08:02:45 +0000 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2008-09-20 08:02:45 +0000 |
commit | eabfcf5e872971848ec00d877d9afc78455e0efe (patch) | |
tree | 31177f8456238da4db28c6507d81011ceb28dba1 /pym/portage/__init__.py | |
parent | 0df2d2b63bdbf81a3519acc84999bc62a0a9549b (diff) | |
download | portage-eabfcf5e872971848ec00d877d9afc78455e0efe.tar.gz portage-eabfcf5e872971848ec00d877d9afc78455e0efe.tar.bz2 portage-eabfcf5e872971848ec00d877d9afc78455e0efe.zip |
Implement SRC_URI arrows for EAPI 2. The portdbapi.getfetchlist() method
is now deprecated and there is a new getFetchMap() method that returns
a dict which maps each file name to a set of alternative URIs. The
portage.fetch() function uses introspection to detect when such a dict
is passed in and handles it appropriately, while maintaining backward
compatibility if a list of uris is passed in.
svn path=/main/trunk/; revision=11522
Diffstat (limited to 'pym/portage/__init__.py')
-rw-r--r-- | pym/portage/__init__.py | 55 |
1 files changed, 21 insertions, 34 deletions
diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py index 199317c28..207432f35 100644 --- a/pym/portage/__init__.py +++ b/pym/portage/__init__.py @@ -3487,11 +3487,19 @@ def fetch(myuris, mysettings, listonly=0, fetchonly=0, locks_in_subdir=".locks", else: locations = mymirrors + file_uri_tuples = [] + if isinstance(myuris, dict): + for myfile, uri_set in myuris.iteritems(): + for myuri in uri_set: + file_uri_tuples.append((myfile, myuri)) + else: + for myuri in myuris: + file_uri_tuples.append((os.path.basename(myuri), myuri)) + filedict={} primaryuri_indexes={} primaryuri_dict = {} - for myuri in myuris: - myfile=os.path.basename(myuri) + for myfile, myuri in file_uri_tuples: if myfile not in filedict: filedict[myfile]=[] for y in range(0,len(locations)): @@ -4150,11 +4158,8 @@ def digestgen(myarchives, mysettings, overwrite=1, manifestonly=0, myportdb=None doebuild_environment(myebuild, "fetch", mysettings["ROOT"], fetch_settings, debug, 1, myportdb) - alluris, aalist = myportdb.getfetchlist( - cpv, mytree=mytree, all=True, - mysettings=fetch_settings) - myuris = [uri for uri in alluris \ - if os.path.basename(uri) == myfile] + uri_map = myportdb.getFetchMap(cpv, mytree=mytree) + myuris = {myfile:uri_map[myfile]} fetch_settings["A"] = myfile # for use by pkg_nofetch() if fetch(myuris, fetch_settings): success = True @@ -4191,8 +4196,7 @@ def digestgen(myarchives, mysettings, overwrite=1, manifestonly=0, myportdb=None writemsg_stdout(" digest.assumed" + portage.output.colorize("WARN", str(len(auto_assumed)).rjust(18)) + "\n") for pkg_key in pkgs: - fetchlist = myportdb.getfetchlist(pkg_key, - mysettings=mysettings, all=True, mytree=mytree)[1] + fetchlist = myportdb.getFetchMap(pkg_key, mytree=mytree) pv = pkg_key.split("/")[1] for filename in auto_assumed: if filename in fetchlist: @@ -5580,11 +5584,10 @@ def doebuild(myebuild, mydo, myroot, mysettings, debug=0, listonly=0, # Make sure we get the correct tree in case there are overlays. mytree = os.path.realpath( os.path.dirname(os.path.dirname(mysettings["O"]))) + useflags = mysettings["PORTAGE_USE"].split() try: - newuris, alist = mydbapi.getfetchlist( - mycpv, mytree=mytree, mysettings=mysettings) - alluris, aalist = mydbapi.getfetchlist( - mycpv, mytree=mytree, all=True, mysettings=mysettings) + alist = mydbapi.getFetchMap(mycpv, useflags=useflags, mytree=mytree) + aalist = mydbapi.getFetchMap(mycpv, mytree=mytree) except portage.exception.InvalidDependString, e: writemsg("!!! %s\n" % str(e), noiselevel=-1) writemsg("!!! Invalid SRC_URI for '%s'.\n" % mycpv, noiselevel=-1) @@ -5593,26 +5596,11 @@ def doebuild(myebuild, mydo, myroot, mysettings, debug=0, listonly=0, mysettings["A"] = " ".join(alist) mysettings["AA"] = " ".join(aalist) if ("mirror" in features) or fetchall: - fetchme = alluris[:] - checkme = aalist[:] - elif mydo == "digest": - fetchme = alluris[:] - checkme = aalist[:] - # Skip files that we already have digests for. - mf = Manifest(mysettings["O"], mysettings["DISTDIR"]) - mydigests = mf.getTypeDigests("DIST") - required_hash_types = set() - required_hash_types.add("size") - required_hash_types.add(portage.const.MANIFEST2_REQUIRED_HASH) - for filename, hashes in mydigests.iteritems(): - if not required_hash_types.difference(hashes): - checkme = [i for i in checkme if i != filename] - fetchme = [i for i in fetchme \ - if os.path.basename(i) != filename] - del filename, hashes + fetchme = aalist + checkme = aalist else: - fetchme = newuris[:] - checkme = alist[:] + fetchme = alist + checkme = alist if mydo == "fetch": # Files are already checked inside fetch(), @@ -6871,8 +6859,7 @@ class FetchlistDict(UserDict.DictMixin): self.portdb = mydbapi def __getitem__(self, pkg_key): """Returns the complete fetch list for a given package.""" - return self.portdb.getfetchlist(pkg_key, mysettings=self.settings, - all=True, mytree=self.mytree)[1] + return self.portdb.getFetchMap(pkg_key, mytree=self.mytree).keys() def __contains__(self, cpv): return cpv in self.keys() def has_key(self, pkg_key): |