Inside dblink._merge(), make sure PORTAGE_BUILDDIR still exists before trying
authorZac Medico <zmedico@gentoo.org>
Mon, 7 Dec 2009 02:30:33 +0000 (02:30 -0000)
committerZac Medico <zmedico@gentoo.org>
Mon, 7 Dec 2009 02:30:33 +0000 (02:30 -0000)
to call ebuild success/die hooks, since it might have already been removed
by fail-clean (and the hooks would have already been called).

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

pym/portage/dbapi/vartree.py

index 3244fa4ee64dd9a95773914a10b42e187cfab635..a424dea0ab594f7f7a540e62fded1225c34cbf04 100644 (file)
@@ -4403,17 +4403,23 @@ class dblink(object):
                        retval = self.treewalk(mergeroot, myroot, inforoot, myebuild,
                                cleanup=cleanup, mydbapi=mydbapi, prev_mtimes=prev_mtimes)
 
-                       if retval == os.EX_OK:
-                               phase = 'success_hooks'
-                       else:
-                               phase = 'die_hooks'
+                       # If PORTAGE_BUILDDIR doesn't exist, then it probably means
+                       # fail-clean is enabled, and the success/die hooks have
+                       # already been called by _emerge.EbuildPhase (via
+                       # self._scheduler.dblinkEbuildPhase) prior to cleaning.
+                       if os.path.isdir(self.settings['PORTAGE_BUILDDIR']):
+
+                               if retval == os.EX_OK:
+                                       phase = 'success_hooks'
+                               else:
+                                       phase = 'die_hooks'
 
-                       if self._scheduler is None:
-                               portage._spawn_misc_sh(self.settings, [phase],
-                                       phase=phase)
-                       else:
-                               self._scheduler.dblinkEbuildPhase(
-                                       self, mydbapi, myebuild, phase)
+                               if self._scheduler is None:
+                                       portage._spawn_misc_sh(self.settings, [phase],
+                                               phase=phase)
+                               else:
+                                       self._scheduler.dblinkEbuildPhase(
+                                               self, mydbapi, myebuild, phase)
 
                        # Process ebuild logfiles
                        elog_process(self.mycpv, self.settings, phasefilter=filter_mergephases)