From 93b654199a32fc3df1299b030317720b9294b0c3 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Sat, 14 Jan 2012 07:29:08 -0800 Subject: Apply INSTALL_MASK prior to collision-protect. It may be useful to avoid collisions in some scenarios. --- pym/_emerge/MiscFunctionsProcess.py | 10 ++++++++-- pym/portage/dbapi/vartree.py | 25 +++++++++++++++++-------- pym/portage/package/ebuild/doebuild.py | 2 +- 3 files changed, 26 insertions(+), 11 deletions(-) (limited to 'pym') diff --git a/pym/_emerge/MiscFunctionsProcess.py b/pym/_emerge/MiscFunctionsProcess.py index ce0ab1432..afa44fb2a 100644 --- a/pym/_emerge/MiscFunctionsProcess.py +++ b/pym/_emerge/MiscFunctionsProcess.py @@ -29,5 +29,11 @@ class MiscFunctionsProcess(AbstractEbuildProcess): AbstractEbuildProcess._start(self) def _spawn(self, args, **kwargs): - self.settings.pop("EBUILD_PHASE", None) - return spawn(" ".join(args), self.settings, **kwargs) + # Temporarily unset EBUILD_PHASE so that bashrc code doesn't + # think this is a real phase. + phase_backup = self.settings.pop("EBUILD_PHASE", None) + try: + return spawn(" ".join(args), self.settings, **kwargs) + finally: + if phase_backup is not None: + self.settings["EBUILD_PHASE"] = phase_backup diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py index af70ec3fe..5bb4fa404 100644 --- a/pym/portage/dbapi/vartree.py +++ b/pym/portage/dbapi/vartree.py @@ -3506,14 +3506,6 @@ class dblink(object): if installed_files: return 1 - # check for package collisions - blockers = self._blockers - if blockers is None: - blockers = [] - collisions, symlink_collisions, plib_collisions = \ - self._collision_protect(srcroot, destroot, - others_in_slot + blockers, myfilelist, mylinklist) - # Make sure the ebuild environment is initialized and that ${T}/elog # exists for logging of collision-protect eerror messages. if myebuild is None: @@ -3525,6 +3517,23 @@ class dblink(object): for other in others_in_slot]) prepare_build_dirs(settings=self.settings, cleanup=cleanup) + if self.settings.get("INSTALL_MASK"): + # Apply INSTALL_MASK before collision-protect, since it may + # be useful to avoid collisions in some scenarios. + phase = MiscFunctionsProcess(background=False, + commands=["preinst_mask"], phase="preinst", + scheduler=self._scheduler, settings=self.settings) + phase.start() + phase.wait() + + # check for package collisions + blockers = self._blockers + if blockers is None: + blockers = [] + collisions, symlink_collisions, plib_collisions = \ + self._collision_protect(srcroot, destroot, + others_in_slot + blockers, myfilelist, mylinklist) + if collisions: collision_protect = "collision-protect" in self.settings.features protect_owned = "protect-owned" in self.settings.features diff --git a/pym/portage/package/ebuild/doebuild.py b/pym/portage/package/ebuild/doebuild.py index cb7cc1cb3..c52ab3120 100644 --- a/pym/portage/package/ebuild/doebuild.py +++ b/pym/portage/package/ebuild/doebuild.py @@ -1487,7 +1487,7 @@ _post_phase_cmds = { "preinst_sfperms", "preinst_selinux_labels", "preinst_suid_scan", - "preinst_mask"] + ] } def _post_phase_userpriv_perms(mysettings): -- cgit v1.2.3-1-g7c22