Gentoo Archives: gentoo-portage-dev

From: Zac Medico <zmedico@g.o>
To: gentoo-portage-dev@l.g.o
Cc: Zac Medico <zmedico@g.o>
Subject: [gentoo-portage-dev] [PATCH v2] calc_depclean: adjust early warning messages
Date: Tue, 20 Oct 2015 20:20:03
Message-Id: 1445372377-26317-1-git-send-email-zmedico@gentoo.org
In Reply to: [gentoo-portage-dev] [PATCH] calc_depclean: adjust early warning messages by Zac Medico
1 Suppress "no system list" warning if @profile is non-empty, in order to
2 support @profile as an alternative to @system. Always warn if the world
3 file is empty, but drop the "Proceeding is likely to break your
4 installation" message and 10 second countdown. Abort if a
5 PackageSetNotFound error is encountered, or if @world is completely empty.
6 Fix depclean tests to have non-empty @world set.
7 ---
8 [PATCH v2] makes the "no world file" message always be shown when the
9 world file is empty, drops the 10 second countdown, and fixes the depclean
10 tests.
11
12 pym/_emerge/actions.py | 50 ++++++++++++++++++-----------
13 pym/portage/tests/resolver/test_depclean.py | 10 ++++--
14 2 files changed, 40 insertions(+), 20 deletions(-)
15
16 diff --git a/pym/_emerge/actions.py b/pym/_emerge/actions.py
17 index 01aef51..a872a96 100644
18 --- a/pym/_emerge/actions.py
19 +++ b/pym/_emerge/actions.py
20 @@ -699,35 +699,49 @@ def calc_depclean(settings, trees, ldpath_mtimes,
21 protected_set = InternalPackageSet()
22 protected_set_name = '____depclean_protected_set____'
23 required_sets[protected_set_name] = protected_set
24 - system_set = psets["system"]
25
26 + set_error = False
27 set_atoms = {}
28 for k in ("profile", "system", "selected"):
29 try:
30 set_atoms[k] = root_config.setconfig.getSetAtoms(k)
31 - except portage.exception.PackageSetNotFound:
32 + except portage.exception.PackageSetNotFound as e:
33 # A nested set could not be resolved, so ignore nested sets.
34 set_atoms[k] = root_config.sets[k].getAtoms()
35 + writemsg_level(_("!!! The set '%s' "
36 + "contains a non-existent set named '%s'.\n") %
37 + (k, e), level=logging.ERROR, noiselevel=-1)
38 + set_error = True
39 +
40 + # Support @profile as an alternative to @system.
41 + if not (set_atoms["system"] or set_atoms["profile"]):
42 + writemsg_level(_("!!! You have no system list.\n"),
43 + level=logging.WARNING, noiselevel=-1)
44
45 - if (not set_atoms["system"] or
46 - not (set_atoms["selected"] or set_atoms["profile"])):
47 + if not set_atoms["selected"]:
48 + writemsg_level(_("!!! You have no world file.\n"),
49 + level=logging.WARNING, noiselevel=-1)
50
51 - if not set_atoms["system"]:
52 - writemsg_level("!!! You have no system list.\n",
53 + # Suppress world file warnings unless @world is completely empty,
54 + # since having an empty world file can be a valid state.
55 + try:
56 + world_atoms = bool(root_config.setconfig.getSetAtoms('world'))
57 + except portage.exception.PackageSetNotFound as e:
58 + writemsg_level(_("!!! The set '%s' "
59 + "contains a non-existent set named '%s'.\n") %
60 + ("world", e), level=logging.ERROR, noiselevel=-1)
61 + set_error = True
62 + else:
63 + if not world_atoms:
64 + writemsg_level(_("!!! Your @world set is empty.\n"),
65 level=logging.ERROR, noiselevel=-1)
66 + set_error = True
67
68 - # Skip this warning if @profile is non-empty, in order to
69 - # support using @profile as an alternative to @selected
70 - # for building a stage 4.
71 - if not (set_atoms["selected"] or set_atoms["profile"]):
72 - writemsg_level("!!! You have no world file.\n",
73 - level=logging.WARNING, noiselevel=-1)
74 -
75 - writemsg_level("!!! Proceeding is likely to " + \
76 - "break your installation.\n",
77 - level=logging.WARNING, noiselevel=-1)
78 - if "--pretend" not in myopts:
79 - countdown(int(settings["EMERGE_WARNING_DELAY"]), ">>> Depclean")
80 + if set_error:
81 + writemsg_level(_("!!! Aborting due to set configuration "
82 + "errors displayed above.\n"),
83 + level=logging.ERROR, noiselevel=-1)
84 + return 1, [], False, 0
85
86 if action == "depclean":
87 emergelog(xterm_titles, " >>> depclean")
88 diff --git a/pym/portage/tests/resolver/test_depclean.py b/pym/portage/tests/resolver/test_depclean.py
89 index 42350be..f3c4c63 100644
90 --- a/pym/portage/tests/resolver/test_depclean.py
91 +++ b/pym/portage/tests/resolver/test_depclean.py
92 @@ -165,6 +165,9 @@ class DepcleanWithExcludeTestCase(TestCase):
93 "dev-libs/B-1": { "RDEPEND": "dev-libs/A" },
94 }
95
96 + # depclean asserts non-empty @world set
97 + world = ["non-empty/world-set"]
98 +
99 test_cases = (
100 #Without --exclude.
101 ResolverPlaygroundTestCase(
102 @@ -196,7 +199,7 @@ class DepcleanWithExcludeTestCase(TestCase):
103 cleanlist=[]),
104 )
105
106 - playground = ResolverPlayground(installed=installed)
107 + playground = ResolverPlayground(installed=installed, world=world)
108 try:
109 for test_case in test_cases:
110 playground.run_TestCase(test_case)
111 @@ -253,6 +256,9 @@ class DepcleanAndWildcardsTestCase(TestCase):
112 "dev-libs/B-1": {},
113 }
114
115 + # depclean asserts non-empty @world set
116 + world = ["non-empty/world-set"]
117 +
118 test_cases = (
119 ResolverPlaygroundTestCase(
120 ["*/*"],
121 @@ -276,7 +282,7 @@ class DepcleanAndWildcardsTestCase(TestCase):
122 cleanlist=[]),
123 )
124
125 - playground = ResolverPlayground(installed=installed)
126 + playground = ResolverPlayground(installed=installed, world=world)
127 try:
128 for test_case in test_cases:
129 playground.run_TestCase(test_case)
130 --
131 2.4.9

Replies