Fix emerge by ebuild path so that it works properly. (trunk r7166)
authorZac Medico <zmedico@gentoo.org>
Fri, 6 Jul 2007 00:11:19 +0000 (00:11 -0000)
committerZac Medico <zmedico@gentoo.org>
Fri, 6 Jul 2007 00:11:19 +0000 (00:11 -0000)
svn path=/main/branches/2.1.2/; revision=7167

bin/emerge

index 0c48a3d47b75711fccd14260973dbae01d593b22..837833799d8043f754e2a4acaa7293638d5c45e9 100755 (executable)
@@ -1499,13 +1499,25 @@ class depgraph:
                                        return (0,myfavorites)
                                arg_atoms.append((x, "="+mykey))
                        elif ext==".ebuild":
-                               x = os.path.realpath(x)
-                               mykey=os.path.basename(os.path.normpath(x+"/../.."))+"/"+os.path.splitext(os.path.basename(x))[0]
+                               ebuild_path = portage_util.normalize_path(os.path.abspath(x))
+                               pkgdir = os.path.dirname(ebuild_path)
+                               tree_root = os.path.dirname(os.path.dirname(pkgdir))
+                               cp = pkgdir[len(tree_root)+1:]
+                               e = portage_exception.PackageNotFound(
+                                       ("%s is not in a valid portage tree " + \
+                                       "hierarchy or does not exist") % x)
+                               if not portage.isvalidatom(cp):
+                                       raise e
+                               cat = portage.catsplit(cp)[0]
+                               mykey = cat + "/" + os.path.basename(ebuild_path[:-7])
+                               if not portage.isvalidatom("="+mykey):
+                                       raise e
                                ebuild_path = portdb.findname(mykey)
                                if ebuild_path:
-                                       if os.path.realpath(ebuild_path) != x:
+                                       if ebuild_path != os.path.join(os.path.realpath(tree_root),
+                                               cp, os.path.basename(ebuild_path)):
                                                print colorize("BAD", "\n*** You need to adjust PORTDIR or PORTDIR_OVERLAY to emerge this package.\n")
-                                               sys.exit(1)
+                                               return 0, myfavorites
                                        if mykey not in portdb.xmatch(
                                                "match-visible", portage.dep_getkey(mykey)):
                                                print colorize("BAD", "\n*** You are emerging a masked package. It is MUCH better to use")
@@ -1517,7 +1529,7 @@ class depgraph:
                                        raise portage_exception.PackageNotFound(
                                                "%s is not in a valid portage tree hierarchy or does not exist" % x)
                                if not self.create(["ebuild", myroot, mykey],
-                                       None, "--onlydeps" not in self.myopts):
+                                       None, "--onlydeps" not in self.myopts, arg=x):
                                        return (0,myfavorites)
                                arg_atoms.append((x, "="+mykey))
                        else: