diff options
-rw-r--r-- | subcmds/sync.py | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/subcmds/sync.py b/subcmds/sync.py index 7ba9ebfc..bbb166c0 100644 --- a/subcmds/sync.py +++ b/subcmds/sync.py | |||
@@ -255,7 +255,7 @@ later is required to fix a server side protocol bug. | |||
255 | dest='repo_upgraded', action='store_true', | 255 | dest='repo_upgraded', action='store_true', |
256 | help=SUPPRESS_HELP) | 256 | help=SUPPRESS_HELP) |
257 | 257 | ||
258 | def _FetchProjectList(self, opt, projects, *args, **kwargs): | 258 | def _FetchProjectList(self, opt, projects, sem, *args, **kwargs): |
259 | """Main function of the fetch threads when jobs are > 1. | 259 | """Main function of the fetch threads when jobs are > 1. |
260 | 260 | ||
261 | Delegates most of the work to _FetchHelper. | 261 | Delegates most of the work to _FetchHelper. |
@@ -263,15 +263,20 @@ later is required to fix a server side protocol bug. | |||
263 | Args: | 263 | Args: |
264 | opt: Program options returned from optparse. See _Options(). | 264 | opt: Program options returned from optparse. See _Options(). |
265 | projects: Projects to fetch. | 265 | projects: Projects to fetch. |
266 | sem: We'll release() this semaphore when we exit so that another thread | ||
267 | can be started up. | ||
266 | *args, **kwargs: Remaining arguments to pass to _FetchHelper. See the | 268 | *args, **kwargs: Remaining arguments to pass to _FetchHelper. See the |
267 | _FetchHelper docstring for details. | 269 | _FetchHelper docstring for details. |
268 | """ | 270 | """ |
269 | for project in projects: | 271 | try: |
270 | success = self._FetchHelper(opt, project, *args, **kwargs) | 272 | for project in projects: |
271 | if not success and not opt.force_broken: | 273 | success = self._FetchHelper(opt, project, *args, **kwargs) |
272 | break | 274 | if not success and not opt.force_broken: |
275 | break | ||
276 | finally: | ||
277 | sem.release() | ||
273 | 278 | ||
274 | def _FetchHelper(self, opt, project, lock, fetched, pm, sem, err_event): | 279 | def _FetchHelper(self, opt, project, lock, fetched, pm, err_event): |
275 | """Fetch git objects for a single project. | 280 | """Fetch git objects for a single project. |
276 | 281 | ||
277 | Args: | 282 | Args: |
@@ -283,8 +288,6 @@ later is required to fix a server side protocol bug. | |||
283 | (with our lock held). | 288 | (with our lock held). |
284 | pm: Instance of a Project object. We will call pm.update() (with our | 289 | pm: Instance of a Project object. We will call pm.update() (with our |
285 | lock held). | 290 | lock held). |
286 | sem: We'll release() this semaphore when we exit so that another thread | ||
287 | can be started up. | ||
288 | err_event: We'll set this event in the case of an error (after printing | 291 | err_event: We'll set this event in the case of an error (after printing |
289 | out info about the error). | 292 | out info about the error). |
290 | 293 | ||
@@ -340,7 +343,6 @@ later is required to fix a server side protocol bug. | |||
340 | finally: | 343 | finally: |
341 | if did_lock: | 344 | if did_lock: |
342 | lock.release() | 345 | lock.release() |
343 | sem.release() | ||
344 | 346 | ||
345 | return success | 347 | return success |
346 | 348 | ||
@@ -365,10 +367,10 @@ later is required to fix a server side protocol bug. | |||
365 | sem.acquire() | 367 | sem.acquire() |
366 | kwargs = dict(opt=opt, | 368 | kwargs = dict(opt=opt, |
367 | projects=project_list, | 369 | projects=project_list, |
370 | sem=sem, | ||
368 | lock=lock, | 371 | lock=lock, |
369 | fetched=fetched, | 372 | fetched=fetched, |
370 | pm=pm, | 373 | pm=pm, |
371 | sem=sem, | ||
372 | err_event=err_event) | 374 | err_event=err_event) |
373 | if self.jobs > 1: | 375 | if self.jobs > 1: |
374 | t = _threading.Thread(target = self._FetchProjectList, | 376 | t = _threading.Thread(target = self._FetchProjectList, |