diff options
author | Zac Medico <zmedico@gentoo.org> | 2007-06-01 20:35:55 +0000 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2007-06-01 20:35:55 +0000 |
commit | 1b3078465cdaa35206047aec863c6614df46aca1 (patch) | |
tree | bcdd6793c406dca3feb64f1d12e98f15a83f796a | |
parent | 151609186aaa937ce22b50293e8436e6b078e466 (diff) | |
download | portage-1b3078465cdaa35206047aec863c6614df46aca1.tar.gz portage-1b3078465cdaa35206047aec863c6614df46aca1.tar.bz2 portage-1b3078465cdaa35206047aec863c6614df46aca1.zip |
Add an optional PATH attribute to the Packages index in order to indicate the relative path of the package within the repository. In the future this will allow storage of more than one package per cpv but for now it's just use to indicate if a package is stored in the old-style All/ directory (instead of the category directory).
svn path=/main/trunk/; revision=6718
-rw-r--r-- | pym/portage/dbapi/bintree.py | 34 |
1 files changed, 25 insertions, 9 deletions
diff --git a/pym/portage/dbapi/bintree.py b/pym/portage/dbapi/bintree.py index c6cc084c9..061a8d8d8 100644 --- a/pym/portage/dbapi/bintree.py +++ b/pym/portage/dbapi/bintree.py @@ -397,6 +397,18 @@ class binarytree(object): # discard duplicates (All/ is preferred) continue pkg_paths[mycpv] = mypath + # update the path if the package has been moved + oldpath = d.get("PATH") + if oldpath and oldpath != mypath: + update_pkgindex = True + if mypath != mycpv + ".tbz2": + d["PATH"] = mypath + if not oldpath: + update_pkgindex = True + else: + d.pop("PATH", None) + if oldpath: + update_pkgindex = True self.dbapi.cpv_inject(mycpv) if not self.dbapi._aux_cache_keys.difference(d): aux_cache = {} @@ -458,6 +470,11 @@ class binarytree(object): d["SLOT"] = slot d["MTIME"] = str(long(s.st_mtime)) d["SIZE"] = str(s.st_size) + # record location if it's non-default + if mypath != mycpv + ".tbz2": + d["PATH"] = mypath + else: + d.pop("PATH", None) metadata[mycpv] = d if not self.dbapi._aux_cache_keys.difference(d): aux_cache = {} @@ -660,6 +677,10 @@ class binarytree(object): d["MTIME"] = str(long(s.st_mtime)) d["SIZE"] = str(s.st_size) d["MD5"] = str(md5) + rel_path = self._pkg_paths[cpv] + # record location if it's non-default + if rel_path != cpv + ".tbz2": + d["PATH"] = rel_path keys = ["USE", "IUSE", "DESCRIPTION", "LICENSE", "PROVIDE", \ "RDEPEND", "DEPEND", "PDEPEND"] from itertools import izip @@ -785,16 +806,11 @@ class binarytree(object): base_url = self.settings["PORTAGE_BINHOST"] fcmd = self.settings["RESUMECOMMAND"] if self._remote_has_index: - url = urljoin(base_url, pkgname+".tbz2") + rel_url = self._remotepkgs[pkgname].get("PATH") + if not rel_url: + rel_url = pkgname+".tbz2" + url = urljoin(base_url, rel_url) success = portage.getbinpkg.file_get(url, mydest, fcmd=fcmd) - if not success: - try: - os.unlink(self.getname(pkgname)) - except OSError: - pass - # Fall back to the "All" directory - url = urljoin(base_url, "All/"+tbz2name) - success = portage.getbinpkg.file_get(url, mydest, fcmd=fcmd) else: url = urljoin(base_url, tbz2name) success = portage.getbinpkg.file_get(url, mydest, fcmd=fcmd) |