From c2d6742b707375e7bbc927651f9cdec3f2818210 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Sat, 31 Oct 2009 23:32:13 +0000 Subject: Add a --backtrack=COUNT option to control how many times backtracking is allowed, and reduce the default from 30 to 5. svn path=/main/trunk/; revision=14763 --- man/emerge.1 | 5 +++++ pym/_emerge/depgraph.py | 2 +- pym/_emerge/help.py | 7 +++++++ pym/_emerge/main.py | 24 ++++++++++++++++++++++++ 4 files changed, 37 insertions(+), 1 deletion(-) diff --git a/man/emerge.1 b/man/emerge.1 index 523c3197b..f8aa26d8a 100644 --- a/man/emerge.1 +++ b/man/emerge.1 @@ -276,6 +276,11 @@ acceptance of the first choice. This option is intended to be set in the \fBmake.conf\fR(5) \fBEMERGE_DEFAULT_OPTS\fR variable. .TP +.BR \-\-backtrack=COUNT +Specifies an integer number of times to backtrack if +dependency calculation fails due to a conflict or an +unsatisfied dependency (default: \'5\'). +.TP .BR "\-\-binpkg\-respect\-use < y | n >" Tells emerge to ignore binary packages if their use flags don't match the current configuration. (default: \'n\') diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py index 5c0aa4b64..7f74b309a 100644 --- a/pym/_emerge/depgraph.py +++ b/pym/_emerge/depgraph.py @@ -5329,7 +5329,7 @@ def backtrack_depgraph(settings, trees, myopts, myparams, def _backtrack_depgraph(settings, trees, myopts, myparams, myaction, myfiles, spinner): - backtrack_max = 30 + backtrack_max = myopts.get('backtrack', 5) runtime_pkg_mask = None allow_backtracking = True backtracked = 0 diff --git a/pym/_emerge/help.py b/pym/_emerge/help.py index 94dc17218..422442fb4 100644 --- a/pym/_emerge/help.py +++ b/pym/_emerge/help.py @@ -279,6 +279,13 @@ def help(myopts, havecolor=1): for line in wrap(desc, desc_width): print(desc_indent + line) print() + print(" " + green("--backtrack") + " " + turquoise("COUNT")) + desc = "Specifies an integer number of times to backtrack if " + \ + "dependency calculation fails due to a conflict or an " + \ + "unsatisfied dependency (default: '5')." + for line in wrap(desc, desc_width): + print(desc_indent + line) + print() print(" " + green("--binpkg-respect-use") + \ " < " + turquoise("y") + " | " + turquoise("n") + " >") desc = "Tells emerge to ignore binary packages if their use flags" + \ diff --git a/pym/_emerge/main.py b/pym/_emerge/main.py index 71872112e..8e69ad057 100644 --- a/pym/_emerge/main.py +++ b/pym/_emerge/main.py @@ -510,6 +510,15 @@ def parse_opts(tmpcmdline, silent=False): "help":"temporarily override ACCEPT_PROPERTIES", "action":"store" }, + + "--backtrack": { + + "help" : "Specifies how many times to backtrack if dependency " + \ + "calculation fails ", + + "action" : "store" + }, + "--config-root": { "help":"specify the location for portage configuration files", "action":"store" @@ -731,6 +740,21 @@ def parse_opts(tmpcmdline, silent=False): if myoptions.selective == "True": myoptions.selective = True + if myoptions.backtrack is not None: + + try: + backtrack = int(myoptions.backtrack) + except (OverflowError, ValueError): + backtrack = -1 + + if backtrack < 0: + backtrack = None + if not silent: + writemsg("!!! Invalid --backtrack parameter: '%s'\n" % \ + (myoptions.backtrack,), noiselevel=-1) + + myoptions.backtrack = backtrack + if myoptions.deep is not None: deep = None if myoptions.deep == "True": -- cgit v1.2.3-1-g7c22