Gentoo Archives: gentoo-commits

From: "Zac Medico (zmedico)" <zmedico@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] portage r10927 - main/trunk/pym/_emerge
Date: Fri, 04 Jul 2008 13:20:20
Message-Id: E1KElCw-0002kM-CW@stork.gentoo.org
1 Author: zmedico
2 Date: 2008-07-04 13:20:13 +0000 (Fri, 04 Jul 2008)
3 New Revision: 10927
4
5 Modified:
6 main/trunk/pym/_emerge/__init__.py
7 Log:
8 Split a _main_loop() method out of Scheduler._merge().
9
10
11 Modified: main/trunk/pym/_emerge/__init__.py
12 ===================================================================
13 --- main/trunk/pym/_emerge/__init__.py 2008-07-04 11:12:01 UTC (rev 10926)
14 +++ main/trunk/pym/_emerge/__init__.py 2008-07-04 13:20:13 UTC (rev 10927)
15 @@ -21,6 +21,7 @@
16 sys.exit(1)
17
18 import array
19 +from collections import deque
20 import fcntl
21 import select
22 import shlex
23 @@ -7079,7 +7080,6 @@
24
25 def __init__(self, **kwargs):
26 SlotObject.__init__(self, **kwargs)
27 - from collections import deque
28 self._task_queue = deque()
29 self.running_tasks = set()
30 if self.max_jobs is None:
31 @@ -7197,6 +7197,8 @@
32 self._add_task = self._task_queues.prefetch.add
33 self._schedule_tasks = self._task_queues.prefetch.schedule
34 self._prefetchers = weakref.WeakValueDictionary()
35 + self._pkg_queue = deque()
36 + self._failed_pkgs = []
37 self._failed_fetches = []
38 self._parallel_fetch = False
39 merge_count = len([x for x in mergelist \
40 @@ -7493,42 +7495,70 @@
41
42 return rval
43
44 - def _merge(self):
45 + def _add_packages(self):
46 + pkg_queue = self._pkg_queue
47 + for pkg in self._mergelist:
48 + if isinstance(pkg, Package):
49 + pkg_queue.append(pkg)
50 + elif isinstance(pkg, Blocker):
51 + pass
52
53 - self._add_prefetchers()
54 + def _choose_pkg(self):
55 + return self._pkg_queue.popleft()
56
57 - try:
58 - for pkg in self._mergelist:
59 + def _main_loop(self):
60
61 - if not isinstance(pkg, Package):
62 - # blockers
63 - continue
64 + pkg_queue = self._pkg_queue
65
66 - retval = self._execute_pkg(pkg)
67 + while pkg_queue:
68 + pkg = self._choose_pkg()
69 + retval = self._execute_pkg(pkg)
70
71 - if retval != os.EX_OK:
72 - if not self._build_opts.fetchonly:
73 - return retval
74 + if retval != os.EX_OK:
75 + self._failed_pkgs.append((pkg, retval))
76 + if not self._build_opts.fetchonly:
77 + return
78
79 - if pkg.installed:
80 - continue
81 + if pkg.installed:
82 + continue
83
84 - self._restart_if_necessary(pkg)
85 + self._restart_if_necessary(pkg)
86
87 - # Call mtimedb.commit() after each merge so that
88 - # --resume still works after being interrupted
89 - # by reboot, sigkill or similar.
90 - mtimedb = self._mtimedb
91 - del mtimedb["resume"]["mergelist"][0]
92 - if not mtimedb["resume"]["mergelist"]:
93 - del mtimedb["resume"]
94 - mtimedb.commit()
95 + # Call mtimedb.commit() after each merge so that
96 + # --resume still works after being interrupted
97 + # by reboot, sigkill or similar.
98 + mtimedb = self._mtimedb
99 + del mtimedb["resume"]["mergelist"][0]
100 + if not mtimedb["resume"]["mergelist"]:
101 + del mtimedb["resume"]
102 + mtimedb.commit()
103
104 + def _merge(self):
105 +
106 + self._add_prefetchers()
107 + self._add_packages()
108 + pkg_queue = self._pkg_queue
109 + failed_pkgs = self._failed_pkgs
110 + rval = os.EX_OK
111 +
112 + try:
113 + self._main_loop()
114 finally:
115 + # discard remaining packages if necessary
116 + pkg_queue.clear()
117 +
118 # clean up child process if necessary
119 self._task_queues.prefetch.clear()
120 - return os.EX_OK
121
122 + # discard any failures and return the
123 + # exist status of the last one
124 + if failed_pkgs:
125 + pkg, rval = failed_pkgs[-1]
126 +
127 + del failed_pkgs[:]
128 +
129 + return rval
130 +
131 def _execute_pkg(self, pkg):
132
133 if not pkg.installed:
134
135 --
136 gentoo-commits@l.g.o mailing list