aboutsummaryrefslogtreecommitdiff
path: root/pym
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2012-09-13 15:47:13 -0700
committerZac Medico <zmedico@gentoo.org>2012-09-13 15:47:13 -0700
commit6b19f71b39b6af43307abf20654511bace041217 (patch)
tree27db4710e44a71f89b875714cc2ab556282b7c03 /pym
parentrepoman: test package.use.stable.mask (diff)
downloadportage-6b19f71b39b6af43307abf20654511bace041217.tar.gz
portage-6b19f71b39b6af43307abf20654511bace041217.tar.bz2
portage-6b19f71b39b6af43307abf20654511bace041217.zip
Bind FEATURES=-test to USE=-test for bug #373209.
Also, make options like emerge --newuse ignore the state of USE=test, since users typically don't want to trigger a bunch of rebuilds when they enable or disable FEATURES=test.
Diffstat (limited to 'pym')
-rw-r--r--pym/_emerge/depgraph.py7
-rw-r--r--pym/_emerge/resolver/output_helpers.py8
-rw-r--r--pym/portage/package/ebuild/config.py7
-rw-r--r--pym/portage/tests/resolver/ResolverPlayground.py2
-rw-r--r--pym/portage/tests/resolver/test_features_test_use.py68
5 files changed, 86 insertions, 6 deletions
diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py
index e388065fc..ac70d4315 100644
--- a/pym/_emerge/depgraph.py
+++ b/pym/_emerge/depgraph.py
@@ -29,6 +29,7 @@ from portage.exception import (InvalidAtom, InvalidDependString,
from portage.output import colorize, create_color_func, \
darkgreen, green
bad = create_color_func("BAD")
+from portage.package.ebuild.config import _feature_flags
from portage.package.ebuild.getmaskingstatus import \
_getmaskingstatus, _MaskReason
from portage._sets import SETPREFIX
@@ -1234,12 +1235,14 @@ class depgraph(object):
cur_iuse).difference(forced_flags))
flags.update(orig_iuse.intersection(orig_use).symmetric_difference(
cur_iuse.intersection(cur_use)))
+ flags.difference_update(_feature_flags)
if flags:
return flags
elif changed_use or binpkg_respect_use:
- flags = orig_iuse.intersection(orig_use).symmetric_difference(
- cur_iuse.intersection(cur_use))
+ flags = set(orig_iuse.intersection(orig_use).symmetric_difference(
+ cur_iuse.intersection(cur_use)))
+ flags.difference_update(_feature_flags)
if flags:
return flags
return None
diff --git a/pym/_emerge/resolver/output_helpers.py b/pym/_emerge/resolver/output_helpers.py
index e751dd8e4..dc622bd9d 100644
--- a/pym/_emerge/resolver/output_helpers.py
+++ b/pym/_emerge/resolver/output_helpers.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2011 Gentoo Foundation
+# Copyright 2010-2012 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
"""Contains private support functions for the Display class
@@ -17,6 +17,7 @@ from portage._sets.base import InternalPackageSet
from portage.output import (blue, bold, colorize, create_color_func,
green, red, teal, yellow)
bad = create_color_func("BAD")
+from portage.package.ebuild.config import _feature_flags
from portage.util import shlex_split, writemsg
from portage.versions import catpkgsplit
@@ -245,7 +246,6 @@ def _format_size(mysize):
mystr=mystr[:mycount]+","+mystr[mycount:]
return mystr+" kB"
-
def _create_use_string(conf, name, cur_iuse, iuse_forced, cur_use,
old_iuse, old_use,
is_new, reinst_flags):
@@ -299,7 +299,9 @@ def _create_use_string(conf, name, cur_iuse, iuse_forced, cur_use,
elif flag in old_use:
flag_str = green("-" + flag) + "*"
if flag_str:
- if flag in iuse_forced:
+ if flag in _feature_flags:
+ flag_str = "{" + flag_str + "}"
+ elif flag in iuse_forced:
flag_str = "(" + flag_str + ")"
if isEnabled:
enabled.append(flag_str)
diff --git a/pym/portage/package/ebuild/config.py b/pym/portage/package/ebuild/config.py
index 6ca1cb5b8..bb0a7c1c4 100644
--- a/pym/portage/package/ebuild/config.py
+++ b/pym/portage/package/ebuild/config.py
@@ -60,6 +60,8 @@ from portage.package.ebuild._config.helper import ordered_by_atom_specificity, p
if sys.hexversion >= 0x3000000:
basestring = str
+_feature_flags = frozenset(["test"])
+
def autouse(myvartree, use_cache=1, mysettings=None):
warnings.warn("portage.autouse() is deprecated",
DeprecationWarning, stacklevel=2)
@@ -1479,6 +1481,11 @@ class config(object):
if ebuild_force_test and "test" in self.usemask:
self.usemask = \
frozenset(x for x in self.usemask if x != "test")
+ elif "test" in explicit_iuse or iuse_implicit_match("test"):
+ if "test" in self.usemask or "test" not in self.features:
+ use.discard("test")
+ elif "test" in self.features:
+ use.add("test")
# Allow _* flags from USE_EXPAND wildcards to pass through here.
use.difference_update([x for x in use \
diff --git a/pym/portage/tests/resolver/ResolverPlayground.py b/pym/portage/tests/resolver/ResolverPlayground.py
index 324ef9dd7..3bda6070d 100644
--- a/pym/portage/tests/resolver/ResolverPlayground.py
+++ b/pym/portage/tests/resolver/ResolverPlayground.py
@@ -34,7 +34,7 @@ class ResolverPlayground(object):
its work.
"""
- config_files = frozenset(("eapi", "package.accept_keywords", "package.use",
+ config_files = frozenset(("eapi", "make.conf", "package.accept_keywords", "package.use",
"package.use.stable.mask", "package.mask", "package.keywords",
"package.unmask", "package.properties", "package.license", "use.mask", "use.force",
"layout.conf",))
diff --git a/pym/portage/tests/resolver/test_features_test_use.py b/pym/portage/tests/resolver/test_features_test_use.py
new file mode 100644
index 000000000..bdd179d7a
--- /dev/null
+++ b/pym/portage/tests/resolver/test_features_test_use.py
@@ -0,0 +1,68 @@
+# Copyright 2012 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+from portage.tests import TestCase
+from portage.tests.resolver.ResolverPlayground import (ResolverPlayground,
+ ResolverPlaygroundTestCase)
+
+class FeaturesTestUse(TestCase):
+
+ def testFeaturesTestUse(self):
+ ebuilds = {
+ "dev-libs/A-1" : {
+ "IUSE": "test"
+ },
+ "dev-libs/B-1" : {
+ "IUSE": "test foo"
+ },
+ }
+
+ installed = {
+ "dev-libs/A-1" : {
+ "USE": "",
+ "IUSE": "test"
+ },
+ "dev-libs/B-1" : {
+ "USE": "foo",
+ "IUSE": "test foo"
+ },
+ }
+
+ user_config = {
+ "make.conf" : ("FEATURES=test", "USE=\"-test -foo\"")
+ }
+
+ test_cases = (
+
+ # USE=test state should not trigger --newuse rebuilds, as
+ # specified in bug #373209, comment #3.
+ ResolverPlaygroundTestCase(
+ ["dev-libs/A"],
+ options = {"--newuse": True, "--selective": True},
+ success = True,
+ mergelist = []),
+
+ # USE=-test -> USE=test, with USE=test forced by FEATURES=test
+ ResolverPlaygroundTestCase(
+ ["dev-libs/A"],
+ options = {},
+ success = True,
+ mergelist = ["dev-libs/A-1"]),
+
+ # USE=foo -> USE=-foo, with USE=test forced by FEATURES=test
+ ResolverPlaygroundTestCase(
+ ["dev-libs/B"],
+ options = {"--newuse": True, "--selective": True},
+ success = True,
+ mergelist = ["dev-libs/B-1"]),
+ )
+
+ playground = ResolverPlayground(ebuilds=ebuilds,
+ installed=installed, user_config=user_config, debug=False)
+ try:
+ for test_case in test_cases:
+ playground.run_TestCase(test_case)
+ self.assertEqual(test_case.test_success, True, test_case.fail_msg)
+ finally:
+ playground.cleanup()
+