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
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"