summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pym/_emerge/__init__.py60
1 files changed, 44 insertions, 16 deletions
diff --git a/pym/_emerge/__init__.py b/pym/_emerge/__init__.py
index 61e67f1c5..3e10d71e9 100644
--- a/pym/_emerge/__init__.py
+++ b/pym/_emerge/__init__.py
@@ -1453,8 +1453,7 @@ class EbuildFetcher(Task):
class EbuildBuild(Task):
- __slots__ = ("ldpath_mtimes",
- "pkg", "pretend", "settings")
+ __slots__ = ("pkg", "pretend", "settings")
def _get_hash_key(self):
hash_key = getattr(self, "_hash_key", None)
@@ -1471,8 +1470,45 @@ class EbuildBuild(Task):
retval = portage.doebuild(ebuild_path, "install",
root_config.root, self.settings, debug, vartree=vartree,
- mydbapi=portdb, tree="porttree",
- prev_mtimes=self.ldpath_mtimes)
+ mydbapi=portdb, tree="porttree")
+ return retval
+
+class EbuildBinpkg(Task):
+
+ __slots__ = ("pkg", "pretend", "settings")
+
+ def _get_hash_key(self):
+ hash_key = getattr(self, "_hash_key", None)
+ if hash_key is None:
+ self._hash_key = ("EbuildBinpkg", self.pkg._get_hash_key())
+ return self._hash_key
+
+ def execute(self):
+ pkg = self.pkg
+ root_config = pkg.root_config
+ portdb = root_config.trees["porttree"].dbapi
+ bintree = root_config.trees["bintree"]
+ ebuild_path = portdb.findname(self.pkg.cpv)
+ settings = self.settings
+ debug = settings.get("PORTAGE_DEBUG") == "1"
+
+ bintree.prevent_collision(pkg.cpv)
+ binpkg_tmpfile = os.path.join(bintree.pkgdir,
+ pkg.cpv + ".tbz2." + str(os.getpid()))
+ settings["PORTAGE_BINPKG_TMPFILE"] = binpkg_tmpfile
+ settings.backup_changes("PORTAGE_BINPKG_TMPFILE")
+
+ try:
+ retval = portage.doebuild(ebuild_path,
+ "package", root_config.root,
+ settings, debug, mydbapi=portdb,
+ tree="porttree")
+ finally:
+ self.settings.pop("PORTAGE_BINPKG_TMPFILE", None)
+
+ if retval == os.EX_OK:
+ bintree.inject(pkg.cpv, filename=binpkg_tmpfile)
+
return retval
class EbuildMerge(Task):
@@ -6460,21 +6496,13 @@ class MergeTask(object):
short_msg = "emerge: (%s of %s) %s Compile" % \
(mergecount, len(mymergelist), pkg_key)
emergelog(xterm_titles, msg, short_msg=short_msg)
- self.trees[myroot]["bintree"].prevent_collision(pkg_key)
- binpkg_tmpfile = os.path.join(pkgsettings["PKGDIR"],
- pkg_key + ".tbz2." + str(os.getpid()))
- pkgsettings["PORTAGE_BINPKG_TMPFILE"] = binpkg_tmpfile
- pkgsettings.backup_changes("PORTAGE_BINPKG_TMPFILE")
- retval = portage.doebuild(y, "package", myroot,
- pkgsettings, self.edebug, mydbapi=portdb,
- tree="porttree")
- del pkgsettings["PORTAGE_BINPKG_TMPFILE"]
+
+ build = EbuildBinpkg(pkg=pkg, pretend=pretend,
+ settings=pkgsettings)
+ retval = build.execute()
if retval != os.EX_OK:
raise self._pkg_failure(retval)
- bintree = self.trees[myroot]["bintree"]
- bintree.inject(pkg_key, filename=binpkg_tmpfile)
-
if "--buildpkgonly" not in self.myopts:
msg = " === (%s of %s) Merging (%s::%s)" % \
(mergecount, len(mymergelist), pkg_key, y)