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