[matter] improve ACCEPT_KEYWORDS setup basing on the "stable" parameter

This tweak makes possible to directly skip depgraph generation if
the root node (the dependency to check, last node of the toposorted
queue) is already up-to-date (wrt to stable: yes, for example).

This is what Portage does internally (using backupenv) and may break
in future releases without notice. So, keep the settings["ACCEPT_KEYWORDS"]
setup as a guard, to ensure the safety property.
This commit is contained in:
Fabio Erculiani
2013-11-10 19:42:44 +01:00
parent 939367dec8
commit 000056afaa

View File

@@ -609,11 +609,26 @@ class PackageBuilder(object):
else:
keywords = "%s ~%s" % (arch, arch)
settings.unlock()
backupenv = settings.configdict["backupenv"]
if keywords is not None:
settings.unlock()
# do not backup.
# this is just FYI, if the below method fails
# this acts as a guard.
settings["ACCEPT_KEYWORDS"] = keywords
settings.lock()
# this makes the trick, but might break in future
# Portage versions. However, that's what Portage uses
# internally.
backupenv["ACCEPT_KEYWORDS"] = keywords
else:
# reset keywords to the environment default, if any
env_keywords = os.getenv("ACCEPT_KEYWORDS")
if env_keywords:
backupenv["ACCEPT_KEYWORDS"] = env_keywords
else:
backupenv.pop("ACCEPT_KEYWORDS", None)
settings.lock()
@classmethod
def _setup_build_args(cls, spec):
@@ -657,7 +672,6 @@ class PackageBuilder(object):
# reset settings to original state, variables will be reconfigured
# while others may remain saved due to backup_changes().
# This is needed for _setup_keywords() to function properly.
emerge_settings.unlock()
emerge_settings.reset()
emerge_settings.lock()