summaryrefslogtreecommitdiffstats
path: root/subcmds/forall.py
diff options
context:
space:
mode:
authorDavid Pursehouse <david.pursehouse@sonymobile.com>2015-06-02 00:14:43 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2015-06-02 00:14:43 +0000
commit472ce9f5fa61a953b9275cfe36b8b86f3dad5c73 (patch)
treebce9a6d31b48a6cde2bf0f09b34e7fd3923500d7 /subcmds/forall.py
parent0184dcc510969d6e7cb2525da8e7e2a87ed5f012 (diff)
parentc4b301f988ad7499257538070f78f5e50e61b3ae (diff)
downloadgit-repo-472ce9f5fa61a953b9275cfe36b8b86f3dad5c73.tar.gz
Merge changes I32da12c2,Ie4a65b3e
* changes: Skip sleep and retry if git remote update exits with a signal Catch exceptions in project list generator
Diffstat (limited to 'subcmds/forall.py')
-rw-r--r--subcmds/forall.py23
1 files changed, 19 insertions, 4 deletions
diff --git a/subcmds/forall.py b/subcmds/forall.py
index 88b23fbd..6a6d30c9 100644
--- a/subcmds/forall.py
+++ b/subcmds/forall.py
@@ -20,6 +20,7 @@ import multiprocessing
20import re 20import re
21import os 21import os
22import select 22import select
23import signal
23import sys 24import sys
24import subprocess 25import subprocess
25 26
@@ -207,14 +208,12 @@ without iterating through the remaining projects.
207 208
208 os.environ['REPO_COUNT'] = str(len(projects)) 209 os.environ['REPO_COUNT'] = str(len(projects))
209 210
210 pool = multiprocessing.Pool(opt.jobs) 211 pool = multiprocessing.Pool(opt.jobs, InitWorker)
211 try: 212 try:
212 config = self.manifest.manifestProject.config 213 config = self.manifest.manifestProject.config
213 results_it = pool.imap( 214 results_it = pool.imap(
214 DoWorkWrapper, 215 DoWorkWrapper,
215 ([mirror, opt, cmd, shell, cnt, config, self._SerializeProject(p)] 216 self.ProjectArgs(projects, mirror, opt, cmd, shell, config))
216 for cnt, p in enumerate(projects))
217 )
218 pool.close() 217 pool.close()
219 for r in results_it: 218 for r in results_it:
220 rc = rc or r 219 rc = rc or r
@@ -236,12 +235,28 @@ without iterating through the remaining projects.
236 if rc != 0: 235 if rc != 0:
237 sys.exit(rc) 236 sys.exit(rc)
238 237
238 def ProjectArgs(self, projects, mirror, opt, cmd, shell, config):
239 for cnt, p in enumerate(projects):
240 try:
241 project = self._SerializeProject(p)
242 except Exception as e:
243 print('Project list error: %r' % e,
244 file=sys.stderr)
245 return
246 except KeyboardInterrupt:
247 print('Project list interrupted',
248 file=sys.stderr)
249 return
250 yield [mirror, opt, cmd, shell, cnt, config, project]
239 251
240class WorkerKeyboardInterrupt(Exception): 252class WorkerKeyboardInterrupt(Exception):
241 """ Keyboard interrupt exception for worker processes. """ 253 """ Keyboard interrupt exception for worker processes. """
242 pass 254 pass
243 255
244 256
257def InitWorker():
258 signal.signal(signal.SIGINT, signal.SIG_IGN)
259
245def DoWorkWrapper(args): 260def DoWorkWrapper(args):
246 """ A wrapper around the DoWork() method. 261 """ A wrapper around the DoWork() method.
247 262