1 |
Author: zmedico |
2 |
Date: 2008-05-03 02:31:39 +0000 (Sat, 03 May 2008) |
3 |
New Revision: 10118 |
4 |
|
5 |
Modified: |
6 |
main/branches/2.1.2/bin/emerge |
7 |
Log: |
8 |
* Check for masked packages in the --resume merge list and bail |
9 |
out in that case (bug #199408). |
10 |
|
11 |
* In depgraph.loadResumeCommand(), create a dependency graph from |
12 |
the resume list. This ensures that the merge list has it's |
13 |
dependencies satisfied. It also enables --tree display together |
14 |
with --resume. |
15 |
|
16 |
* Fix --resume mode to check for unsatisfied blockers and bail out when |
17 |
necessary. |
18 |
|
19 |
* Add --nodeps to the parallel-fetch --resume options since recalculation of |
20 |
deps is a a waste here. |
21 |
|
22 |
* Delete the resume list(s) if there is an unsatisfied block. |
23 |
|
24 |
(trunk r10113:10117) |
25 |
|
26 |
|
27 |
Modified: main/branches/2.1.2/bin/emerge |
28 |
=================================================================== |
29 |
--- main/branches/2.1.2/bin/emerge 2008-05-03 02:24:40 UTC (rev 10117) |
30 |
+++ main/branches/2.1.2/bin/emerge 2008-05-03 02:31:39 UTC (rev 10118) |
31 |
@@ -4878,6 +4878,9 @@ |
32 |
""" |
33 |
self._sets["args"].update(resume_data.get("favorites", [])) |
34 |
mergelist = resume_data.get("mergelist", []) |
35 |
+ favorites = resume_data.get("favorites") |
36 |
+ if not isinstance(favorites, list): |
37 |
+ favorites = [] |
38 |
|
39 |
if mergelist and "--skipfirst" in self.myopts: |
40 |
for i, task in enumerate(mergelist): |
41 |
@@ -4917,11 +4920,51 @@ |
42 |
operation=action, root=myroot, |
43 |
type_name=pkg_type) |
44 |
self._pkg_cache[pkg] = pkg |
45 |
+ |
46 |
+ root_config = self.roots[pkg.root] |
47 |
+ if "merge" == pkg.operation and \ |
48 |
+ not visible(root_config.settings, pkg): |
49 |
+ self._unsatisfied_deps_for_display.append( |
50 |
+ ((pkg.root, "="+pkg.cpv), {"myparent":None})) |
51 |
+ |
52 |
fakedb[myroot].cpv_inject(pkg) |
53 |
serialized_tasks.append(pkg) |
54 |
self.spinner.update() |
55 |
- self._serialized_tasks_cache = serialized_tasks |
56 |
|
57 |
+ if self._unsatisfied_deps_for_display: |
58 |
+ return False |
59 |
+ |
60 |
+ if not serialized_tasks or "--nodeps" in self.myopts: |
61 |
+ self._serialized_tasks_cache = serialized_tasks |
62 |
+ else: |
63 |
+ favorites_set = InternalPackageSet(atom for atom in favorites \ |
64 |
+ if isinstance(atom, basestring) and portage.isvalidatom(atom)) |
65 |
+ for node in serialized_tasks: |
66 |
+ if isinstance(node, Package) and \ |
67 |
+ node.operation == "merge" and \ |
68 |
+ favorites_set.findAtomForPackage(node.cpv, node.metadata): |
69 |
+ self._set_nodes.add(node) |
70 |
+ |
71 |
+ self._select_package = self._select_pkg_from_graph |
72 |
+ for task in serialized_tasks: |
73 |
+ if isinstance(task, Package) and \ |
74 |
+ task.operation == "merge": |
75 |
+ self._add_pkg(task, None) |
76 |
+ if not self._create_graph(): |
77 |
+ return False |
78 |
+ self._serialized_tasks_cache = None |
79 |
+ try: |
80 |
+ self.altlist() |
81 |
+ except self._unknown_internal_error: |
82 |
+ return False |
83 |
+ |
84 |
+ for node in self.digraph.root_nodes(): |
85 |
+ if isinstance(node, Package) and \ |
86 |
+ node.operation == "merge": |
87 |
+ # Give hint to the --tree display. |
88 |
+ self._set_nodes.add(node) |
89 |
+ return True |
90 |
+ |
91 |
class _internal_exception(portage_exception.PortageException): |
92 |
def __init__(self, value=""): |
93 |
portage_exception.PortageException.__init__(self, value) |
94 |
@@ -5310,7 +5353,7 @@ |
95 |
|
96 |
mymergelist = mylist |
97 |
myfeat = self.settings.features[:] |
98 |
- bad_resume_opts = set(["--ask", "--tree", "--changelog", "--skipfirst", |
99 |
+ bad_resume_opts = set(["--ask", "--changelog", "--skipfirst", |
100 |
"--resume"]) |
101 |
if "parallel-fetch" in myfeat and \ |
102 |
not ("--pretend" in self.myopts or \ |
103 |
@@ -5332,7 +5375,8 @@ |
104 |
fetch_env["FEATURES"] = fetch_env.get("FEATURES", "") + " -cvs" |
105 |
fetch_env["PORTAGE_NICENESS"] = "0" |
106 |
fetch_env["PORTAGE_PARALLEL_FETCHONLY"] = "1" |
107 |
- fetch_args = [sys.argv[0], "--resume", "--fetchonly"] |
108 |
+ fetch_args = [sys.argv[0], "--resume", |
109 |
+ "--fetchonly", "--nodeps"] |
110 |
resume_opts = self.myopts.copy() |
111 |
# For automatic resume, we need to prevent |
112 |
# any of bad_resume_opts from leaking in |
113 |
@@ -7604,6 +7648,10 @@ |
114 |
mysettings.lock() |
115 |
del myroot, mysettings |
116 |
|
117 |
+ favorites = mtimedb["resume"].get("favorites") |
118 |
+ if not isinstance(favorites, list): |
119 |
+ favorites = [] |
120 |
+ |
121 |
# "myopts" is a list for backward compatibility. |
122 |
resume_opts = mtimedb["resume"].get("myopts", []) |
123 |
if isinstance(resume_opts, list): |
124 |
@@ -7616,8 +7664,9 @@ |
125 |
myparams = create_depgraph_params(myopts, myaction) |
126 |
mydepgraph = depgraph(settings, trees, |
127 |
myopts, myparams, spinner) |
128 |
+ success = False |
129 |
try: |
130 |
- mydepgraph.loadResumeCommand(mtimedb["resume"]) |
131 |
+ success = mydepgraph.loadResumeCommand(mtimedb["resume"]) |
132 |
except portage_exception.PackageNotFound: |
133 |
if show_spinner: |
134 |
print |
135 |
@@ -7627,14 +7676,36 @@ |
136 |
out.eerror(" available to be emerged. Please restart/continue") |
137 |
out.eerror(" the merge operation manually.") |
138 |
|
139 |
+ if show_spinner: |
140 |
+ print "\b\b... done!" |
141 |
+ |
142 |
+ unsatisfied_block = False |
143 |
+ if success: |
144 |
+ mymergelist = mydepgraph.altlist() |
145 |
+ if mymergelist and \ |
146 |
+ (isinstance(mymergelist[-1], Blocker) and \ |
147 |
+ not mymergelist[-1].satisfied): |
148 |
+ if not fetchonly and not pretend: |
149 |
+ unsatisfied_block = True |
150 |
+ mydepgraph.display( |
151 |
+ mydepgraph.altlist(reversed=tree), |
152 |
+ favorites=favorites) |
153 |
+ print "\n!!! Error: The above package list contains packages which cannot be installed" |
154 |
+ print "!!! at the same time on the same system." |
155 |
+ if not quiet: |
156 |
+ show_blocker_docs_link() |
157 |
+ |
158 |
+ if not success: |
159 |
+ mydepgraph.display_problems() |
160 |
+ |
161 |
+ if unsatisfied_block or not success: |
162 |
# delete the current list and also the backup |
163 |
# since it's probably stale too. |
164 |
for k in ("resume", "resume_backup"): |
165 |
mtimedb.pop(k, None) |
166 |
mtimedb.commit() |
167 |
+ |
168 |
return 1 |
169 |
- if show_spinner: |
170 |
- print "\b\b... done!" |
171 |
else: |
172 |
if ("--resume" in myopts): |
173 |
print darkgreen("emerge: It seems we have nothing to resume...") |
174 |
@@ -7670,7 +7741,9 @@ |
175 |
print colorize("INFORM", "emerge: It seems we have nothing to resume...") |
176 |
return os.EX_OK |
177 |
favorites = mtimedb["resume"]["favorites"] |
178 |
- retval = mydepgraph.display(mymergelist, favorites=favorites) |
179 |
+ retval = mydepgraph.display( |
180 |
+ mydepgraph.altlist(reversed=tree), |
181 |
+ favorites=favorites) |
182 |
if retval != os.EX_OK: |
183 |
return retval |
184 |
prompt="Would you like to resume merging these packages?" |
185 |
@@ -7726,7 +7799,9 @@ |
186 |
print colorize("INFORM", "emerge: It seems we have nothing to resume...") |
187 |
return os.EX_OK |
188 |
favorites = mtimedb["resume"]["favorites"] |
189 |
- retval = mydepgraph.display(mymergelist, favorites=favorites) |
190 |
+ retval = mydepgraph.display( |
191 |
+ mydepgraph.altlist(reversed=tree), |
192 |
+ favorites=favorites) |
193 |
if retval != os.EX_OK: |
194 |
return retval |
195 |
else: |
196 |
@@ -8249,11 +8324,6 @@ |
197 |
import portage_debug |
198 |
portage_debug.set_trace(True) |
199 |
|
200 |
- if ("--resume" in myopts): |
201 |
- if "--tree" in myopts: |
202 |
- print "* --tree is currently broken with --resume. Disabling..." |
203 |
- del myopts["--tree"] |
204 |
- |
205 |
if not ("--quiet" in myopts): |
206 |
if not sys.stdout.isatty() or ("--nospinner" in myopts): |
207 |
spinner.update = spinner.update_basic |
208 |
|
209 |
-- |
210 |
gentoo-commits@l.g.o mailing list |