summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2008-06-01 01:41:04 +0000
committerZac Medico <zmedico@gentoo.org>2008-06-01 01:41:04 +0000
commitca3c06f074d1d9904a55b4e3c65668f1bd293064 (patch)
treea77f98978543f6c22d175256fb3aba6a357d6a80
parentMake PackageSet._setAtoms() use existing Atom instances when available. (diff)
downloadportage-multirepo-ca3c06f074d1d9904a55b4e3c65668f1bd293064.tar.gz
portage-multirepo-ca3c06f074d1d9904a55b4e3c65668f1bd293064.tar.bz2
portage-multirepo-ca3c06f074d1d9904a55b4e3c65668f1bd293064.zip
Make --skipfirst tolerate masked packages by dropping them (similar to
how it would drop a package that has an unsatisfied dependency). (trunk r10526) svn path=/main/branches/2.1.2/; revision=10527
-rwxr-xr-xbin/emerge28
1 files changed, 18 insertions, 10 deletions
diff --git a/bin/emerge b/bin/emerge
index 818cf11c..c9971082 100755
--- a/bin/emerge
+++ b/bin/emerge
@@ -5362,9 +5362,18 @@ class depgraph(object):
if not isinstance(mergelist, list):
mergelist = []
+ favorites = resume_data.get("favorites")
+ args_set = self._sets["args"]
+ if isinstance(favorites, list):
+ args = self._load_favorites(favorites)
+ else:
+ args = []
+
+ skipfirst = "--skipfirst" in self.myopts
fakedb = self.mydbapi
trees = self.trees
serialized_tasks = []
+ masked_tasks = []
for x in mergelist:
if not (isinstance(x, list) and len(x) == 4):
continue
@@ -5398,8 +5407,13 @@ class depgraph(object):
root_config = self.roots[pkg.root]
if "merge" == pkg.operation and \
not visible(root_config.settings, pkg):
- self._unsatisfied_deps_for_display.append(
- ((pkg.root, "="+pkg.cpv), {"myparent":None}))
+ if skipfirst:
+ atom = args_set.findAtomForPackage(pkg)
+ masked_tasks.append(Dependency(atom=atom,
+ root=pkg.root, parent=pkg))
+ else:
+ self._unsatisfied_deps_for_display.append(
+ ((pkg.root, "="+pkg.cpv), {"myparent":None}))
fakedb[myroot].cpv_inject(pkg)
serialized_tasks.append(pkg)
@@ -5414,12 +5428,6 @@ class depgraph(object):
self._select_package = self._select_pkg_from_graph
self.myparams.add("selective")
- favorites = resume_data.get("favorites")
- if isinstance(favorites, list):
- args = self._load_favorites(favorites)
- else:
- args = []
-
for task in serialized_tasks:
if isinstance(task, Package) and \
task.operation == "merge":
@@ -5443,13 +5451,13 @@ class depgraph(object):
# masked.
if not self._create_graph(allow_unsatisfied=True):
return False
- if self._unsatisfied_deps:
+ if masked_tasks or self._unsatisfied_deps:
# This probably means that a required package
# was dropped via --skipfirst. It makes the
# resume list invalid, so convert it to a
# UnsatisfiedResumeDep exception.
raise self.UnsatisfiedResumeDep(
- self._unsatisfied_deps)
+ masked_tasks + self._unsatisfied_deps)
self._serialized_tasks_cache = None
try:
self.altlist()