ebuild(1): pass Package instance to setcpv
authorZac Medico <zmedico@gentoo.org>
Thu, 30 Jun 2011 04:13:20 +0000 (21:13 -0700)
committerZac Medico <zmedico@gentoo.org>
Thu, 30 Jun 2011 04:13:20 +0000 (21:13 -0700)
This should improve repo-level support, for bug #370693.

bin/ebuild

index 9ad17e83d8af09fadcb43089f99b4c3ff7373ba2..68e52e3edb9e5fe0c1f9a10d7cbd19a868f1e25a 100755 (executable)
@@ -76,6 +76,8 @@ from portage import _shell_quote
 from portage import _unicode_decode
 from portage import _unicode_encode
 from portage.const import VDB_PATH
+from _emerge.Package import Package
+from _emerge.RootConfig import RootConfig
 
 if not opts.ignore_default_opts:
        default_opts = portage.settings.get("EBUILD_DEFAULT_OPTS", "").split()
@@ -171,6 +173,7 @@ if not portage.catpkgsplit(cpv):
 
 if ebuild.startswith(vdb_path):
        mytree = "vartree"
+       pkg_type = "installed"
 
        portage_ebuild = portage.db[portage.root][mytree].dbapi.findname(cpv, myrepo=myrepo)
 
@@ -180,6 +183,7 @@ if ebuild.startswith(vdb_path):
 
 else:
        mytree = "porttree"
+       pkg_type = "ebuild"
 
        portage_ebuild = portage.portdb.findname(cpv, myrepo=myrepo)
 
@@ -253,14 +257,26 @@ if "test" in pargs:
 
 tmpsettings.features.discard("fail-clean")
 
-# Apply package.env settings. This allows per-package FEATURES and other
-# variables (possibly PORTAGE_TMPDIR) to be available as soon as possible.
 try:
-       tmpsettings.setcpv(cpv, mydb=portage.db[portage.root][mytree].dbapi)
+       metadata = dict(zip(Package.metadata_keys,
+               portage.db[portage.settings["ROOT"]][mytree].dbapi.aux_get(
+               cpv, Package.metadata_keys)))
 except KeyError:
        # aux_get failure, message should have been shown on stderr.
        sys.exit(1)
 
+root_config = RootConfig(portage.settings,
+       portage.db[portage.settings["ROOT"]], None)
+
+pkg = Package(built=(pkg_type != "ebuild"), cpv=cpv,
+       metadata=metadata, root_config=root_config,
+       type_name=pkg_type)
+
+# Apply package.env and repo-level settings. This allows per-package
+# FEATURES and other variables (possibly PORTAGE_TMPDIR) to be
+# available as soon as possible.
+tmpsettings.setcpv(pkg)
+
 def stale_env_warning():
        if "clean" not in pargs and \
                "noauto" not in tmpsettings.features and \