summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2007-06-01 20:35:55 +0000
committerZac Medico <zmedico@gentoo.org>2007-06-01 20:35:55 +0000
commit1b3078465cdaa35206047aec863c6614df46aca1 (patch)
treebcdd6793c406dca3feb64f1d12e98f15a83f796a
parent151609186aaa937ce22b50293e8436e6b078e466 (diff)
downloadportage-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.py34
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)