diff --git a/matter/matter/builder.py b/matter/matter/builder.py index 2d58d62ec..b51184348 100644 --- a/matter/matter/builder.py +++ b/matter/matter/builder.py @@ -366,6 +366,16 @@ class PackageBuilder(object): print_warning("but 'dependencies: no' in config, aborting") return None + # protect against unwanted package unmerges + if self._params['unmerge'] == "no": + unmerges = [x for x in real_queue if x.operation == "uninstall"] + if unmerges: + deps = "\n ".join([x.cpv for x in unmerges]) + print_warning("found package unmerges:") + print_warning(deps) + print_warning("but 'unmerge: no' in config, aborting") + return None + # inspect use flags changes allow_new_useflags = self._params['new-useflags'] == "yes" allow_removed_useflags = \ diff --git a/matter/matter/spec.py b/matter/matter/spec.py index 69176cbab..6da733e45 100644 --- a/matter/matter/spec.py +++ b/matter/matter/spec.py @@ -192,6 +192,13 @@ class MatterSpec(GenericSpecFunctions): 'desc': "Allow soft-blockers in the merge queue?\n " "Packages will be unmerged if yes. (yes/no)", }, + 'unmerge': { + 'cb': self.valid_yes_no, + 've': self.ve_string_stripper, + 'default': "yes", + 'desc': "Allow package unmerges due to Portage\n " + "soft-blockers resolution. (yes/no)", + }, 'pkgpre': { 'cb': self.not_none, 've': self.ve_string_open_file_read, diff --git a/matter/matter_examples/entropy.particle b/matter/matter_examples/entropy.particle index 84e2d660a..61a2f8872 100644 --- a/matter/matter_examples/entropy.particle +++ b/matter/matter_examples/entropy.particle @@ -51,6 +51,11 @@ not-installed: no # Default is: yes soft-blocker: yes +# Allow package unmerges in the merge queue? Packages will be unmerged if yes. +# Valid values are either "yes" or "no" +# Default is: yes +unmerge: yes + # Allow dependencies to be pulled in? # Valid values are either "yes" or "no" # Default is: no diff --git a/matter/matter_examples/fail.particle b/matter/matter_examples/fail.particle index 4df4529ab..0b0f8c970 100644 --- a/matter/matter_examples/fail.particle +++ b/matter/matter_examples/fail.particle @@ -32,6 +32,11 @@ not-installed: yes # Default is: yes soft-blocker: yes +# Allow package unmerges in the merge queue? Packages will be unmerged if yes. +# Valid values are either "yes" or "no" +# Default is: yes +unmerge: yes + # Allow dependencies to be pulled in? # Valid values are either "yes" or "no" # Default is: no diff --git a/matter/matter_examples/misc.particle b/matter/matter_examples/misc.particle index c7dfe0738..f3ae01f8b 100644 --- a/matter/matter_examples/misc.particle +++ b/matter/matter_examples/misc.particle @@ -39,6 +39,11 @@ not-installed: no # Default is: yes soft-blocker: yes +# Allow package unmerges in the merge queue? Packages will be unmerged if yes. +# Valid values are either "yes" or "no" +# Default is: yes +unmerge: yes + # Allow dependencies to be pulled in? # Valid values are either "yes" or "no" # Default is: no diff --git a/matter/matter_examples/zlib.particle b/matter/matter_examples/zlib.particle index 362209fbc..fa88538fc 100644 --- a/matter/matter_examples/zlib.particle +++ b/matter/matter_examples/zlib.particle @@ -39,6 +39,11 @@ not-installed: no # Default is: yes soft-blocker: yes +# Allow package unmerges in the merge queue? Packages will be unmerged if yes. +# Valid values are either "yes" or "no" +# Default is: yes +unmerge: yes + # Allow dependencies to be pulled in? # Valid values are either "yes" or "no" # Default is: no