1 |
From: William Throwe <wtt6@×××××××.edu> |
2 |
|
3 |
Add --onlydeps-with-rdeps=n option in order to omit pure |
4 |
run-time dependencies with --onlydeps. The dependencies |
5 |
that get pulled in are those that are necessary for the |
6 |
equivalent --buildpkgonly command to succeed. The default |
7 |
--onlydeps behavior remains unchanged. |
8 |
|
9 |
X-Gentoo-bug: 294719 |
10 |
X-Gentoo-bug-url: https://bugs.gentoo.org/show_bug.cgi?id=294719 |
11 |
--- |
12 |
man/emerge.1 | 5 +++ |
13 |
pym/_emerge/depgraph.py | 5 +++ |
14 |
pym/_emerge/main.py | 6 +++ |
15 |
.../tests/resolver/test_onlydeps_minimal.py | 47 ++++++++++++++++++++++ |
16 |
4 files changed, 63 insertions(+) |
17 |
create mode 100644 pym/portage/tests/resolver/test_onlydeps_minimal.py |
18 |
|
19 |
diff --git a/man/emerge.1 b/man/emerge.1 |
20 |
index f1a9d4f..c172c5e 100644 |
21 |
--- a/man/emerge.1 |
22 |
+++ b/man/emerge.1 |
23 |
@@ -716,6 +716,11 @@ it possible for \fB\-\-deep\fR to be disabled by default. |
24 |
Only merge (or pretend to merge) the dependencies of the packages |
25 |
specified, not the packages themselves. |
26 |
.TP |
27 |
+.BR "\-\-onlydeps\-with\-rdeps < y | n >" |
28 |
+Include run time dependencies when \fB\-\-onlydeps\fR is specified. |
29 |
+When this is disabled only build time dependencies are included. This |
30 |
+option is enabled by default. |
31 |
+.TP |
32 |
.BR "\-\-package\-moves [ y | n ]" |
33 |
Perform package moves when necessary. This option is enabled |
34 |
by default. Package moves are typically applied immediately |
35 |
diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py |
36 |
index e1119af..a76a196 100644 |
37 |
--- a/pym/_emerge/depgraph.py |
38 |
+++ b/pym/_emerge/depgraph.py |
39 |
@@ -3064,6 +3064,11 @@ class depgraph(object): |
40 |
edepend["RDEPEND"] = "" |
41 |
edepend["PDEPEND"] = "" |
42 |
|
43 |
+ if pkg.onlydeps and \ |
44 |
+ self._frozen_config.myopts.get("--onlydeps-with-rdeps") == 'n': |
45 |
+ edepend["RDEPEND"] = "" |
46 |
+ edepend["PDEPEND"] = "" |
47 |
+ |
48 |
ignore_build_time_deps = False |
49 |
if pkg.built and not removal_action: |
50 |
if self._dynamic_config.myparams.get("bdeps") in ("y", "auto"): |
51 |
diff --git a/pym/_emerge/main.py b/pym/_emerge/main.py |
52 |
index 76e963a..fda0323 100644 |
53 |
--- a/pym/_emerge/main.py |
54 |
+++ b/pym/_emerge/main.py |
55 |
@@ -147,6 +147,7 @@ def insert_optional_args(args): |
56 |
'--jobs' : valid_integers, |
57 |
'--keep-going' : y_or_n, |
58 |
'--load-average' : valid_floats, |
59 |
+ '--onlydeps-with-rdeps' : y_or_n, |
60 |
'--package-moves' : y_or_n, |
61 |
'--quiet' : y_or_n, |
62 |
'--quiet-build' : y_or_n, |
63 |
@@ -559,6 +560,11 @@ def parse_opts(tmpcmdline, silent=False): |
64 |
"action" : "append", |
65 |
}, |
66 |
|
67 |
+ "--onlydeps-with-rdeps": { |
68 |
+ "help" : "modify interpretation of depedencies", |
69 |
+ "choices" : true_y_or_n |
70 |
+ }, |
71 |
+ |
72 |
"--rebuild-exclude": { |
73 |
"help" :"A space separated list of package names or slot atoms. " + \ |
74 |
"Emerge will not rebuild these packages due to the " + \ |
75 |
diff --git a/pym/portage/tests/resolver/test_onlydeps_minimal.py b/pym/portage/tests/resolver/test_onlydeps_minimal.py |
76 |
new file mode 100644 |
77 |
index 0000000..13c79ed |
78 |
--- /dev/null |
79 |
+++ b/pym/portage/tests/resolver/test_onlydeps_minimal.py |
80 |
@@ -0,0 +1,47 @@ |
81 |
+# Copyright 2017 Gentoo Foundation |
82 |
+# Distributed under the terms of the GNU General Public License v2 |
83 |
+ |
84 |
+from portage.tests import TestCase |
85 |
+from portage.tests.resolver.ResolverPlayground import ResolverPlayground, ResolverPlaygroundTestCase |
86 |
+ |
87 |
+class OnlydepsMinimalTestCase(TestCase): |
88 |
+ |
89 |
+ def testOnlydepsMinimal(self): |
90 |
+ ebuilds = { |
91 |
+ "dev-libs/A-1": { "DEPEND": "dev-libs/B", |
92 |
+ "RDEPEND": "dev-libs/C", |
93 |
+ "PDEPEND": "dev-libs/D" }, |
94 |
+ "dev-libs/B-1": { }, |
95 |
+ "dev-libs/C-1": { }, |
96 |
+ "dev-libs/D-1": { }, |
97 |
+ } |
98 |
+ installed = { |
99 |
+ } |
100 |
+ |
101 |
+ test_cases = ( |
102 |
+ ResolverPlaygroundTestCase( |
103 |
+ ["dev-libs/A"], |
104 |
+ all_permutations = True, |
105 |
+ success = True, |
106 |
+ options = { "--onlydeps": True, |
107 |
+ "--onlydeps-with-rdeps": "y" }, |
108 |
+ mergelist = ["dev-libs/B-1", |
109 |
+ "dev-libs/C-1", |
110 |
+ "dev-libs/D-1"]), |
111 |
+ ResolverPlaygroundTestCase( |
112 |
+ ["dev-libs/A"], |
113 |
+ all_permutations = True, |
114 |
+ success = True, |
115 |
+ options = { "--onlydeps": True, |
116 |
+ "--onlydeps-with-rdeps": "n" }, |
117 |
+ mergelist = ["dev-libs/B-1"]), |
118 |
+ ) |
119 |
+ |
120 |
+ playground = ResolverPlayground(ebuilds=ebuilds, |
121 |
+ installed=installed, debug=False) |
122 |
+ try: |
123 |
+ for test_case in test_cases: |
124 |
+ playground.run_TestCase(test_case) |
125 |
+ self.assertEqual(test_case.test_success, True, test_case.fail_msg) |
126 |
+ finally: |
127 |
+ playground.cleanup() |
128 |
-- |
129 |
2.10.2 |