summaryrefslogtreecommitdiffstats
path: root/pym/_emerge
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2008-02-22 22:20:50 +0000
committerZac Medico <zmedico@gentoo.org>2008-02-22 22:20:50 +0000
commit7e8f827222d3cc7a8614d49ec4590b4a620e7cd8 (patch)
tree34c17710f654f6a2e412e07c185b53fe6464db61 /pym/_emerge
parent71b5bbf7516cf75b9dafcdf9558a64b9bfc7bd79 (diff)
downloadportage-7e8f827222d3cc7a8614d49ec4590b4a620e7cd8.tar.gz
portage-7e8f827222d3cc7a8614d49ec4590b4a620e7cd8.tar.bz2
portage-7e8f827222d3cc7a8614d49ec4590b4a620e7cd8.zip
Add support for file paths as arguments to emerge. If an argument starts
with / and it's not recognized as a tbz2 or ebuild then we try to find and owner in the vdb and generate a slot atom from it. Thanks to solar for the suggestion. svn path=/main/trunk/; revision=9367
Diffstat (limited to 'pym/_emerge')
-rw-r--r--pym/_emerge/__init__.py30
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