diff options
-rw-r--r-- | pym/portage.py | 63 |
1 files changed, 27 insertions, 36 deletions
diff --git a/pym/portage.py b/pym/portage.py index 6f57c1795..f289acc6b 100644 --- a/pym/portage.py +++ b/pym/portage.py @@ -891,6 +891,7 @@ class config: self.pprovideddict = copy.deepcopy(clone.pprovideddict) self.dirVirtuals = copy.deepcopy(clone.dirVirtuals) self.treeVirtuals = copy.deepcopy(clone.treeVirtuals) + self.features = copy.deepcopy(clone.features) else: # backupenv is for calculated incremental variables. @@ -1236,43 +1237,33 @@ class config: if clone is None: self.regenerate() self.features = portage_util.unique_array(self["FEATURES"].split()) - else: - # XXX - # The below self.regenerate() causes previous changes to FEATURES - # (and other incrementals) to be reverted. If this instance is a - # clone, we need to take the cloned FEATURES from backupenv and - # save them where the regenerate() call will not destroy them. - # Later, we use backup_changes() to restore the cloned FEATURES - # into the backupenv once again. - self.features = portage_util.unique_array( - self.backupenv["FEATURES"].split()) - self.regenerate() - #XXX: Should this be temporary? Is it possible at all to have a default? - if "gpg" in self.features: - if not os.path.exists(self["PORTAGE_GPG_DIR"]) or not os.path.isdir(self["PORTAGE_GPG_DIR"]): - writemsg("PORTAGE_GPG_DIR is invalid. Removing gpg from FEATURES.\n", - noiselevel=-1) - self.features.remove("gpg") - - if not portage_exec.sandbox_capable and \ - ("sandbox" in self.features or "usersandbox" in self.features): - if os.environ.get("PORTAGE_CALLER","") == "repoman" and \ - self.profile_path is not None and \ - os.path.realpath(self.profile_path) != \ - os.path.realpath(PROFILE_PATH): - pass # This profile does not belong to the user running repoman. - else: - writemsg(red("!!! Problem with sandbox binary. Disabling...\n\n"), - noiselevel=-1) - if "sandbox" in self.features: - self.features.remove("sandbox") - if "usersandbox" in self.features: - self.features.remove("usersandbox") - - self.features.sort() - self["FEATURES"] = " ".join(self.features) - self.backup_changes("FEATURES") + if "gpg" in self.features: + if not os.path.exists(self["PORTAGE_GPG_DIR"]) or \ + not os.path.isdir(self["PORTAGE_GPG_DIR"]): + writemsg(colorize("BAD", "PORTAGE_GPG_DIR is invalid." + \ + " Removing gpg from FEATURES.\n"), noiselevel=-1) + self.features.remove("gpg") + + if not portage_exec.sandbox_capable and \ + ("sandbox" in self.features or "usersandbox" in self.features): + if os.environ.get("PORTAGE_CALLER","") == "repoman" and \ + self.profile_path is not None and \ + os.path.realpath(self.profile_path) != \ + os.path.realpath(PROFILE_PATH): + # This profile does not belong to the user running repoman. + pass + else: + writemsg(colorize("BAD", "!!! Problem with sandbox" + \ + " binary. Disabling...\n\n"), noiselevel=-1) + if "sandbox" in self.features: + self.features.remove("sandbox") + if "usersandbox" in self.features: + self.features.remove("usersandbox") + + self.features.sort() + self["FEATURES"] = " ".join(self.features) + self.backup_changes("FEATURES") if mycpv: self.setcpv(mycpv) |