From 50172a2a51cc04ec257b77359c4bb600e7b1462c Mon Sep 17 00:00:00 2001 From: William Throwe Date: Sat, 11 Mar 2017 20:41:59 -0500 Subject: [PATCH 1/1] Add --onlydeps=minimal emerge option --- man/emerge.1 | 5 ++- pym/_emerge/depgraph.py | 8 +++- pym/_emerge/main.py | 13 ++++++- .../tests/resolver/test_onlydeps_minimal.py | 45 ++++++++++++++++++++++ 4 files changed, 66 insertions(+), 5 deletions(-) create mode 100644 pym/portage/tests/resolver/test_onlydeps_minimal.py diff --git a/man/emerge.1 b/man/emerge.1 index 7db4271..ff43514 100644 --- a/man/emerge.1 +++ b/man/emerge.1 @@ -712,9 +712,10 @@ allowed to be broken when satisfying dependencies of other packages. Broken dependencies of this sort will invalidate assumptions that make it possible for \fB\-\-deep\fR to be disabled by default. .TP -.BR "\-\-onlydeps " (\fB\-o\fR) +.BR "\-\-onlydeps[=minimal] " (\fB\-o\fR) Only merge (or pretend to merge) the dependencies of the packages -specified, not the packages themselves. +specified, not the packages themselves. If the \fBminimal\fR argument +is given then do not merge run time dependencies. .TP .BR "\-\-package\-moves [ y | n ]" Perform package moves when necessary. This option is enabled diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py index 1379b05..eb06234 100644 --- a/pym/_emerge/depgraph.py +++ b/pym/_emerge/depgraph.py @@ -3000,6 +3000,10 @@ class depgraph(object): edepend["RDEPEND"] = "" edepend["PDEPEND"] = "" + if pkg.onlydeps == "minimal": + edepend["RDEPEND"] = "" + edepend["PDEPEND"] = "" + ignore_build_time_deps = False if pkg.built and not removal_action: if self._dynamic_config.myparams.get("bdeps") in ("y", "auto"): @@ -3637,7 +3641,7 @@ class depgraph(object): bindb = self._frozen_config.trees[eroot]["bintree"].dbapi pkgsettings = self._frozen_config.pkgsettings[eroot] args = [] - onlydeps = "--onlydeps" in self._frozen_config.myopts + onlydeps = self._frozen_config.myopts.get("--onlydeps") lookup_owners = [] for x in myfiles: ext = os.path.splitext(x)[1] @@ -3987,7 +3991,7 @@ class depgraph(object): call self._creategraph to process theier deps and return a favorite list.""" debug = "--debug" in self._frozen_config.myopts - onlydeps = "--onlydeps" in self._frozen_config.myopts + onlydeps = self._frozen_config.myopts.get("--onlydeps") myroot = self._frozen_config.target_root pkgsettings = self._frozen_config.pkgsettings[myroot] pprovideddict = pkgsettings.pprovideddict diff --git a/pym/_emerge/main.py b/pym/_emerge/main.py index 76e963a..e957ee0 100644 --- a/pym/_emerge/main.py +++ b/pym/_emerge/main.py @@ -42,7 +42,7 @@ options=[ "--newuse", "--nodeps", "--noreplace", "--nospinner", "--oneshot", -"--onlydeps", "--pretend", +"--pretend", "--quiet-repo-display", "--quiet-unmerge-warn", "--resume", @@ -147,6 +147,7 @@ def insert_optional_args(args): '--jobs' : valid_integers, '--keep-going' : y_or_n, '--load-average' : valid_floats, + '--onlydeps' : ('minimal',), '--package-moves' : y_or_n, '--quiet' : y_or_n, '--quiet-build' : y_or_n, @@ -559,6 +560,11 @@ def parse_opts(tmpcmdline, silent=False): "action" : "append", }, + "--onlydeps": { + "help" : "modify interpretation of depedencies", + "choices" :("True", "minimal") + }, + "--rebuild-exclude": { "help" :"A space separated list of package names or slot atoms. " + \ "Emerge will not rebuild these packages due to the " + \ @@ -890,6 +896,11 @@ def parse_opts(tmpcmdline, silent=False): else: myoptions.keep_going = None + if myoptions.onlydeps in true_y: + myoptions.onlydeps = True + elif myoptions.onlydeps is False: + myoptions.onlydeps = None + if myoptions.package_moves in true_y: myoptions.package_moves = True diff --git a/pym/portage/tests/resolver/test_onlydeps_minimal.py b/pym/portage/tests/resolver/test_onlydeps_minimal.py new file mode 100644 index 0000000..a7df030 --- /dev/null +++ b/pym/portage/tests/resolver/test_onlydeps_minimal.py @@ -0,0 +1,45 @@ +# 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 OnlydepsMinimalTestCase(TestCase): + + def testOnlydepsMinimal(self): + ebuilds = { + "dev-libs/A-1": { "DEPEND": "dev-libs/B", + "RDEPEND": "dev-libs/C", + "PDEPEND": "dev-libs/D" }, + "dev-libs/B-1": { }, + "dev-libs/C-1": { }, + "dev-libs/D-1": { }, + } + installed = { + } + + test_cases = ( + ResolverPlaygroundTestCase( + ["dev-libs/A"], + all_permutations = True, + success = True, + options = { "--onlydeps": True }, + mergelist = ["dev-libs/B-1", + "dev-libs/C-1", + "dev-libs/D-1"]), + ResolverPlaygroundTestCase( + ["dev-libs/A"], + all_permutations = True, + success = True, + options = { "--onlydeps": "minimal" }, + mergelist = ["dev-libs/B-1"]), + ) + + playground = ResolverPlayground(ebuilds=ebuilds, + installed=installed, 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.cleanup() -- 2.10.2