From: Zac Medico Date: Thu, 18 Oct 2007 02:41:45 +0000 (-0000) Subject: Fix collision-protect so that it properly cancels the X-Git-Tag: v2.1.3.16~15 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=2043a5aeb47281c7474aa768f93889987ff18784;p=portage.git Fix collision-protect so that it properly cancels the preinst phase like it used to. (trunk r8168) svn path=/main/branches/2.1.2/; revision=8169 --- diff --git a/pym/portage.py b/pym/portage.py index bbe2afdd1..9aac8f5d2 100644 --- a/pym/portage.py +++ b/pym/portage.py @@ -8001,30 +8001,13 @@ class dblink: if stopmerge: collisions.append(f) - if True: - """ The merge process may move files out of the image directory, - which causes invalidation of the .installed flag.""" - try: - os.unlink(os.path.join( - os.path.dirname(normalize_path(srcroot)), ".installed")) - except OSError, e: - if e.errno != errno.ENOENT: - raise - del e - - self.dbdir = self.dbtmpdir - self.delete() - if not os.path.exists(self.dbtmpdir): - os.makedirs(self.dbtmpdir) - - writemsg_stdout(">>> Merging %s %s %s\n" % (self.mycpv,"to",destroot)) - - # run preinst script + # Make sure the ebuild environment is initialized and that ${T}/elog + # exists for logging of collision-protect eerror messages. if myebuild is None: myebuild = os.path.join(inforoot, self.pkg + ".ebuild") - a = doebuild(myebuild, "preinst", destroot, self.settings, cleanup=cleanup, - use_cache=0, tree=self.treetype, mydbapi=mydbapi, - vartree=self.vartree) + doebuild_environment(myebuild, "preinst", destroot, + self.settings, 0, 0, mydbapi) + prepare_build_dirs(destroot, self.settings, cleanup) def eerror(lines): cmd = "source '%s/isolated-functions.sh' ; " % PORTAGE_BIN_PATH @@ -8107,6 +8090,27 @@ class dblink: " packages claim the file(s)."]) return 1 + writemsg_stdout(">>> Merging %s to %s\n" % (self.mycpv, destroot)) + + # The merge process may move files out of the image directory, + # which causes invalidation of the .installed flag. + try: + os.unlink(os.path.join( + os.path.dirname(normalize_path(srcroot)), ".installed")) + except OSError, e: + if e.errno != errno.ENOENT: + raise + del e + + self.dbdir = self.dbtmpdir + self.delete() + portage_util.ensure_dirs(self.dbtmpdir) + + # run preinst script + a = doebuild(myebuild, "preinst", destroot, self.settings, + use_cache=0, tree=self.treetype, mydbapi=mydbapi, + vartree=self.vartree) + # XXX: Decide how to handle failures here. if a != os.EX_OK: writemsg("!!! FAILED preinst: "+str(a)+"\n", noiselevel=-1)