summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2008-05-26 09:21:29 +0000
committerZac Medico <zmedico@gentoo.org>2008-05-26 09:21:29 +0000
commit68788c229e76692b42bf2235a880ec1b430dab28 (patch)
treec1a05f0a499fc8d2f7c4d8ca651dc4154b4590bc
parent928604f3381a7693689956da3f87b139338c38e1 (diff)
downloadportage-68788c229e76692b42bf2235a880ec1b430dab28.tar.gz
portage-68788c229e76692b42bf2235a880ec1b430dab28.tar.bz2
portage-68788c229e76692b42bf2235a880ec1b430dab28.zip
* Enable config.setcpv() to use a Package instance in place of a cpv.
* Make depgraph._select_package() pass Package instances into setcpv() calls. * Enable the Package constructor to use an iterable for metadata items. (trunk r10427) svn path=/main/branches/2.1.2/; revision=10428
-rwxr-xr-xbin/emerge50
-rw-r--r--pym/portage.py12
2 files changed, 37 insertions, 25 deletions
diff --git a/bin/emerge b/bin/emerge
index dc91079b4..b9ecd76fe 100755
--- a/bin/emerge
+++ b/bin/emerge
@@ -1430,7 +1430,12 @@ class Package(Task):
def __init__(self, pkg, metadata):
dict.__init__(self)
self._pkg = pkg
- for k, v in metadata.iteritems():
+ i = getattr(metadata, "iteritems", None)
+ if i is None:
+ i = metadata
+ else:
+ i = i()
+ for k, v in i:
self[k] = v
def __setitem__(self, k, v):
@@ -3134,21 +3139,22 @@ class depgraph(object):
if pkg is None:
calculated_use = False
try:
- metadata = dict(izip(self._mydbapi_keys,
- db.aux_get(cpv, self._mydbapi_keys)))
+ metadata = zip(self._mydbapi_keys,
+ db.aux_get(cpv, self._mydbapi_keys))
except KeyError:
continue
+ pkg = Package(built=built, cpv=cpv,
+ installed=installed, metadata=metadata,
+ onlydeps=onlydeps, root=root, type_name=pkg_type)
+ metadata = pkg.metadata
if not built and ("?" in metadata["LICENSE"] or \
"?" in metadata["PROVIDE"]):
# This is avoided whenever possible because
# it's expensive. It only needs to be done here
# if it has an effect on visibility.
- pkgsettings.setcpv(cpv, mydb=metadata)
+ pkgsettings.setcpv(pkg)
metadata["USE"] = pkgsettings["PORTAGE_USE"]
calculated_use = True
- pkg = Package(built=built, cpv=cpv,
- installed=installed, metadata=metadata,
- onlydeps=onlydeps, root=root, type_name=pkg_type)
self._pkg_cache[pkg] = pkg
if not installed or (installed and matched_packages):
@@ -3187,7 +3193,7 @@ class depgraph(object):
if not built and not calculated_use:
# This is avoided whenever possible because
# it's expensive.
- pkgsettings.setcpv(cpv, mydb=pkg.metadata)
+ pkgsettings.setcpv(pkg)
pkg.metadata["USE"] = pkgsettings["PORTAGE_USE"]
myarg = None
@@ -3239,14 +3245,11 @@ class depgraph(object):
"--reinstall" in self.myopts):
iuses = set(filter_iuse_defaults(
pkg.metadata["IUSE"].split()))
- old_use = pkg.metadata["USE"].split()
- mydb = pkg.metadata
- if myeb and not usepkgonly:
- mydb = portdb
+ old_use = pkg.use.enabled
if myeb:
- pkgsettings.setcpv(myeb, mydb=mydb)
+ pkgsettings.setcpv(myeb)
else:
- pkgsettings.setcpv(cpv, mydb=mydb)
+ pkgsettings.setcpv(pkg)
now_use = pkgsettings["PORTAGE_USE"].split()
forced_flags = set()
forced_flags.update(pkgsettings.useforce)
@@ -3254,8 +3257,7 @@ class depgraph(object):
cur_iuse = iuses
if myeb and not usepkgonly:
cur_iuse = set(filter_iuse_defaults(
- portdb.aux_get(myeb,
- ["IUSE"])[0].split()))
+ myeb.metadata["IUSE"].split()))
if self._reinstall_for_flags(forced_flags,
old_use, iuses,
now_use, cur_iuse):
@@ -3266,7 +3268,7 @@ class depgraph(object):
("--newuse" in self.myopts or \
"--reinstall" in self.myopts) and \
cpv in vardb.match(atom):
- pkgsettings.setcpv(cpv, mydb=pkg.metadata)
+ pkgsettings.setcpv(pkg)
forced_flags = set()
forced_flags.update(pkgsettings.useforce)
forced_flags.update(pkgsettings.usemask)
@@ -3283,7 +3285,7 @@ class depgraph(object):
if reinstall_for_flags:
reinstall = True
if not built:
- myeb = cpv
+ myeb = pkg
matched_packages.append(pkg)
if reinstall_for_flags:
self._reinstall_nodes[pkg] = \
@@ -5279,23 +5281,23 @@ class depgraph(object):
continue
mydb = trees[myroot][self.pkg_tree_map[pkg_type]].dbapi
try:
- metadata = dict(izip(self._mydbapi_keys,
- mydb.aux_get(pkg_key, self._mydbapi_keys)))
+ metadata = zip(self._mydbapi_keys,
+ mydb.aux_get(pkg_key, self._mydbapi_keys))
except KeyError:
# It does no exist or it is corrupt.
if action == "uninstall":
continue
raise portage_exception.PackageNotFound(pkg_key)
- if pkg_type == "ebuild":
- pkgsettings = self.pkgsettings[myroot]
- pkgsettings.setcpv(pkg_key, mydb=metadata)
- metadata["USE"] = pkgsettings["PORTAGE_USE"]
installed = action == "uninstall"
built = pkg_type != "ebuild"
pkg = Package(built=built, cpv=pkg_key,
installed=installed, metadata=metadata,
operation=action, root=myroot,
type_name=pkg_type)
+ if pkg_type == "ebuild":
+ pkgsettings = self.pkgsettings[myroot]
+ pkgsettings.setcpv(pkg)
+ pkg.metadata["USE"] = pkgsettings["PORTAGE_USE"]
self._pkg_cache[pkg] = pkg
root_config = self.roots[pkg.root]
diff --git a/pym/portage.py b/pym/portage.py
index 68c2bb645..414fffd7c 100644
--- a/pym/portage.py
+++ b/pym/portage.py
@@ -1970,6 +1970,13 @@ class config:
"""
self.modifying()
+
+ pkg = None
+ if not isinstance(mycpv, basestring):
+ pkg = mycpv
+ mycpv = pkg.cpv
+ mydb = pkg.metadata
+
if self.mycpv == mycpv:
return
ebuild_phase = self.get("EBUILD_PHASE")
@@ -1985,7 +1992,10 @@ class config:
iuse = mydb["IUSE"]
else:
slot, iuse = mydb.aux_get(self.mycpv, ["SLOT", "IUSE"])
- cpv_slot = "%s:%s" % (self.mycpv, slot)
+ if pkg is None:
+ cpv_slot = "%s:%s" % (self.mycpv, slot)
+ else:
+ cpv_slot = pkg
pkginternaluse = []
for x in iuse.split():
if x.startswith("+"):