Bug #253210 - Fix logic inside EbuildBuild._buildpkg_exit() to avoid
authorZac Medico <zmedico@gentoo.org>
Wed, 31 Dec 2008 07:38:56 +0000 (07:38 -0000)
committerZac Medico <zmedico@gentoo.org>
Wed, 31 Dec 2008 07:38:56 +0000 (07:38 -0000)
triggering an AssertionError when the package phase has failed. This
bug usually isn't noticeable since the package phase usually succeeds.

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

pym/_emerge/__init__.py

index 938c4aa7df2d77753a4e05a9c5198aa00d2983ba..972caa4fcb13c72830d43bb94087ea0987574d92 100644 (file)
@@ -2677,8 +2677,12 @@ class EbuildBuild(CompositeTask):
                be released when merge() is called.
                """
 
-               if self._default_exit(packager) == os.EX_OK and \
-                       self.opts.buildpkgonly:
+               if self._default_exit(packager) != os.EX_OK:
+                       self._unlock_builddir()
+                       self.wait()
+                       return
+
+               if self.opts.buildpkgonly:
                        # Need to call "clean" phase for buildpkgonly mode
                        portage.elog.elog_process(self.pkg.cpv, self.settings)
                        phase = "clean"
@@ -2689,9 +2693,10 @@ class EbuildBuild(CompositeTask):
                        self._start_task(clean_phase, self._clean_exit)
                        return
 
-               if self._final_exit(packager) != os.EX_OK or \
-                       self.opts.buildpkgonly:
-                       self._unlock_builddir()
+               # Continue holding the builddir lock until
+               # after the package has been installed.
+               self._current_task = None
+               self.returncode = packager.returncode
                self.wait()
 
        def _clean_exit(self, clean_phase):