Gentoo Archives: gentoo-commits

From: "Zac Medico (zmedico)" <zmedico@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] portage r10891 - main/trunk/pym/_emerge
Date: Wed, 02 Jul 2008 08:07:46
Message-Id: E1KDxNM-0000UA-2i@stork.gentoo.org
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