1 |
Author: zmedico |
2 |
Date: 2008-07-03 04:24:42 +0000 (Thu, 03 Jul 2008) |
3 |
New Revision: 10901 |
4 |
|
5 |
Modified: |
6 |
main/trunk/pym/_emerge/__init__.py |
7 |
Log: |
8 |
Make BinpkgFetcherAsync inherit from SpawnProcess. |
9 |
|
10 |
|
11 |
Modified: main/trunk/pym/_emerge/__init__.py |
12 |
=================================================================== |
13 |
--- main/trunk/pym/_emerge/__init__.py 2008-07-03 04:10:30 UTC (rev 10900) |
14 |
+++ main/trunk/pym/_emerge/__init__.py 2008-07-03 04:24:42 UTC (rev 10901) |
15 |
@@ -2239,16 +2239,11 @@ |
16 |
rval = 1 |
17 |
return rval |
18 |
|
19 |
-class BinpkgFetcherAsync(SubProcess): |
20 |
+class BinpkgFetcherAsync(SpawnProcess): |
21 |
|
22 |
- __slots__ = ("log_file", "fd_pipes", "pkg", |
23 |
- "register", "unregister", |
24 |
- "locked", "files", "pkg_path", "registered", "_lock_obj") |
25 |
+ __slots__ = ("pkg", |
26 |
+ "locked", "pkg_path", "_lock_obj") |
27 |
|
28 |
- _file_names = ("fetcher", "out") |
29 |
- _files_dict = slot_dict_class(_file_names, prefix="") |
30 |
- _bufsize = 4096 |
31 |
- |
32 |
def __init__(self, **kwargs): |
33 |
SubProcess.__init__(self, **kwargs) |
34 |
pkg = self.pkg |
35 |
@@ -2259,43 +2254,6 @@ |
36 |
if self.cancelled: |
37 |
return |
38 |
|
39 |
- fd_pipes = self.fd_pipes |
40 |
- if fd_pipes is None: |
41 |
- fd_pipes = { |
42 |
- 0 : sys.stdin.fileno(), |
43 |
- 1 : sys.stdout.fileno(), |
44 |
- 2 : sys.stderr.fileno(), |
45 |
- } |
46 |
- |
47 |
- log_file = self.log_file |
48 |
- self.files = self._files_dict() |
49 |
- files = self.files |
50 |
- |
51 |
- if log_file is not None: |
52 |
- files.out = open(log_file, "a") |
53 |
- portage.util.apply_secpass_permissions(log_file, |
54 |
- uid=portage.portage_uid, gid=portage.portage_gid, |
55 |
- mode=0660) |
56 |
- else: |
57 |
- # flush any pending output |
58 |
- for fd in fd_pipes.itervalues(): |
59 |
- if fd == sys.stdout.fileno(): |
60 |
- sys.stdout.flush() |
61 |
- if fd == sys.stderr.fileno(): |
62 |
- sys.stderr.flush() |
63 |
- |
64 |
- files.out = os.fdopen(os.dup(fd_pipes[1]), 'w') |
65 |
- |
66 |
- master_fd, slave_fd = os.pipe() |
67 |
- fcntl.fcntl(master_fd, fcntl.F_SETFL, |
68 |
- fcntl.fcntl(master_fd, fcntl.F_GETFL) | os.O_NONBLOCK) |
69 |
- |
70 |
- fd_pipes.setdefault(0, sys.stdin.fileno()) |
71 |
- fd_pipes_orig = fd_pipes.copy() |
72 |
- fd_pipes[0] = fd_pipes_orig[0] |
73 |
- fd_pipes[1] = slave_fd |
74 |
- fd_pipes[2] = slave_fd |
75 |
- |
76 |
pkg = self.pkg |
77 |
bintree = pkg.root_config.trees["bintree"] |
78 |
settings = bintree.settings |
79 |
@@ -2337,36 +2295,15 @@ |
80 |
if use_locks: |
81 |
self.lock() |
82 |
|
83 |
- retval = portage.process.spawn(fetch_args, env=fetch_env, |
84 |
- fd_pipes=fd_pipes, returnpid=True) |
85 |
+ self.args = fetch_args |
86 |
+ self.env = fetch_env |
87 |
+ SpawnProcess.start(self) |
88 |
|
89 |
- self.pid = retval[0] |
90 |
+ def _set_returncode(self, wait_retval): |
91 |
+ SpawnProcess._set_returncode(self, wait_retval) |
92 |
+ if self.locked: |
93 |
+ self.unlock() |
94 |
|
95 |
- os.close(slave_fd) |
96 |
- files.fetcher = os.fdopen(master_fd, 'r') |
97 |
- self.registered = True |
98 |
- self.register(files.fetcher.fileno(), |
99 |
- select.POLLIN, self._output_handler) |
100 |
- |
101 |
- def _output_handler(self, fd, event): |
102 |
- files = self.files |
103 |
- buf = array.array('B') |
104 |
- try: |
105 |
- buf.fromfile(files.fetcher, self._bufsize) |
106 |
- except EOFError: |
107 |
- pass |
108 |
- if buf: |
109 |
- buf.tofile(files.out) |
110 |
- files.out.flush() |
111 |
- else: |
112 |
- fd = files.fetcher.fileno() |
113 |
- for f in files.values(): |
114 |
- f.close() |
115 |
- if self.locked: |
116 |
- self.unlock() |
117 |
- self.registered = False |
118 |
- self.unregister(fd) |
119 |
- |
120 |
def lock(self): |
121 |
""" |
122 |
This raises an AlreadyLocked exception if lock() is called |
123 |
@@ -7240,7 +7177,7 @@ |
124 |
elif pkg.type_name == "binary" and getbinpkg and \ |
125 |
pkg.root_config.trees["bintree"].isremote(pkg.cpv): |
126 |
prefetcher = BinpkgFetcherAsync( |
127 |
- log_file=self._fetch_log, |
128 |
+ logfile=self._fetch_log, |
129 |
pkg=pkg, register=self._register, |
130 |
unregister=self._unregister) |
131 |
prefetchers[pkg] = prefetcher |
132 |
|
133 |
-- |
134 |
gentoo-commits@l.g.o mailing list |