Gentoo Archives: gentoo-commits

From: "Zac Medico (zmedico)" <zmedico@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] portage r10901 - main/trunk/pym/_emerge
Date: Thu, 03 Jul 2008 04:24:49
Message-Id: E1KEGN9-0002Ms-7S@stork.gentoo.org
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