public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] proj/portage:master commit in: pym/portage/tests/resolver/, pym/_emerge/, man/
@ 2015-01-18 18:56 Zac Medico
  0 siblings, 0 replies; 2+ messages in thread
From: Zac Medico @ 2015-01-18 18:56 UTC (permalink / raw
  To: gentoo-commits

commit:     1891388ea0ae0dd58903a71a3adc779731523601
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sat Jan 17 22:56:47 2015 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sun Jan 18 18:54:24 2015 +0000
URL:        http://sources.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=1891388e

emerge: default --backtrack=3 (bug #536926)

The previous default emerge --backtrack=10 setting could lead to lots
of wasted cpu time in cases where it will ultimately fail to find a
valid solution anyway. Therefore, reduce the default to --backtrack=3.

In order for the BacktrackingTestCase.testBacktrackNoWrongRebuilds to
succeed, the test now needs to specify --backtrack=6. This is a rather
obscure case though, so it does not seem worthwhile to increase the
default because of it.

X-Gentoo-Bug: 536926
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=536926
Acked-by: Brian Dolbec <dolsen <AT> gentoo.org>

---
 man/emerge.1                                    | 2 +-
 pym/_emerge/depgraph.py                         | 2 +-
 pym/portage/tests/resolver/test_backtracking.py | 9 +++++++--
 3 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/man/emerge.1 b/man/emerge.1
index aea7cae..fd9140f 100644
--- a/man/emerge.1
+++ b/man/emerge.1
@@ -384,7 +384,7 @@ precedence over existing changes. This option is automatically enabled with
 .BR \-\-backtrack=COUNT
 Specifies an integer number of times to backtrack if
 dependency calculation fails due to a conflict or an
-unsatisfied dependency (default: \'10\').
+unsatisfied dependency (default: \'3\').
 .TP
 .BR "\-\-binpkg\-changed\-deps [ y | n ]"
 Tells emerge to ignore binary packages for which the corresponding

diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py
index 3e9bfdd..1184dd6 100644
--- a/pym/_emerge/depgraph.py
+++ b/pym/_emerge/depgraph.py
@@ -8950,7 +8950,7 @@ def _backtrack_depgraph(settings, trees, myopts, myparams, myaction, myfiles, sp
 
 	debug = "--debug" in myopts
 	mydepgraph = None
-	max_retries = myopts.get('--backtrack', 10)
+	max_retries = myopts.get('--backtrack', 3)
 	max_depth = max(1, (max_retries + 1) // 2)
 	allow_backtracking = max_retries > 0
 	backtracker = Backtracker(max_depth)

diff --git a/pym/portage/tests/resolver/test_backtracking.py b/pym/portage/tests/resolver/test_backtracking.py
index 3b69eda..6567153 100644
--- a/pym/portage/tests/resolver/test_backtracking.py
+++ b/pym/portage/tests/resolver/test_backtracking.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2014 Gentoo Foundation
+# Copyright 2010-2015 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 from portage.tests import TestCase
@@ -154,7 +154,12 @@ class BacktrackingTestCase(TestCase):
 
 		world = ["dev-libs/B", "dev-libs/C"]
 
-		options = {'--update' : True, '--deep' : True, '--selective' : True}
+		options = {
+			'--backtrack': 6,
+			'--deep' : True,
+			'--selective' : True,
+			'--update' : True,
+		}
 
 		test_cases = (
 				ResolverPlaygroundTestCase(


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* [gentoo-commits] proj/portage:master commit in: pym/portage/tests/resolver/, pym/_emerge/, man/
@ 2017-08-12 23:53 Zac Medico
  0 siblings, 0 replies; 2+ messages in thread
From: Zac Medico @ 2017-08-12 23:53 UTC (permalink / raw
  To: gentoo-commits

commit:     46fac6698e5c73fda964819b508f1fe9dd341393
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sat Aug 12 17:16:46 2017 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sat Aug 12 23:48:14 2017 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=46fac669

emerge: add --autounmask-keep-keywords option (bug 622480)

The option prevents --autounmask from making changes to
package.accept_keywords. This option does not imply
--autounmask-keep-masks, so --autounmask is still allowed
to create package.unmask changes unless the
--autounmask-keep-masks is also specified.

X-Gentoo-bug: 622480
X-Gentoo-bug-url: https://bugs.gentoo.org/622480
Reviewed-by: Manuel Rüger <mrueg <AT> gentoo.org>

 man/emerge.1                                       |  7 +++
 pym/_emerge/depgraph.py                            | 12 ++--
 pym/_emerge/main.py                                |  9 +++
 .../resolver/test_autounmask_keep_keywords.py      | 72 ++++++++++++++++++++++
 4 files changed, 96 insertions(+), 4 deletions(-)

diff --git a/man/emerge.1 b/man/emerge.1
index ffb453efb..12a0db166 100644
--- a/man/emerge.1
+++ b/man/emerge.1
@@ -395,6 +395,13 @@ using the \'=\' operator will be written. With this
 option, \'>=\' operators will be used whenever possible.
 USE and license changes always use the latter behavior.
 .TP
+.BR "\-\-autounmask\-keep\-keywords [ y | n ]"
+If \-\-autounmask is enabled, no package.accept_keywords changes will
+be created. This leads to unsatisfied dependencies if any keyword
+changes are required. This option does not imply \-\-autounmask\-keep\-masks,
+so \-\-autounmask is still allowed to create package.unmask changes unless
+the \-\-autounmask\-keep\-masks is also specified.
+.TP
 .BR "\-\-autounmask\-keep\-masks [ y | n ]"
 If \-\-autounmask is enabled, no package.unmask or ** keyword changes
 will be created. This leads to unsatisfied dependencies if

diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py
index abe2cb1bd..b4fc5f297 100644
--- a/pym/_emerge/depgraph.py
+++ b/pym/_emerge/depgraph.py
@@ -5707,6 +5707,7 @@ class depgraph(object):
 		if self._dynamic_config._autounmask is not True:
 			return
 
+		autounmask_keep_keywords = self._frozen_config.myopts.get("--autounmask-keep-keywords", "n") != "n"
 		autounmask_keep_masks = self._frozen_config.myopts.get("--autounmask-keep-masks", "n") != "n"
 		autounmask_level = self._AutounmaskLevel()
 
@@ -5716,14 +5717,16 @@ class depgraph(object):
 		autounmask_level.allow_license_changes = True
 		yield autounmask_level
 
-		autounmask_level.allow_unstable_keywords = True
-		yield autounmask_level
-
-		if not autounmask_keep_masks:
+		if not autounmask_keep_keywords:
+			autounmask_level.allow_unstable_keywords = True
+			yield autounmask_level
 
+		if not (autounmask_keep_keywords or autounmask_keep_masks):
+			autounmask_level.allow_unstable_keywords = True
 			autounmask_level.allow_missing_keywords = True
 			yield autounmask_level
 
+		if not autounmask_keep_masks:
 			# 4. USE + license + masks
 			# Try to respect keywords while discarding
 			# package.mask (see bug #463394).
@@ -5732,6 +5735,7 @@ class depgraph(object):
 			autounmask_level.allow_unmasks = True
 			yield autounmask_level
 
+		if not (autounmask_keep_keywords or autounmask_keep_masks):
 			autounmask_level.allow_unstable_keywords = True
 
 			for missing_keyword, unmask in ((False, True), (True, True)):

diff --git a/pym/_emerge/main.py b/pym/_emerge/main.py
index 2132aa63c..d3a415b91 100644
--- a/pym/_emerge/main.py
+++ b/pym/_emerge/main.py
@@ -129,6 +129,7 @@ def insert_optional_args(args):
 		'--autounmask'           : y_or_n,
 		'--autounmask-continue'  : y_or_n,
 		'--autounmask-only'      : y_or_n,
+		'--autounmask-keep-keywords' : y_or_n,
 		'--autounmask-keep-masks': y_or_n,
 		'--autounmask-unrestricted-atoms' : y_or_n,
 		'--autounmask-write'     : y_or_n,
@@ -348,6 +349,11 @@ def parse_opts(tmpcmdline, silent=False):
 			"choices" : true_y_or_n
 		},
 
+		"--autounmask-keep-keywords": {
+			"help"    : "don't add package.accept_keywords entries",
+			"choices" : true_y_or_n
+		},
+
 		"--autounmask-keep-masks": {
 			"help"    : "don't add package.unmask entries",
 			"choices" : true_y_or_n
@@ -797,6 +803,9 @@ def parse_opts(tmpcmdline, silent=False):
 	if myoptions.autounmask_unrestricted_atoms in true_y:
 		myoptions.autounmask_unrestricted_atoms = True
 
+	if myoptions.autounmask_keep_keywords in true_y:
+		myoptions.autounmask_keep_keywords = True
+
 	if myoptions.autounmask_keep_masks in true_y:
 		myoptions.autounmask_keep_masks = True
 

diff --git a/pym/portage/tests/resolver/test_autounmask_keep_keywords.py b/pym/portage/tests/resolver/test_autounmask_keep_keywords.py
new file mode 100644
index 000000000..79a4837a5
--- /dev/null
+++ b/pym/portage/tests/resolver/test_autounmask_keep_keywords.py
@@ -0,0 +1,72 @@
+# Copyright 2017 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 AutounmaskKeepKeywordsTestCase(TestCase):
+
+	def testAutounmaskKeepKeywordsTestCase(self):
+		ebuilds = {
+			'app-misc/A-2': {
+				'EAPI': '6',
+				'RDEPEND': 'app-misc/B',
+			},
+			'app-misc/A-1': {
+				'EAPI': '6',
+				'RDEPEND': 'app-misc/C[foo]',
+			},
+			'app-misc/B-1': {
+				'EAPI': '6',
+				'KEYWORDS': '~x86',
+			},
+			'app-misc/C-1': {
+				'EAPI': '6',
+				'IUSE': 'foo',
+			},
+		}
+		installed = {
+		}
+
+		test_cases = (
+			ResolverPlaygroundTestCase(
+				['app-misc/A'],
+				success = False,
+				options = {
+					'--autounmask-keep-keywords': 'n',
+				},
+				mergelist = [
+				    'app-misc/B-1',
+				    'app-misc/A-2',
+				],
+				unstable_keywords={'app-misc/B-1'},
+			),
+			# --autounmask-keep-keywords prefers app-misc/A-1 because
+			# it can be installed without accepting unstable
+			# keywords
+			ResolverPlaygroundTestCase(
+				['app-misc/A'],
+				success = False,
+				options = {
+					'--autounmask-keep-keywords': 'y',
+				},
+				mergelist = [
+				    'app-misc/C-1',
+				    'app-misc/A-1',
+				],
+				use_changes = {'app-misc/C-1': {'foo': True}},
+			),
+		)
+
+		playground = ResolverPlayground(ebuilds=ebuilds, 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.debug = False
+			playground.cleanup()


^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2017-08-12 23:53 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-01-18 18:56 [gentoo-commits] proj/portage:master commit in: pym/portage/tests/resolver/, pym/_emerge/, man/ Zac Medico
  -- strict thread matches above, loose matches on Subject: below --
2017-08-12 23:53 Zac Medico

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox