diff options
-rw-r--r-- | pym/_emerge/__init__.py | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/pym/_emerge/__init__.py b/pym/_emerge/__init__.py index a1728cb58..78da2f329 100644 --- a/pym/_emerge/__init__.py +++ b/pym/_emerge/__init__.py @@ -1429,6 +1429,7 @@ class depgraph(object): self._reinstall_nodes = {} self.mydbapi = {} self.trees = {} + self._trees_orig = trees self.roots = {} # Contains a filtered view of preferred packages that are selected # from available repositories. @@ -2123,6 +2124,35 @@ class depgraph(object): cpv=mykey, metadata=metadata, onlydeps=onlydeps) args.append(PackageArg(arg=x, package=pkg, root_config=root_config)) + elif x.startswith(os.path.sep): + if not x.startswith(myroot): + portage.writemsg(("\n\n!!! '%s' does not start with" + \ + " $ROOT.\n") % x, noiselevel=-1) + return 0, [] + relative_path = x[len(myroot):] + vartree = self._trees_orig[myroot]["vartree"] + owner_cpv = None + for cpv in vardb.cpv_all(): + self.spinner.update() + cat, pf = portage.catsplit(cpv) + if portage.dblink(cat, pf, myroot, + pkgsettings, vartree=vartree).isowner( + relative_path, myroot): + owner_cpv = cpv + break + if owner_cpv is None: + portage.writemsg(("\n\n!!! '%s' is not claimed " + \ + "by any package.\n") % x, noiselevel=-1) + return 0, [] + slot = vardb.aux_get(owner_cpv, ["SLOT"])[0] + if not slot: + # portage now masks packages with missing slot, but it's + # possible that one was installed by an older version + atom = portage.cpv_getkey(owner_cpv) + else: + atom = "%s:%s" % (portage.cpv_getkey(owner_cpv), slot) + args.append(AtomArg(arg=atom, atom=atom, + root_config=root_config)) else: if x in ("system", "world"): x = SETPREFIX + x |