From: Zac Medico Date: Mon, 29 Aug 2011 00:04:47 +0000 (-0700) Subject: spawnebuild: skip previously executed phases X-Git-Tag: v2.2.0_alpha52~44 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=5bc6b9c8767c9a9bea511d7ece98f54e8a873b47;p=portage.git spawnebuild: skip previously executed phases 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. --- diff --git a/pym/portage/package/ebuild/doebuild.py b/pym/portage/package/ebuild/doebuild.py index a95a418b2..0e80917fe 100644 --- a/pym/portage/package/ebuild/doebuild.py +++ b/pym/portage/package/ebuild/doebuild.py @@ -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)