summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2008-03-28 09:43:03 +0000
committerZac Medico <zmedico@gentoo.org>2008-03-28 09:43:03 +0000
commitc775fab794d9b17d9c6820d6a5b6b4a770bf152e (patch)
treed8d625ba023c9cdb0b928fd014e082f75438e080
parentd2d8255c09ea64b7f1a1640c400fdcc531f3f435 (diff)
downloadportage-c775fab794d9b17d9c6820d6a5b6b4a770bf152e.tar.gz
portage-c775fab794d9b17d9c6820d6a5b6b4a770bf152e.tar.bz2
portage-c775fab794d9b17d9c6820d6a5b6b4a770bf152e.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. (trunk r9367) svn path=/main/branches/2.1.2/; revision=9535
-rwxr-xr-xbin/emerge29
1 files changed, 29 insertions, 0 deletions
diff --git a/bin/emerge b/bin/emerge
index 2bdfbc61e..a7c843b95 100755
--- a/bin/emerge
+++ b/bin/emerge
@@ -1469,6 +1469,7 @@ class depgraph:
self._reinstall_nodes = {}
self.mydbapi = {}
self.trees = {}
+ self._trees_orig = trees
self.roots = {}
for myroot in trees:
self.trees[myroot] = {}
@@ -2010,6 +2011,34 @@ class depgraph:
None, "--onlydeps" not in self.myopts, arg=x):
return (0,myfavorites)
arg_atoms.append((x, "="+mykey))
+ 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)
+ arg_atoms.append((x, atom))
else:
if not is_valid_package_atom(x):
portage.writemsg("\n\n!!! '%s' is not a valid package atom.\n" % x,