1 |
Author: zmedico |
2 |
Date: 2008-07-02 08:07:38 +0000 (Wed, 02 Jul 2008) |
3 |
New Revision: 10891 |
4 |
|
5 |
Modified: |
6 |
main/trunk/pym/_emerge/__init__.py |
7 |
Log: |
8 |
Split out a SubProcess base class for EbuildFetcherAsync, EbuildPhase, |
9 |
and BinpkgFetcherAsync. |
10 |
|
11 |
|
12 |
Modified: main/trunk/pym/_emerge/__init__.py |
13 |
=================================================================== |
14 |
--- main/trunk/pym/_emerge/__init__.py 2008-07-02 07:50:54 UTC (rev 10890) |
15 |
+++ main/trunk/pym/_emerge/__init__.py 2008-07-02 08:07:38 UTC (rev 10891) |
16 |
@@ -1453,11 +1453,53 @@ |
17 |
mydbapi=portdb, tree="porttree") |
18 |
return retval |
19 |
|
20 |
-class EbuildFetcherAsync(SlotObject): |
21 |
+class SubProcess(SlotObject): |
22 |
+ __slots__ = ("cancelled", "pid", "returncode") |
23 |
|
24 |
- __slots__ = ("cancelled", "log_file", "fd_pipes", "pkg", |
25 |
+ def poll(self): |
26 |
+ if self.returncode is not None: |
27 |
+ return self.returncode |
28 |
+ retval = os.waitpid(self.pid, os.WNOHANG) |
29 |
+ if retval == (0, 0): |
30 |
+ return None |
31 |
+ self._set_returncode(retval) |
32 |
+ return self.returncode |
33 |
+ |
34 |
+ def cancel(self): |
35 |
+ if self.isAlive(): |
36 |
+ os.kill(self.pid, signal.SIGTERM) |
37 |
+ self.cancelled = True |
38 |
+ if self.pid is not None: |
39 |
+ self.wait() |
40 |
+ return self.returncode |
41 |
+ |
42 |
+ def isAlive(self): |
43 |
+ return self.pid is not None and \ |
44 |
+ self.returncode is None |
45 |
+ |
46 |
+ def wait(self): |
47 |
+ if self.returncode is not None: |
48 |
+ return self.returncode |
49 |
+ self._set_returncode(os.waitpid(self.pid, 0)) |
50 |
+ return self.returncode |
51 |
+ |
52 |
+ def _set_returncode(self, wait_retval): |
53 |
+ |
54 |
+ retval = wait_retval[1] |
55 |
+ portage.process.spawned_pids.remove(self.pid) |
56 |
+ if retval != os.EX_OK: |
57 |
+ if retval & 0xff: |
58 |
+ retval = (retval & 0xff) << 8 |
59 |
+ else: |
60 |
+ retval = retval >> 8 |
61 |
+ |
62 |
+ self.returncode = retval |
63 |
+ |
64 |
+class EbuildFetcherAsync(SubProcess): |
65 |
+ |
66 |
+ __slots__ = ("log_file", "fd_pipes", "pkg", |
67 |
"register", "unregister", |
68 |
- "pid", "returncode", "files") |
69 |
+ "files") |
70 |
|
71 |
_file_names = ("fetcher", "out") |
72 |
_files_dict = slot_dict_class(_file_names, prefix="") |
73 |
@@ -1550,45 +1592,6 @@ |
74 |
for f in files.values(): |
75 |
f.close() |
76 |
|
77 |
- def poll(self): |
78 |
- if self.returncode is not None: |
79 |
- return self.returncode |
80 |
- retval = os.waitpid(self.pid, os.WNOHANG) |
81 |
- if retval == (0, 0): |
82 |
- return None |
83 |
- self._set_returncode(retval) |
84 |
- return self.returncode |
85 |
- |
86 |
- def cancel(self): |
87 |
- if self.isAlive(): |
88 |
- os.kill(self.pid, signal.SIGTERM) |
89 |
- self.cancelled = True |
90 |
- if self.pid is not None: |
91 |
- self.wait() |
92 |
- return self.returncode |
93 |
- |
94 |
- def isAlive(self): |
95 |
- return self.pid is not None and \ |
96 |
- self.returncode is None |
97 |
- |
98 |
- def wait(self): |
99 |
- if self.returncode is not None: |
100 |
- return self.returncode |
101 |
- self._set_returncode(os.waitpid(self.pid, 0)) |
102 |
- return self.returncode |
103 |
- |
104 |
- def _set_returncode(self, wait_retval): |
105 |
- |
106 |
- retval = wait_retval[1] |
107 |
- portage.process.spawned_pids.remove(self.pid) |
108 |
- if retval != os.EX_OK: |
109 |
- if retval & 0xff: |
110 |
- retval = (retval & 0xff) << 8 |
111 |
- else: |
112 |
- retval = retval >> 8 |
113 |
- |
114 |
- self.returncode = retval |
115 |
- |
116 |
class EbuildBuildDir(SlotObject): |
117 |
|
118 |
__slots__ = ("pkg", "settings", |
119 |
@@ -1838,11 +1841,11 @@ |
120 |
|
121 |
return os.EX_OK |
122 |
|
123 |
-class EbuildPhase(SlotObject): |
124 |
+class EbuildPhase(SubProcess): |
125 |
|
126 |
__slots__ = ("fd_pipes", "phase", "pkg", |
127 |
"register", "settings", "unregister", |
128 |
- "pid", "returncode", "files") |
129 |
+ "files") |
130 |
|
131 |
_file_names = ("log", "stdout", "ebuild") |
132 |
_files_dict = slot_dict_class(_file_names, prefix="") |
133 |
@@ -1943,42 +1946,17 @@ |
134 |
for f in files.values(): |
135 |
f.close() |
136 |
|
137 |
- def poll(self): |
138 |
- if self.returncode is not None: |
139 |
- return self.returncode |
140 |
- retval = os.waitpid(self.pid, os.WNOHANG) |
141 |
- if retval == (0, 0): |
142 |
- return None |
143 |
- self._set_returncode(retval) |
144 |
- return self.returncode |
145 |
- |
146 |
- def wait(self): |
147 |
- if self.returncode is not None: |
148 |
- return self.returncode |
149 |
- self._set_returncode(os.waitpid(self.pid, 0)) |
150 |
- return self.returncode |
151 |
- |
152 |
def _set_returncode(self, wait_retval): |
153 |
- |
154 |
- retval = wait_retval[1] |
155 |
- portage.process.spawned_pids.remove(self.pid) |
156 |
- if retval != os.EX_OK: |
157 |
- if retval & 0xff: |
158 |
- retval = (retval & 0xff) << 8 |
159 |
- else: |
160 |
- retval = retval >> 8 |
161 |
- |
162 |
+ SubProcess._set_returncode(self, wait_retval) |
163 |
msg = portage._doebuild_exit_status_check( |
164 |
self.phase, self.settings) |
165 |
if msg: |
166 |
- retval = 1 |
167 |
+ self.returncode = 1 |
168 |
from textwrap import wrap |
169 |
from portage.elog.messages import eerror |
170 |
for l in wrap(msg, 72): |
171 |
eerror(l, phase=self.phase, key=self.pkg.cpv) |
172 |
|
173 |
- self.returncode = retval |
174 |
- |
175 |
class EbuildBinpkg(Task): |
176 |
""" |
177 |
This assumes that src_install() has successfully completed. |
178 |
@@ -2213,18 +2191,18 @@ |
179 |
rval = 1 |
180 |
return rval |
181 |
|
182 |
-class BinpkgFetcherAsync(SlotObject): |
183 |
+class BinpkgFetcherAsync(SubProcess): |
184 |
|
185 |
- __slots__ = ("cancelled", "log_file", "fd_pipes", "pkg", |
186 |
+ __slots__ = ("log_file", "fd_pipes", "pkg", |
187 |
"register", "unregister", |
188 |
- "locked", "files", "pid", "pkg_path", "returncode", "_lock_obj") |
189 |
+ "locked", "files", "pkg_path", "_lock_obj") |
190 |
|
191 |
_file_names = ("fetcher", "out") |
192 |
_files_dict = slot_dict_class(_file_names, prefix="") |
193 |
_bufsize = 4096 |
194 |
|
195 |
def __init__(self, **kwargs): |
196 |
- SlotObject.__init__(self, **kwargs) |
197 |
+ SubProcess.__init__(self, **kwargs) |
198 |
pkg = self.pkg |
199 |
self.pkg_path = pkg.root_config.trees["bintree"].getname(pkg.cpv) |
200 |
|
201 |
@@ -2362,45 +2340,6 @@ |
202 |
self._lock_obj = None |
203 |
self.locked = False |
204 |
|
205 |
- def poll(self): |
206 |
- if self.returncode is not None: |
207 |
- return self.returncode |
208 |
- retval = os.waitpid(self.pid, os.WNOHANG) |
209 |
- if retval == (0, 0): |
210 |
- return None |
211 |
- self._set_returncode(retval) |
212 |
- return self.returncode |
213 |
- |
214 |
- def cancel(self): |
215 |
- if self.isAlive(): |
216 |
- os.kill(self.pid, signal.SIGTERM) |
217 |
- self.cancelled = True |
218 |
- if self.pid is not None: |
219 |
- self.wait() |
220 |
- return self.returncode |
221 |
- |
222 |
- def isAlive(self): |
223 |
- return self.pid is not None and \ |
224 |
- self.returncode is None |
225 |
- |
226 |
- def wait(self): |
227 |
- if self.returncode is not None: |
228 |
- return self.returncode |
229 |
- self._set_returncode(os.waitpid(self.pid, 0)) |
230 |
- return self.returncode |
231 |
- |
232 |
- def _set_returncode(self, wait_retval): |
233 |
- |
234 |
- retval = wait_retval[1] |
235 |
- portage.process.spawned_pids.remove(self.pid) |
236 |
- if retval != os.EX_OK: |
237 |
- if retval & 0xff: |
238 |
- retval = (retval & 0xff) << 8 |
239 |
- else: |
240 |
- retval = retval >> 8 |
241 |
- |
242 |
- self.returncode = retval |
243 |
- |
244 |
class BinpkgMerge(Task): |
245 |
|
246 |
__slots__ = ("find_blockers", "ldpath_mtimes", |
247 |
|
248 |
-- |
249 |
gentoo-commits@l.g.o mailing list |