aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid James <davidjames@chromium.org>2011-05-03 13:51:30 -0700
committerZac Medico <zmedico@gentoo.org>2011-05-03 15:51:20 -0700
commit9a3a1c4b2d182bef0579166589475df93247a009 (patch)
tree17de028fb0ef7d6a4a8c3886eea57a0eefe0dc48
parentrebuild_config: propagate runtime deps to parents (diff)
downloadportage-9a3a1c4b2d182bef0579166589475df93247a009.tar.gz
portage-9a3a1c4b2d182bef0579166589475df93247a009.tar.bz2
portage-9a3a1c4b2d182bef0579166589475df93247a009.zip
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
-rw-r--r--man/emerge.14
-rw-r--r--pym/_emerge/depgraph.py6
-rw-r--r--pym/_emerge/help.py7
-rw-r--r--pym/_emerge/main.py14
-rw-r--r--pym/portage/tests/resolver/test_rebuild.py18
5 files changed, 48 insertions, 1 deletions
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,