diff options
author | Zac Medico <zmedico@gentoo.org> | 2010-07-16 11:17:08 -0700 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2010-07-16 11:17:08 -0700 |
commit | 9d088f74ab50a6609b5c433997597acda412b239 (patch) | |
tree | 91cc2734b5b2b666df5db12f4da20555b4697bd7 /pym/_emerge/EbuildBuild.py | |
parent | 375c6d94bd6b79b871856c02d0f331a9eff48d3b (diff) | |
download | portage-9d088f74ab50a6609b5c433997597acda412b239.tar.gz portage-9d088f74ab50a6609b5c433997597acda412b239.tar.bz2 portage-9d088f74ab50a6609b5c433997597acda412b239.zip |
Bug #327883 - Make EbuildBuild call the pre-clean phase prior to
EbuildFetcher, in order to avoid re-use/removal of a build log
from a previously failed build. This involves moving the pre-clean
phase from EbuildExecuter to EbuildBuild, and moving build dir
handling from EbuildFetcher to EbuildBuild.
Diffstat (limited to 'pym/_emerge/EbuildBuild.py')
-rw-r--r-- | pym/_emerge/EbuildBuild.py | 63 |
1 files changed, 37 insertions, 26 deletions
diff --git a/pym/_emerge/EbuildBuild.py b/pym/_emerge/EbuildBuild.py index d42ff6f5f..be6025a82 100644 --- a/pym/_emerge/EbuildBuild.py +++ b/pym/_emerge/EbuildBuild.py @@ -83,32 +83,54 @@ class EbuildBuild(CompositeTask): self.wait() return + self._build_dir = EbuildBuildDir(pkg=pkg, settings=settings) + self._build_dir.lock() + + # Cleaning needs to happen before fetch, since the build dir + # is used for log handling. + msg = " === (%s of %s) Cleaning (%s::%s)" % \ + (self.pkg_count.curval, self.pkg_count.maxval, + self.pkg.cpv, self._ebuild_path) + short_msg = "emerge: (%s of %s) %s Clean" % \ + (self.pkg_count.curval, self.pkg_count.maxval, self.pkg.cpv) + self.logger.log(msg, short_msg=short_msg) + + pre_clean_phase = EbuildPhase(background=self.background, + pkg=self.pkg, phase='clean', + scheduler=self.scheduler, settings=self.settings, + tree=self._tree) + self._start_task(pre_clean_phase, self._pre_clean_exit) + + def _pre_clean_exit(self, pre_clean_phase): + if self._final_exit(pre_clean_phase) != os.EX_OK: + self._unlock_builddir() + self.wait() + return + + # for log handling + portage.prepare_build_dirs(self.pkg.root, self.settings, 1) + fetcher = EbuildFetcher(config_pool=self.config_pool, - fetchall=opts.fetch_all_uri, - fetchonly=opts.fetchonly, + fetchall=self.opts.fetch_all_uri, + fetchonly=self.opts.fetchonly, background=self.background, - pkg=pkg, scheduler=self.scheduler) + logfile=self.settings.get('PORTAGE_LOG_FILE'), + pkg=self.pkg, scheduler=self.scheduler) self._start_task(fetcher, self._fetch_exit) def _fetch_exit(self, fetcher): - opts = self.opts - pkg = self.pkg - - fetch_failed = False - if opts.fetchonly: - fetch_failed = self._final_exit(fetcher) != os.EX_OK - else: - fetch_failed = self._default_exit(fetcher) != os.EX_OK - if fetch_failed and fetcher.logfile is not None and \ - os.path.exists(fetcher.logfile): - self.settings["PORTAGE_LOG_FILE"] = fetcher.logfile + portage.elog.elog_process(self.pkg.cpv, self.settings) - if fetch_failed or opts.fetchonly: + if self._default_exit(fetcher) != os.EX_OK: + self._unlock_builddir() self.wait() return + # discard successful fetch log + self._build_dir.clean_log() + pkg = self.pkg logger = self.logger opts = self.opts pkg_count = self.pkg_count @@ -118,17 +140,6 @@ class EbuildBuild(CompositeTask): ebuild_path = self._ebuild_path system_set = pkg.root_config.sets["system"] - self._build_dir = EbuildBuildDir(pkg=pkg, settings=settings) - self._build_dir.lock() - - # Cleaning is triggered before the setup - # phase, in portage.doebuild(). - msg = " === (%s of %s) Cleaning (%s::%s)" % \ - (pkg_count.curval, pkg_count.maxval, pkg.cpv, ebuild_path) - short_msg = "emerge: (%s of %s) %s Clean" % \ - (pkg_count.curval, pkg_count.maxval, pkg.cpv) - logger.log(msg, short_msg=short_msg) - #buildsyspkg: Check if we need to _force_ binary package creation self._issyspkg = "buildsyspkg" in features and \ system_set.findAtomForPackage(pkg) and \ |