From 9a3a1c4b2d182bef0579166589475df93247a009 Mon Sep 17 00:00:00 2001 From: David James Date: Tue, 3 May 2011 13:51:30 -0700 Subject: Add --rebuild-ignore flag. A space separated list of package names or slot atoms. Emerge will not rebuild packages that depend on matching packages due to \fB\-\-rebuild\fR. Change-Id: Ia58fe632ed06c97a22413da0341d7f8da2d65ba8 Review URL: http://gerrit.chromium.org/gerrit/209 --- man/emerge.1 | 4 ++++ pym/_emerge/depgraph.py | 6 +++++- pym/_emerge/help.py | 7 +++++++ pym/_emerge/main.py | 14 ++++++++++++++ pym/portage/tests/resolver/test_rebuild.py | 18 ++++++++++++++++++ 5 files changed, 48 insertions(+), 1 deletion(-) diff --git a/man/emerge.1 b/man/emerge.1 index f7b604327..2e27e48e3 100644 --- a/man/emerge.1 +++ b/man/emerge.1 @@ -493,6 +493,10 @@ matching binary packages. A space separated list of package names or slot atoms. Emerge will not rebuild matching packages due to \fB\-\-rebuild\fR. .TP +.BR "\-\-rebuild\-ignore " ATOMS +A space separated list of package names or slot atoms. Emerge will not rebuild +packages that depend on matching packages due to \fB\-\-rebuild\fR. +.TP .BR "\-\-oneshot " (\fB\-1\fR) Emerge as normal, but do not add the packages to the world file for later updating. diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py index 0de443b3d..b0b4b070a 100644 --- a/pym/_emerge/depgraph.py +++ b/pym/_emerge/depgraph.py @@ -130,6 +130,8 @@ class _frozen_depgraph_config(object): self.useoldpkg_atoms = _wildcard_set(atoms) atoms = ' '.join(myopts.get("--rebuild-exclude", [])).split() self.rebuild_exclude = _wildcard_set(atoms) + atoms = ' '.join(myopts.get("--rebuild-ignore", [])).split() + self.rebuild_ignore = _wildcard_set(atoms) self.rebuild = "--rebuild" in myopts @@ -156,10 +158,12 @@ class _rebuild_config(object): parent = dep.collapsed_parent priority = dep.collapsed_priority rebuild_exclude = self._frozen_config.rebuild_exclude + rebuild_ignore = self._frozen_config.rebuild_ignore if (self._frozen_config.rebuild and isinstance(parent, Package) and parent.built and (priority.buildtime or priority.runtime) and isinstance(dep_pkg, Package) and - not rebuild_exclude.findAtomForPackage(parent)): + not rebuild_exclude.findAtomForPackage(parent) and + not rebuild_ignore.findAtomForPackage(dep_pkg)): self._graph.add(dep_pkg, parent, priority) def _trigger_rebuild(self, parent, build_deps, runtime_deps): diff --git a/pym/_emerge/help.py b/pym/_emerge/help.py index 85026ac82..35008c4ba 100644 --- a/pym/_emerge/help.py +++ b/pym/_emerge/help.py @@ -571,6 +571,13 @@ def help(myopts, havecolor=1): for line in wrap(desc, desc_width): print(desc_indent + line) print() + print(" " + green("--rebuild-ignore") + " " + turquoise("ATOMS")) + desc = "A space separated list of package names or slot atoms." + \ + " Emerge will not rebuild packages that depend on matching " + \ + " packages due to --rebuild." + for line in wrap(desc, desc_width): + print(desc_indent + line) + print() print(" "+green("--oneshot")+" ("+green("-1")+" short option)") print(" Emerge as normal, but don't add packages to the world profile.") print(" This package will only be updated if it is depended upon by") diff --git a/pym/_emerge/main.py b/pym/_emerge/main.py index 552ea2082..1e06ec157 100644 --- a/pym/_emerge/main.py +++ b/pym/_emerge/main.py @@ -750,6 +750,14 @@ def parse_opts(tmpcmdline, silent=False): "action" : "append", }, + "--rebuild-ignore": { + "help" :"A space separated list of package names or slot atoms. " + \ + "Emerge will not rebuild packages that depend on matching " + \ + "packages due to the --rebuild flag. ", + + "action" : "append", + }, + "--package-moves": { "help" : "perform package moves when necessary", "type" : "choice", @@ -932,6 +940,12 @@ def parse_opts(tmpcmdline, silent=False): parser.error("Invalid Atom(s) in --rebuild-exclude parameter: '%s' (only package names and slot atoms (with wildcards) allowed)\n" % \ (",".join(bad_atoms),)) + if myoptions.rebuild_ignore: + bad_atoms = _find_bad_atoms(myoptions.rebuild_ignore) + if bad_atoms and not silent: + parser.error("Invalid Atom(s) in --rebuild-ignore parameter: '%s' (only package names and slot atoms (with wildcards) allowed)\n" % \ + (",".join(bad_atoms),)) + if myoptions.usepkg_exclude: bad_atoms = _find_bad_atoms(myoptions.usepkg_exclude) if bad_atoms and not silent: diff --git a/pym/portage/tests/resolver/test_rebuild.py b/pym/portage/tests/resolver/test_rebuild.py index fda289c6e..da2888c1e 100644 --- a/pym/portage/tests/resolver/test_rebuild.py +++ b/pym/portage/tests/resolver/test_rebuild.py @@ -61,6 +61,24 @@ class RebuildTestCase(TestCase): 'sys-apps/e-2', 'sys-apps/g-2'], ignore_mergelist_order = True, success = True), + + ResolverPlaygroundTestCase( + ["sys-libs/x"], + options = {"--rebuild" : True, + "--rebuild-ignore" : ["sys-libs/x"]}, + mergelist = ['sys-libs/x-2'], + ignore_mergelist_order = True, + success = True), + + ResolverPlaygroundTestCase( + ["sys-libs/x"], + options = {"--rebuild" : True, + "--rebuild-ignore" : ["sys-apps/b"]}, + mergelist = ['sys-libs/x-2', 'sys-apps/a-2', 'sys-apps/b-2', + 'sys-apps/e-2'], + ignore_mergelist_order = True, + success = True), + ) playground = ResolverPlayground(ebuilds=ebuilds, -- cgit v1.2.3-1-g7c22