Add a --backtrack=COUNT option to control how many times backtracking is
authorZac Medico <zmedico@gentoo.org>
Sat, 31 Oct 2009 23:32:13 +0000 (23:32 -0000)
committerZac Medico <zmedico@gentoo.org>
Sat, 31 Oct 2009 23:32:13 +0000 (23:32 -0000)
allowed, and reduce the default from 30 to 5.

svn path=/main/trunk/; revision=14763

man/emerge.1
pym/_emerge/depgraph.py
pym/_emerge/help.py
pym/_emerge/main.py

index 523c3197bed6894dddbaef58306db1402b465c31..f8aa26d8a48298f66f9d5df143c34d42e3973555 100644 (file)
@@ -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\')
index 5c0aa4b6445fc5695bb7bf0f4eec8154fc057826..7f74b309a090c7b425f0527b46dc3fc29370d369 100644 (file)
@@ -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
index 94dc17218bb48a31fd445c832ed91f3f6a3a123a..422442fb470e5430ce3ef6561ab051a8d8e3aa4a 100644 (file)
@@ -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" + \
index 71872112ed1fa27446eb9973f1b59a4fbaec4589..8e69ad057863e5697e46b712cc1076842004fcb8 100644 (file)
@@ -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":