1 |
Author: zmedico |
2 |
Date: 2008-07-03 11:17:43 +0000 (Thu, 03 Jul 2008) |
3 |
New Revision: 10911 |
4 |
|
5 |
Modified: |
6 |
main/trunk/pym/_emerge/__init__.py |
7 |
Log: |
8 |
Split logging and world atom code out of Scheduler._execute() task, and |
9 |
trigger it inside EbuildPhase.execute(). |
10 |
|
11 |
|
12 |
Modified: main/trunk/pym/_emerge/__init__.py |
13 |
=================================================================== |
14 |
--- main/trunk/pym/_emerge/__init__.py 2008-07-03 09:30:05 UTC (rev 10910) |
15 |
+++ main/trunk/pym/_emerge/__init__.py 2008-07-03 11:17:43 UTC (rev 10911) |
16 |
@@ -1702,7 +1702,7 @@ |
17 |
__slots__ = ("args_set", "find_blockers", |
18 |
"ldpath_mtimes", "logger", "opts", |
19 |
"pkg", "pkg_count", "scheduler", |
20 |
- "settings") |
21 |
+ "settings", "world_atom") |
22 |
|
23 |
def execute(self): |
24 |
|
25 |
@@ -1715,12 +1715,14 @@ |
26 |
pkg_count = self.pkg_count |
27 |
scheduler = self.scheduler |
28 |
settings = self.settings |
29 |
+ world_atom = self.world_atom |
30 |
root_config = pkg.root_config |
31 |
root = root_config.root |
32 |
system_set = root_config.sets["system"] |
33 |
world_set = root_config.sets["world"] |
34 |
vartree = root_config.trees["vartree"] |
35 |
- portdb = root_config.trees["porttree"].dbapi |
36 |
+ tree = "porttree" |
37 |
+ portdb = root_config.trees[tree].dbapi |
38 |
debug = settings.get("PORTAGE_DEBUG") == "1" |
39 |
features = self.settings.features |
40 |
settings["EMERGE_FROM"] = pkg.type_name |
41 |
@@ -1784,17 +1786,17 @@ |
42 |
(pkg_count.curval, pkg_count.maxval, pkg.cpv) |
43 |
logger.log(msg, short_msg=short_msg) |
44 |
|
45 |
- merge = EbuildMerge( |
46 |
- find_blockers=find_blockers, |
47 |
- ldpath_mtimes=ldpath_mtimes, |
48 |
- pkg=pkg, settings=settings) |
49 |
+ merge = EbuildMerge(find_blockers=find_blockers, |
50 |
+ ldpath_mtimes=ldpath_mtimes, logger=logger, pkg=pkg, |
51 |
+ pkg_count=pkg_count, pkg_path=ebuild_path, |
52 |
+ settings=settings, tree=tree, world_atom=world_atom) |
53 |
retval = merge.execute() |
54 |
if retval != os.EX_OK: |
55 |
return retval |
56 |
elif "noclean" not in settings.features: |
57 |
portage.doebuild(ebuild_path, "clean", root, |
58 |
settings, debug=debug, mydbapi=portdb, |
59 |
- tree="porttree") |
60 |
+ tree=tree) |
61 |
else: |
62 |
msg = " === (%s of %s) Compiling/Merging (%s::%s)" % \ |
63 |
(pkg_count.curval, pkg_count.maxval, pkg.cpv, ebuild_path) |
64 |
@@ -1809,10 +1811,10 @@ |
65 |
if retval != os.EX_OK: |
66 |
return retval |
67 |
|
68 |
- merge = EbuildMerge( |
69 |
- find_blockers=self.find_blockers, |
70 |
- ldpath_mtimes=ldpath_mtimes, |
71 |
- pkg=pkg, settings=settings) |
72 |
+ merge = EbuildMerge(find_blockers=self.find_blockers, |
73 |
+ ldpath_mtimes=ldpath_mtimes, logger=logger, pkg=pkg, |
74 |
+ pkg_count=pkg_count, pkg_path=ebuild_path, |
75 |
+ settings=settings, tree=tree, world_atom=world_atom) |
76 |
retval = merge.execute() |
77 |
|
78 |
if retval != os.EX_OK: |
79 |
@@ -1831,7 +1833,8 @@ |
80 |
|
81 |
def execute(self): |
82 |
root_config = self.pkg.root_config |
83 |
- portdb = root_config.trees["porttree"].dbapi |
84 |
+ tree = "porttree" |
85 |
+ portdb = root_config.trees[tree].dbapi |
86 |
ebuild_path = portdb.findname(self.pkg.cpv) |
87 |
settings = self.settings |
88 |
debug = settings.get("PORTAGE_DEBUG") == "1" |
89 |
@@ -1855,7 +1858,7 @@ |
90 |
for mydo in self._phases: |
91 |
ebuild_phase = EbuildPhase(fd_pipes=fd_pipes, |
92 |
pkg=self.pkg, phase=mydo, register=self.register, |
93 |
- settings=settings, unregister=self.unregister) |
94 |
+ settings=settings, tree=tree, unregister=self.unregister) |
95 |
|
96 |
ebuild_phase.start() |
97 |
retval = None |
98 |
@@ -1871,7 +1874,7 @@ |
99 |
class EbuildPhase(SubProcess): |
100 |
|
101 |
__slots__ = ("fd_pipes", "phase", "pkg", |
102 |
- "register", "settings", "unregister", |
103 |
+ "register", "settings", "tree", "unregister", |
104 |
"files", "registered") |
105 |
|
106 |
_file_names = ("log", "stdout", "ebuild") |
107 |
@@ -1880,9 +1883,10 @@ |
108 |
|
109 |
def start(self): |
110 |
root_config = self.pkg.root_config |
111 |
- portdb = root_config.trees["porttree"].dbapi |
112 |
- ebuild_path = portdb.findname(self.pkg.cpv) |
113 |
+ tree = self.tree |
114 |
+ mydbapi = root_config.trees[tree].dbapi |
115 |
settings = self.settings |
116 |
+ ebuild_path = settings["EBUILD"] |
117 |
debug = settings.get("PORTAGE_DEBUG") == "1" |
118 |
logfile = settings.get("PORTAGE_LOG_FILE") |
119 |
master_fd = None |
120 |
@@ -1943,7 +1947,7 @@ |
121 |
|
122 |
retval = portage.doebuild(ebuild_path, self.phase, |
123 |
root_config.root, settings, debug, |
124 |
- mydbapi=portdb, tree="porttree", |
125 |
+ mydbapi=mydbapi, tree=tree, |
126 |
fd_pipes=fd_pipes, returnpid=True) |
127 |
|
128 |
self.pid = retval[0] |
129 |
@@ -2043,17 +2047,12 @@ |
130 |
|
131 |
return retval |
132 |
|
133 |
-class EbuildMerge(Task): |
134 |
+class EbuildMerge(SlotObject): |
135 |
|
136 |
- __slots__ = ("find_blockers", "ldpath_mtimes", |
137 |
- "pkg", "pretend", "settings") |
138 |
+ __slots__ = ("find_blockers", "logger", "ldpath_mtimes", |
139 |
+ "pkg", "pkg_count", "pkg_path", "pretend", |
140 |
+ "settings", "tree", "world_atom") |
141 |
|
142 |
- def _get_hash_key(self): |
143 |
- hash_key = getattr(self, "_hash_key", None) |
144 |
- if hash_key is None: |
145 |
- self._hash_key = ("EbuildMerge", self.pkg._get_hash_key()) |
146 |
- return self._hash_key |
147 |
- |
148 |
def execute(self): |
149 |
root_config = self.pkg.root_config |
150 |
settings = self.settings |
151 |
@@ -2062,12 +2061,32 @@ |
152 |
os.path.join(settings["PORTAGE_BUILDDIR"], |
153 |
"build-info"), root_config.root, settings, |
154 |
myebuild=settings["EBUILD"], |
155 |
- mytree="porttree", mydbapi=root_config.trees["porttree"].dbapi, |
156 |
+ mytree=self.tree, mydbapi=root_config.trees[self.tree].dbapi, |
157 |
vartree=root_config.trees["vartree"], |
158 |
prev_mtimes=self.ldpath_mtimes, |
159 |
blockers=self.find_blockers) |
160 |
+ |
161 |
+ if retval == os.EX_OK: |
162 |
+ self.world_atom(self.pkg) |
163 |
+ self._log_success() |
164 |
+ |
165 |
return retval |
166 |
|
167 |
+ def _log_success(self): |
168 |
+ pkg = self.pkg |
169 |
+ pkg_count = self.pkg_count |
170 |
+ pkg_path = self.pkg_path |
171 |
+ logger = self.logger |
172 |
+ if "noclean" not in self.settings.features: |
173 |
+ short_msg = "emerge: (%s of %s) %s Clean Post" % \ |
174 |
+ (pkg_count.curval, pkg_count.maxval, pkg.cpv) |
175 |
+ logger.log((" === (%s of %s) " + \ |
176 |
+ "Post-Build Cleaning (%s::%s)") % \ |
177 |
+ (pkg_count.curval, pkg_count.maxval, pkg.cpv, pkg_path), |
178 |
+ short_msg=short_msg) |
179 |
+ logger.log(" ::: completed emerge (%s of %s) %s to %s" % \ |
180 |
+ (pkg_count.curval, pkg_count.maxval, pkg.cpv, pkg.root)) |
181 |
+ |
182 |
class PackageUninstall(Task): |
183 |
|
184 |
__slots__ = ("ldpath_mtimes", "opts", "pkg", "settings") |
185 |
@@ -2092,7 +2111,7 @@ |
186 |
__slots__ = ("find_blockers", |
187 |
"ldpath_mtimes", "logger", "opts", |
188 |
"pkg", "pkg_count", "prefetcher", "scheduler", |
189 |
- "settings") |
190 |
+ "settings", "world_atom") |
191 |
|
192 |
def execute(self): |
193 |
|
194 |
@@ -2104,6 +2123,8 @@ |
195 |
pkg_count = self.pkg_count |
196 |
scheduler = self.scheduler |
197 |
settings = self.settings |
198 |
+ world_atom = self.world_atom |
199 |
+ tree = "bintree" |
200 |
settings.setcpv(pkg) |
201 |
debug = settings.get("PORTAGE_DEBUG") == "1" |
202 |
|
203 |
@@ -2184,7 +2205,6 @@ |
204 |
root_config = self.pkg.root_config |
205 |
ebuild_path = os.path.join(infloc, pkg.pf + ".ebuild") |
206 |
cleanup = 1 |
207 |
- tree = "bintree" |
208 |
mydbapi = root_config.trees[tree].dbapi |
209 |
|
210 |
retval = portage.doebuild(ebuild_path, "clean", |
211 |
@@ -2248,7 +2268,7 @@ |
212 |
phase = "setup" |
213 |
ebuild_phase = EbuildPhase(fd_pipes=fd_pipes, |
214 |
pkg=pkg, phase=phase, register=scheduler.register, |
215 |
- settings=settings, unregister=scheduler.unregister) |
216 |
+ settings=settings, tree=tree, unregister=scheduler.unregister) |
217 |
|
218 |
ebuild_phase.start() |
219 |
retval = None |
220 |
@@ -2274,10 +2294,10 @@ |
221 |
noiselevel=-1) |
222 |
return retval |
223 |
|
224 |
- merge = EbuildMerge( |
225 |
- find_blockers=find_blockers, |
226 |
- ldpath_mtimes=ldpath_mtimes, |
227 |
- pkg=pkg, settings=settings) |
228 |
+ merge = EbuildMerge(find_blockers=find_blockers, |
229 |
+ ldpath_mtimes=ldpath_mtimes, logger=logger, pkg=pkg, |
230 |
+ pkg_count=pkg_count, pkg_path=pkg_path, |
231 |
+ settings=settings, tree=tree, world_atom=world_atom) |
232 |
|
233 |
retval = merge.execute() |
234 |
if retval != os.EX_OK: |
235 |
@@ -7415,6 +7435,35 @@ |
236 |
|
237 |
return state_changed |
238 |
|
239 |
+ def _world_atom(self, pkg): |
240 |
+ """ |
241 |
+ Add the package to the world file, but only if |
242 |
+ it's supposed to be added. Otherwise, do nothing. |
243 |
+ """ |
244 |
+ if pkg.root != self.target_root: |
245 |
+ return |
246 |
+ |
247 |
+ args_set = self._args_set |
248 |
+ if not args_set.findAtomForPackage(pkg): |
249 |
+ return |
250 |
+ |
251 |
+ logger = self._logger |
252 |
+ pkg_count = self._pkg_count |
253 |
+ root_config = pkg.root_config |
254 |
+ world_set = root_config.sets["world"] |
255 |
+ world_set.lock() |
256 |
+ try: |
257 |
+ world_set.load() # maybe it's changed on disk |
258 |
+ atom = create_world_atom(pkg, args_set, root_config) |
259 |
+ if atom: |
260 |
+ portage.writemsg_stdout(('>>> Recording %s in "world" ' + \ |
261 |
+ 'favorites file...\n') % atom) |
262 |
+ logger.log(" === (%s of %s) Updating world file (%s)" % \ |
263 |
+ (pkg_count.curval, pkg_count.maxval, pkg.cpv)) |
264 |
+ world_set.add(atom) |
265 |
+ finally: |
266 |
+ world_set.unlock() |
267 |
+ |
268 |
def _execute_task(self, pkg): |
269 |
favorites = self._favorites |
270 |
mtimedb = self._mtimedb |
271 |
@@ -7478,7 +7527,8 @@ |
272 |
find_blockers=self._find_blockers(pkg), |
273 |
ldpath_mtimes=ldpath_mtimes, logger=self._logger, |
274 |
opts=self._build_opts, pkg=pkg, pkg_count=pkg_count, |
275 |
- settings=pkgsettings, scheduler=self._sched_iface) |
276 |
+ settings=pkgsettings, scheduler=self._sched_iface, |
277 |
+ world_atom=self._world_atom) |
278 |
retval = build.execute() |
279 |
if retval != os.EX_OK: |
280 |
if fetchonly: |
281 |
@@ -7491,7 +7541,7 @@ |
282 |
ldpath_mtimes=ldpath_mtimes, logger=self._logger, |
283 |
opts=self._binpkg_opts, pkg=pkg, pkg_count=pkg_count, |
284 |
prefetcher=prefetchers.get(pkg), settings=pkgsettings, |
285 |
- scheduler=self._sched_iface) |
286 |
+ scheduler=self._sched_iface, world_atom=self._world_atom) |
287 |
retval = binpkg.execute() |
288 |
if retval != os.EX_OK: |
289 |
if fetchonly: |
290 |
@@ -7499,35 +7549,6 @@ |
291 |
else: |
292 |
raise self._pkg_failure(retval) |
293 |
|
294 |
- if not buildpkgonly: |
295 |
- if not (fetchonly or oneshot or pretend) and \ |
296 |
- args_set.findAtomForPackage(pkg): |
297 |
- world_set.lock() |
298 |
- world_set.load() # maybe it's changed on disk |
299 |
- myfavkey = create_world_atom(pkg, args_set, root_config) |
300 |
- if myfavkey: |
301 |
- print ">>> Recording",myfavkey,"in \"world\" favorites file..." |
302 |
- emergelog(xterm_titles, " === ("+\ |
303 |
- str(mergecount)+" of "+\ |
304 |
- str(len(mymergelist))+\ |
305 |
- ") Updating world file ("+x[pkgindex]+")") |
306 |
- world_set.add(myfavkey) |
307 |
- world_set.unlock() |
308 |
- |
309 |
- if "--pretend" not in self.myopts and \ |
310 |
- "--fetchonly" not in self.myopts and \ |
311 |
- "--fetch-all-uri" not in self.myopts: |
312 |
- if "noclean" not in self.settings.features: |
313 |
- short_msg = "emerge: (%s of %s) %s Clean Post" % \ |
314 |
- (mergecount, len(mymergelist), x[pkgindex]) |
315 |
- emergelog(xterm_titles, (" === (%s of %s) " + \ |
316 |
- "Post-Build Cleaning (%s::%s)") % \ |
317 |
- (mergecount, len(mymergelist), pkg.cpv, y), |
318 |
- short_msg=short_msg) |
319 |
- emergelog(xterm_titles, " ::: completed emerge ("+\ |
320 |
- str(mergecount)+" of "+str(len(mymergelist))+") "+\ |
321 |
- x[2]+" to "+x[1]) |
322 |
- |
323 |
self._restart_if_necessary(pkg) |
324 |
del mtimedb["resume"]["mergelist"][0] |
325 |
if not mtimedb["resume"]["mergelist"]: |
326 |
|
327 |
-- |
328 |
gentoo-commits@l.g.o mailing list |