summaryrefslogtreecommitdiffstats
path: root/pym/_emerge
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2009-10-07 23:30:04 +0000
committerZac Medico <zmedico@gentoo.org>2009-10-07 23:30:04 +0000
commitd557bea6d2c3bc311d03f5a4887092957586a16d (patch)
tree82529f35aa18d1d5b4256f70fd0b453bf2517a91 /pym/_emerge
parent753da5d98709eb5705254bfe208918d683abc262 (diff)
downloadportage-d557bea6d2c3bc311d03f5a4887092957586a16d.tar.gz
portage-d557bea6d2c3bc311d03f5a4887092957586a16d.tar.bz2
portage-d557bea6d2c3bc311d03f5a4887092957586a16d.zip
Bug #287950 - Add support for FEATURES=fail-clean which is useful for cleaning
up temp files on tmpfs after build failures with --keep-going. svn path=/main/trunk/; revision=14517
Diffstat (limited to 'pym/_emerge')
-rw-r--r--pym/_emerge/EbuildPhase.py25
1 files changed, 25 insertions, 0 deletions
diff --git a/pym/_emerge/EbuildPhase.py b/pym/_emerge/EbuildPhase.py
index 51f018cb1..fcf60d39c 100644
--- a/pym/_emerge/EbuildPhase.py
+++ b/pym/_emerge/EbuildPhase.py
@@ -45,6 +45,11 @@ class EbuildPhase(CompositeTask):
log_file.close()
if self._default_exit(ebuild_process) != os.EX_OK:
+ if self.phase != 'clean' and \
+ 'noclean' not in self.settings.features and \
+ 'fail-clean' in self.settings.features:
+ self._fail_clean()
+ return
self.wait()
return
@@ -80,7 +85,27 @@ class EbuildPhase(CompositeTask):
if self._final_exit(post_phase) != os.EX_OK:
writemsg("!!! post %s failed; exiting.\n" % self.phase,
noiselevel=-1)
+ if self.phase != 'clean' and \
+ 'noclean' not in self.settings.features and \
+ 'fail-clean' in self.settings.features:
+ self._fail_clean()
+ return
self._current_task = None
self.wait()
return
+ def _fail_clean(self):
+ self.returncode = None
+ portage.elog.elog_process(self.pkg.cpv, self.settings)
+ phase = "clean"
+ clean_phase = EbuildPhase(background=self.background,
+ pkg=self.pkg, phase=phase,
+ scheduler=self.scheduler, settings=self.settings,
+ tree=self.tree)
+ self._start_task(clean_phase, self._fail_clean_exit)
+ return
+
+ def _fail_clean_exit(self, clean_phase):
+ self._final_exit(clean_phase)
+ self.returncode = 1
+ self.wait()