From fb0caf19c365cf89523e2725599781b05698a59f Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Thu, 9 Jul 2009 07:35:22 +0000 Subject: Allow --deep to take an optional integer parameter, to specify how deep it should go. Also make --update so it no longer implies the equivalent of --deep=1. To get the old --update behavior, use --update --deep=1. svn path=/main/trunk/; revision=13812 --- pym/_emerge/create_depgraph_params.py | 2 +- pym/_emerge/depgraph.py | 20 ++++++++++--------- pym/_emerge/help.py | 6 +++--- pym/_emerge/main.py | 36 +++++++++++++++++++++++++++++++++-- 4 files changed, 49 insertions(+), 15 deletions(-) (limited to 'pym') diff --git a/pym/_emerge/create_depgraph_params.py b/pym/_emerge/create_depgraph_params.py index 77deb042d..9381fb955 100644 --- a/pym/_emerge/create_depgraph_params.py +++ b/pym/_emerge/create_depgraph_params.py @@ -31,7 +31,7 @@ def create_depgraph_params(myopts, myaction): if "--nodeps" in myopts: myparams.pop("recurse", None) if "--deep" in myopts: - myparams["deep"] = True + myparams["deep"] = myopts["--deep"] if "--complete-graph" in myopts: myparams["complete"] = True return myparams diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py index cb31b76c8..910f1fafe 100644 --- a/pym/_emerge/depgraph.py +++ b/pym/_emerge/depgraph.py @@ -611,8 +611,8 @@ class depgraph(object): buildpkgonly = "--buildpkgonly" in self._frozen_config.myopts nodeps = "--nodeps" in self._frozen_config.myopts empty = "empty" in self._dynamic_config.myparams - deep = "deep" in self._dynamic_config.myparams - update = "--update" in self._frozen_config.myopts and dep.depth <= 1 + deep = self._dynamic_config.myparams.get("deep", 0) + recurse = empty or deep is True or dep.depth <= deep if dep.blocker: if not buildpkgonly and \ not nodeps and \ @@ -648,7 +648,7 @@ class depgraph(object): # available for optimization of merge order. if dep.priority.satisfied and \ not dep_pkg.installed and \ - not (existing_node or empty or deep or update): + not (existing_node or recurse): myarg = None if dep.root == self._frozen_config.target_root: try: @@ -857,18 +857,20 @@ class depgraph(object): emerge --deep ; we need to recursively check dependencies of pkgspec If we are in --nodeps (no recursion) mode, we obviously only check 1 level of dependencies. """ + if arg_atoms: + depth = 0 + pkg.depth = depth + deep = self._dynamic_config.myparams.get("deep", 0) + empty = "empty" in self._dynamic_config.myparams + recurse = empty or deep is True or depth + 1 <= deep dep_stack = self._dynamic_config._dep_stack if "recurse" not in self._dynamic_config.myparams: return 1 - elif pkg.installed and \ - "deep" not in self._dynamic_config.myparams: + elif pkg.installed and not recurse: dep_stack = self._dynamic_config._ignored_deps self._frozen_config.spinner.update() - if arg_atoms: - depth = 0 - pkg.depth = depth if not previously_added: dep_stack.append(pkg) return 1 @@ -2296,7 +2298,7 @@ class depgraph(object): # accounted for. self._select_atoms = self._select_atoms_from_graph self._select_package = self._select_pkg_from_graph - already_deep = "deep" in self._dynamic_config.myparams + already_deep = self._dynamic_config.myparams.get("deep") is True if not already_deep: self._dynamic_config.myparams["deep"] = True diff --git a/pym/_emerge/help.py b/pym/_emerge/help.py index 583b57aa7..393886698 100644 --- a/pym/_emerge/help.py +++ b/pym/_emerge/help.py @@ -220,8 +220,7 @@ def help(myopts, havecolor=1): print " "+green("--update")+" ("+green("-u")+" short option)" print " Updates packages to the best version available, which may not" print " always be the highest version number due to masking for testing" - print " and development. This will also update direct dependencies which" - print " may not be what you want. Package atoms specified on the command" + print " and development. Package atoms specified on the command" print " line are greedy, meaning that unspecific atoms may match multiple" print " installed versions of slotted packages." print @@ -314,7 +313,8 @@ def help(myopts, havecolor=1): print " --debug is great for finding bash syntax errors as providing" print " very verbose information about the dependency and build process." print - print " "+green("--deep")+" ("+green("-D")+" short option)" + print " "+green("--deep") + " " + turquoise("[DEPTH]") + \ + " (" + green("-D") + " short option)" print " This flag forces emerge to consider the entire dependency tree of" print " packages, instead of checking only the immediate dependencies of" print " the packages. As an example, this catches updates in libraries" diff --git a/pym/_emerge/main.py b/pym/_emerge/main.py index abbaf2301..dae28fa66 100644 --- a/pym/_emerge/main.py +++ b/pym/_emerge/main.py @@ -49,7 +49,7 @@ options=[ "--buildpkg", "--buildpkgonly", "--changelog", "--columns", "--complete-graph", -"--debug", "--deep", +"--debug", "--digest", "--emptytree", "--fetchonly", "--fetch-all-uri", @@ -75,7 +75,7 @@ shortmapping={ "a":"--ask", "b":"--buildpkg", "B":"--buildpkgonly", "c":"--clean", "C":"--unmerge", -"d":"--debug", "D":"--deep", +"d":"--debug", "e":"--emptytree", "f":"--fetchonly", "F":"--fetch-all-uri", "g":"--getbinpkg", "G":"--getbinpkgonly", @@ -383,6 +383,7 @@ def insert_optional_args(args): new_args = [] default_arg_opts = { + '--deep' : valid_integers, '--deselect' : ('n',), '--binpkg-respect-use' : ('n', 'y',), '--jobs' : valid_integers, @@ -390,6 +391,7 @@ def insert_optional_args(args): } short_arg_opts = { + 'D' : valid_integers, 'j' : valid_integers, } @@ -488,6 +490,18 @@ def parse_opts(tmpcmdline, silent=False): "choices":("y", "n") }, + "--deep": { + + "shortopt" : "-D", + + "help" : "Specifies how deep to recurse into dependencies " + \ + "of packages given as arguments. If no argument is given, " + \ + "depth is unlimited. Default behavior is to skip " + \ + "dependencies of installed packages.", + + "action" : "store" + }, + "--deselect": { "help" : "remove atoms from the world file", "type" : "choice", @@ -584,6 +598,24 @@ def parse_opts(tmpcmdline, silent=False): if myoptions.root_deps == "True": myoptions.root_deps = True + if myoptions.deep is not None: + deep = None + if myoptions.deep == "True": + deep = True + else: + try: + deep = int(myoptions.deep) + except (OverflowError, ValueError): + deep = -1 + + if deep is not True and deep < 0: + deep = None + if not silent: + writemsg("!!! Invalid --deep parameter: '%s'\n" % \ + (myoptions.deep,), noiselevel=-1) + + myoptions.deep = deep + if myoptions.jobs: jobs = None if myoptions.jobs == "True": -- cgit v1.2.3-1-g7c22