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
diff --git a/man/emerge.1 b/man/emerge.1
index 523c319..f8aa26d 100644
--- a/man/emerge.1
+++ b/man/emerge.1
@@ -276,6 +276,11 @@
 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 5c0aa4b..7f74b30 100644
--- a/pym/_emerge/depgraph.py
+++ b/pym/_emerge/depgraph.py
@@ -5329,7 +5329,7 @@
 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 94dc172..422442f 100644
--- a/pym/_emerge/help.py
+++ b/pym/_emerge/help.py
@@ -279,6 +279,13 @@
 		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 7187211..8e69ad0 100644
--- a/pym/_emerge/main.py
+++ b/pym/_emerge/main.py
@@ -510,6 +510,15 @@
 			"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 @@
 	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":