Make sure that portdb.findname() returns the correct ebuild.
authorZac Medico <zmedico@gentoo.org>
Fri, 11 Jan 2008 05:47:25 +0000 (05:47 -0000)
committerZac Medico <zmedico@gentoo.org>
Fri, 11 Jan 2008 05:47:25 +0000 (05:47 -0000)
(trunk r9164:9165)

svn path=/main/branches/2.1.2/; revision=9173

bin/ebuild

index d4a3a66670bc2bbaa15d1d79d10fcaaba38b033a..f82be264cca83d5a006bc2b0e32dd7ea6d39e429 100755 (executable)
@@ -58,8 +58,20 @@ if not os.path.isabs(ebuild):
 ebuild = portage.normalize_path(ebuild)
 # portdbapi uses the canonical path for the base of the portage tree, but
 # subdirectories of the base can be built from symlinks (like crossdev does).
-ebuild_portdir = os.path.realpath(os.path.dirname(os.path.dirname(ebuild)))
-ebuild = os.path.join(ebuild_portdir, *ebuild.split(os.path.sep)[-2:])
+ebuild_portdir = os.path.realpath(
+       os.path.dirname(os.path.dirname(os.path.dirname(ebuild))))
+ebuild = os.path.join(ebuild_portdir, *ebuild.split(os.path.sep)[-3:])
+
+# Make sure that portdb.findname() returns the correct ebuild.
+if ebuild_portdir not in portage.portdb.porttrees:
+       os.environ["PORTDIR_OVERLAY"] = \
+               os.environ.get("PORTDIR_OVERLAY","") + " " + ebuild_portdir
+       print "Appending %s to PORTDIR_OVERLAY..." % ebuild_portdir
+       portage.close_portdbapi_caches()
+       reload(portage)
+del portage.portdb.porttrees[1:]
+if ebuild_portdir != portage.portdb.porttree_root:
+       portage.portdb.porttrees.append(ebuild_portdir)
 
 if not os.path.exists(ebuild):
        print "'%s' does not exist." % ebuild
@@ -88,17 +100,8 @@ else:
        portage_ebuild = portage.portdb.findname(cpv)
 
        if not portage_ebuild or portage_ebuild != ebuild:
-               overlay = "/".join(ebuild_split[:-2])
-               os.environ["PORTDIR_OVERLAY"] = os.environ.get("PORTDIR_OVERLAY","") + " " + overlay
-               print "Appending %s to PORTDIR_OVERLAY..." % overlay
-               portage.close_portdbapi_caches()
-               reload(portage)
-               portage_ebuild = portage.portdb.findname(cpv)
-
-               if not portage_ebuild or portage_ebuild != ebuild:
-                       print "!!! %s does not seem to have a valid PORTDIR structure." % overlay
-                       sys.exit(1)
-
+               print "!!! %s does not seem to have a valid PORTDIR structure." % ebuild
+               sys.exit(1)
 
 if len(pargs) > 1 and "config" in pargs:
        print "config must be called on it's own, not combined with any other phase"