From c775fab794d9b17d9c6820d6a5b6b4a770bf152e Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Fri, 28 Mar 2008 09:43:03 +0000 Subject: [PATCH] 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 --- bin/emerge | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) 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, -- 2.26.2