spawnebuild: skip previously executed phases
authorZac Medico <zmedico@gentoo.org>
Mon, 29 Aug 2011 00:04:47 +0000 (17:04 -0700)
committerZac Medico <zmedico@gentoo.org>
Mon, 29 Aug 2011 00:04:47 +0000 (17:04 -0700)
This simply checks of $PORTAGE_BUILDDIR/.${EBUILD_PHASE%e}ed and skips
the phase like ebuild.sh would. It preserves a special case for the
install phase with FEATURES=noauto, so that dyn_install in ebuild.sh
continues to work the same for this case.. Also, note that commit
ae9b6cb513c7b29376caecf3b4e52aac452e2b93 preserves the automatic
"recreating WORKDIR" behavior that used to be implemented in
dyn_unpack.

pym/portage/package/ebuild/doebuild.py

index a95a418b2236e43beb87048c56da25dadf1ae53a..0e80917fec8cf97658bb6622839261c1647268f3 100644 (file)
@@ -1358,6 +1358,17 @@ def spawnebuild(mydo, actionmap, mysettings, debug, alwaysdep=0,
        if mydo == "pretend" and not eapi_has_pkg_pretend(eapi):
                return os.EX_OK
 
+       if not (mydo == "install" and "noauto" in mysettings.features):
+               check_file = os.path.join(
+                       mysettings["PORTAGE_BUILDDIR"], ".%sed" % mydo.rstrip('e'))
+               if os.path.exists(check_file):
+                       writemsg_stdout(">>> It appears that "
+                               "'%s' has already executed for '%s'; skipping.\n" %
+                               (mydo, mysettings["PF"]))
+                       writemsg_stdout(">>> Remove '%s' to force %s.\n" %
+                               (check_file, mydo))
+                       return os.EX_OK
+
        return _spawn_phase(mydo, mysettings,
                actionmap=actionmap, logfile=logfile,
                fd_pipes=fd_pipes, returnpid=returnpid)