Add a new FEATURES=test-fail-continue value which causes ebuild execution
authorZac Medico <zmedico@gentoo.org>
Fri, 12 Dec 2008 08:53:42 +0000 (08:53 -0000)
committerZac Medico <zmedico@gentoo.org>
Fri, 12 Dec 2008 08:53:42 +0000 (08:53 -0000)
to continue after the test phase has failed. Thanks to Diego Pettenò
<flameeyes@g.o> for the suggestion.

svn path=/main/trunk/; revision=12214

man/make.conf.5
pym/_emerge/__init__.py
pym/portage/__init__.py

index 159217f546bca379f4f8070c8b145f453dd8d4ec..2f71dac1a369d28b2857f695f884a8de6f8aed09 100644 (file)
@@ -338,6 +338,12 @@ the package compiled properly.  See \fItest\fR in \fBebuild\fR(1)
 and \fIsrc_test()\fR in \fBebuild\fR(5). This feature implies the "test"
 \fBUSE\fR flag.
 .TP
+.B test\-fail\-continue
+If "test" is enabled \fBFEATURES\fR and the test phase of an ebuild fails,
+continue to execute the remaining phases as if the failure had not occurred.
+Note that the test phase for a specific package may be disabled by masking
+the "test" \fBUSE\fR flag in \fBpackage.use.mask\fR (see \fBportage\fR(5)).
+.TP
 .B unmerge\-orphans
 If a file is not claimed by another package in the same slot and it is not
 protected by \fICONFIG_PROTECT\fR, unmerge it even if the modification time or
index eb1bd3b7a521f47bca660b8999841d893a94be08..3f16150e4aeb12370b17e2bbc8eeff9a4af8c59d 100644 (file)
@@ -2927,6 +2927,10 @@ class EbuildProcess(SpawnProcess):
                        self.returncode = portage._doebuild_exit_status_check_and_log(
                                self.settings, self.phase, self.returncode)
 
+               if self.phase == "test" and self.returncode != os.EX_OK and \
+                       "test-fail-continue" in self.settings.features:
+                       self.returncode = os.EX_OK
+
                portage._post_phase_userpriv_perms(self.settings)
 
 class EbuildPhase(CompositeTask):
index cf966195a6546c2e63b9898eacbe96e14c4b9fcc..fc42bd3af3f6cbe4fc73a6512386e132bb9e4b0e 100644 (file)
@@ -4503,6 +4503,11 @@ def spawnebuild(mydo, actionmap, mysettings, debug, alwaysdep=0,
                _check_build_log(mysettings)
                if phase_retval == os.EX_OK:
                        phase_retval = _post_src_install_checks(mysettings)
+
+       if mydo == "test" and phase_retval != os.EX_OK and \
+               "test-fail-continue" in mysettings.features:
+               phase_retval = os.EX_OK
+
        return phase_retval
 
 _post_phase_cmds = {