1 |
Author: zmedico |
2 |
Date: 2008-05-02 17:56:21 +0000 (Fri, 02 May 2008) |
3 |
New Revision: 10093 |
4 |
|
5 |
Modified: |
6 |
main/branches/2.1.2/bin/emerge |
7 |
Log: |
8 |
Clean up merge list handling: |
9 |
* In depgraph.loadResumeCommand(), populate _serialized_tasks_cache so that |
10 |
it can be returned from depgraph.altlist(). |
11 |
* Handle --skipfirst instide depgraph.loadResumeCommand(), and fix it to skip |
12 |
the first "merge" task and never skip "uninstall" tasks. |
13 |
* Always get the merge list from depgraph.altlist() instead of using |
14 |
the mtimedb directly. The list returned from depgraph.altlist() |
15 |
contains Package instances with cached metadata. |
16 |
* Remove obsolete code from depgraph.display() and MergeTask.merge() since |
17 |
the merge list always comes from depgraph.altlist() now, and never directly |
18 |
from the mtimedb. |
19 |
(trunk r10092) |
20 |
|
21 |
|
22 |
Modified: main/branches/2.1.2/bin/emerge |
23 |
=================================================================== |
24 |
--- main/branches/2.1.2/bin/emerge 2008-05-02 17:47:48 UTC (rev 10092) |
25 |
+++ main/branches/2.1.2/bin/emerge 2008-05-02 17:56:21 UTC (rev 10093) |
26 |
@@ -3919,12 +3919,14 @@ |
27 |
node = tempgraph.order[0] |
28 |
else: |
29 |
node = nodes[0] |
30 |
- display_order.append(list(node)) |
31 |
+ display_order.append(node) |
32 |
tempgraph.remove(node) |
33 |
display_order.reverse() |
34 |
self.myopts.pop("--quiet", None) |
35 |
self.myopts.pop("--verbose", None) |
36 |
self.myopts["--tree"] = True |
37 |
+ print |
38 |
+ print |
39 |
self.display(display_order) |
40 |
print "!!! Error: circular dependencies:" |
41 |
print |
42 |
@@ -4267,18 +4269,7 @@ |
43 |
pkg_status = "nomerge" |
44 |
built = pkg_type != "ebuild" |
45 |
installed = pkg_type == "installed" |
46 |
- try: |
47 |
- pkg = self._pkg_cache[tuple(x)] |
48 |
- except KeyError: |
49 |
- if pkg_status != "uninstall": |
50 |
- raise |
51 |
- # A package scheduled for uninstall apparently |
52 |
- # isn't installed anymore. Since it's already |
53 |
- # been uninstalled, move on to the next task. |
54 |
- # This case should only be reachable in --resume |
55 |
- # mode, since otherwise the package would have |
56 |
- # been cached. |
57 |
- continue |
58 |
+ pkg = x |
59 |
metadata = pkg.metadata |
60 |
ebuild_path = None |
61 |
repo_name = metadata["repository"] |
62 |
@@ -4914,8 +4905,17 @@ |
63 |
""" |
64 |
self._sets["args"].update(resume_data.get("favorites", [])) |
65 |
mergelist = resume_data.get("mergelist", []) |
66 |
+ |
67 |
+ if mergelist and "--skipfirst" in self.myopts: |
68 |
+ for i, task in enumerate(mergelist): |
69 |
+ if isinstance(task, list) and \ |
70 |
+ task and task[-1] == "merge": |
71 |
+ del mergelist[i] |
72 |
+ break |
73 |
+ |
74 |
fakedb = self.mydbapi |
75 |
trees = self.trees |
76 |
+ serialized_tasks = [] |
77 |
for x in mergelist: |
78 |
if len(x) != 4: |
79 |
continue |
80 |
@@ -4945,7 +4945,9 @@ |
81 |
type_name=pkg_type) |
82 |
self._pkg_cache[pkg] = pkg |
83 |
fakedb[myroot].cpv_inject(pkg) |
84 |
+ serialized_tasks.append(pkg) |
85 |
self.spinner.update() |
86 |
+ self._serialized_tasks_cache = serialized_tasks |
87 |
|
88 |
class _internal_exception(portage_exception.PortageException): |
89 |
def __init__(self, value=""): |
90 |
@@ -5288,7 +5290,6 @@ |
91 |
fetchonly = "--fetchonly" in self.myopts or \ |
92 |
"--fetch-all-uri" in self.myopts |
93 |
pretend = "--pretend" in self.myopts |
94 |
- mymergelist=[] |
95 |
ldpath_mtimes = mtimedb["ldpath"] |
96 |
xterm_titles = "notitles" not in self.settings.features |
97 |
|
98 |
@@ -5296,12 +5297,6 @@ |
99 |
# We're resuming. |
100 |
print colorize("GOOD", "*** Resuming merge...") |
101 |
emergelog(xterm_titles, " *** Resuming merge...") |
102 |
- mylist = mtimedb["resume"]["mergelist"][:] |
103 |
- if "--skipfirst" in self.myopts and mylist: |
104 |
- del mtimedb["resume"]["mergelist"][0] |
105 |
- del mylist[0] |
106 |
- mtimedb.commit() |
107 |
- mymergelist = mylist |
108 |
|
109 |
# Verify all the manifests now so that the user is notified of failure |
110 |
# as soon as possible. |
111 |
@@ -5335,12 +5330,12 @@ |
112 |
system_set = root_config.sets["system"] |
113 |
args_set = InternalPackageSet(favorites) |
114 |
world_set = root_config.sets["world"] |
115 |
- if "--resume" not in self.myopts: |
116 |
- mymergelist = mylist |
117 |
- mtimedb["resume"]["mergelist"] = [list(x) for x in mymergelist \ |
118 |
- if isinstance(x, Package)] |
119 |
- mtimedb.commit() |
120 |
|
121 |
+ mtimedb["resume"]["mergelist"] = [list(x) for x in mylist \ |
122 |
+ if isinstance(x, Package)] |
123 |
+ mtimedb.commit() |
124 |
+ |
125 |
+ mymergelist = mylist |
126 |
myfeat = self.settings.features[:] |
127 |
bad_resume_opts = set(["--ask", "--tree", "--changelog", "--skipfirst", |
128 |
"--resume"]) |
129 |
@@ -5407,15 +5402,10 @@ |
130 |
vardb = vartree.dbapi |
131 |
root_config = self.trees[myroot]["root_config"] |
132 |
pkgsettings = self.pkgsettings[myroot] |
133 |
- metadata = {} |
134 |
if pkg_type == "blocks": |
135 |
pass |
136 |
elif pkg_type == "ebuild": |
137 |
mydbapi = portdb |
138 |
- metadata.update(izip(metadata_keys, |
139 |
- mydbapi.aux_get(pkg_key, metadata_keys))) |
140 |
- pkgsettings.setcpv(pkg_key, mydb=mydbapi) |
141 |
- metadata["USE"] = pkgsettings["PORTAGE_USE"] |
142 |
else: |
143 |
if pkg_type == "binary": |
144 |
mydbapi = bindb |
145 |
@@ -5423,22 +5413,10 @@ |
146 |
mydbapi = vardb |
147 |
else: |
148 |
raise AssertionError("Package type: '%s'" % pkg_type) |
149 |
- try: |
150 |
- metadata.update(izip(metadata_keys, |
151 |
- mydbapi.aux_get(pkg_key, metadata_keys))) |
152 |
- except KeyError: |
153 |
- if not installed: |
154 |
- raise |
155 |
- # A package scheduled for uninstall apparently |
156 |
- # isn't installed anymore. Since it's already |
157 |
- # been uninstalled, move on to the next task. |
158 |
- continue |
159 |
if not installed: |
160 |
mergecount += 1 |
161 |
- pkg = Package(cpv=pkg_key, built=built, |
162 |
- installed=installed, metadata=metadata, |
163 |
- operation=operation, root=myroot, |
164 |
- type_name=pkg_type) |
165 |
+ pkg = x |
166 |
+ metadata = pkg.metadata |
167 |
if pkg.installed: |
168 |
if not (buildpkgonly or fetchonly or pretend): |
169 |
self._uninstall_queue.append(pkg) |
170 |
@@ -7714,9 +7692,7 @@ |
171 |
"--verbose" in myopts) and \ |
172 |
not ("--quiet" in myopts and "--ask" not in myopts): |
173 |
if "--resume" in myopts: |
174 |
- mymergelist = mtimedb["resume"]["mergelist"] |
175 |
- if "--skipfirst" in myopts: |
176 |
- mymergelist = mymergelist[1:] |
177 |
+ mymergelist = mydepgraph.altlist() |
178 |
if len(mymergelist) == 0: |
179 |
print colorize("INFORM", "emerge: It seems we have nothing to resume...") |
180 |
return os.EX_OK |
181 |
@@ -7772,9 +7748,7 @@ |
182 |
|
183 |
if ("--pretend" in myopts) and not ("--fetchonly" in myopts or "--fetch-all-uri" in myopts): |
184 |
if ("--resume" in myopts): |
185 |
- mymergelist = mtimedb["resume"]["mergelist"] |
186 |
- if "--skipfirst" in myopts: |
187 |
- mymergelist = mymergelist[1:] |
188 |
+ mymergelist = mydepgraph.altlist() |
189 |
if len(mymergelist) == 0: |
190 |
print colorize("INFORM", "emerge: It seems we have nothing to resume...") |
191 |
return os.EX_OK |
192 |
@@ -7816,9 +7790,9 @@ |
193 |
it to write the mtimedb""" |
194 |
mtimedb.filename = None |
195 |
time.sleep(3) # allow the parent to have first fetch |
196 |
+ mymergelist = mydepgraph.altlist() |
197 |
del mydepgraph |
198 |
- retval = mergetask.merge( |
199 |
- mtimedb["resume"]["mergelist"], favorites, mtimedb) |
200 |
+ retval = mergetask.merge(mymergelist, favorites, mtimedb) |
201 |
merge_count = mergetask.curval |
202 |
else: |
203 |
if "resume" in mtimedb and \ |
204 |
|
205 |
-- |
206 |
gentoo-commits@l.g.o mailing list |