From 1b3078465cdaa35206047aec863c6614df46aca1 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Fri, 1 Jun 2007 20:35:55 +0000 Subject: 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 --- pym/portage/dbapi/bintree.py | 34 +++++++++++++++++++++++++--------- 1 file 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) -- cgit v1.2.3-1-g7c22