summaryrefslogtreecommitdiffstats
path: root/subcmds/sync.py
diff options
context:
space:
mode:
authorMike Frysinger <vapier@google.com>2021-04-09 00:21:02 -0400
committerMike Frysinger <vapier@google.com>2021-04-09 15:58:56 +0000
commit49de8ef584a074982f3fd86aac8a144f48209807 (patch)
tree025da3d2d2c2fd2f82f288b25c629ae94778c4f7 /subcmds/sync.py
parenta1051d8baa15d785dd9d6b55caa3cd2e8b2e0fc8 (diff)
downloadgit-repo-49de8ef584a074982f3fd86aac8a144f48209807.tar.gz
sync: add separate --jobs options for different steps
The number of jobs one wants to run against the network tends to factor differently from the number of jobs one wants to run when checking out local projects. The former is constrained by your internet connection & server limits while the later is constrained by your local computer's CPU & storage I/O. People with beefier computers probably want to keep the network/server jobs bounded a bit lower than the local/checkout jobs. Change-Id: Ia27ab682c62c09d244a8a1427b1c65acf0116c1c Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/302804 Reviewed-by: Raman Tenneti <rtenneti@google.com> Tested-by: Mike Frysinger <vapier@google.com>
Diffstat (limited to 'subcmds/sync.py')
-rw-r--r--subcmds/sync.py15
1 files changed, 11 insertions, 4 deletions
diff --git a/subcmds/sync.py b/subcmds/sync.py
index b41b20b7..4bcd45d5 100644
--- a/subcmds/sync.py
+++ b/subcmds/sync.py
@@ -174,6 +174,11 @@ later is required to fix a server side protocol bug.
174 pass 174 pass
175 super()._Options(p) 175 super()._Options(p)
176 176
177 p.add_option('--jobs-network', default=None, type=int, metavar='JOBS',
178 help='number of network jobs to run in parallel (defaults to --jobs)')
179 p.add_option('--jobs-checkout', default=None, type=int, metavar='JOBS',
180 help='number of local checkout jobs to run in parallel (defaults to --jobs)')
181
177 p.add_option('-f', '--force-broken', 182 p.add_option('-f', '--force-broken',
178 dest='force_broken', action='store_true', 183 dest='force_broken', action='store_true',
179 help='obsolete option (to be deleted in the future)') 184 help='obsolete option (to be deleted in the future)')
@@ -364,6 +369,7 @@ later is required to fix a server side protocol bug.
364 def _Fetch(self, projects, opt, err_event): 369 def _Fetch(self, projects, opt, err_event):
365 ret = True 370 ret = True
366 371
372 jobs = opt.jobs_network if opt.jobs_network else self.jobs
367 fetched = set() 373 fetched = set()
368 pm = Progress('Fetching', len(projects), delay=False) 374 pm = Progress('Fetching', len(projects), delay=False)
369 375
@@ -391,7 +397,7 @@ later is required to fix a server side protocol bug.
391 return ret 397 return ret
392 398
393 # NB: Multiprocessing is heavy, so don't spin it up for one job. 399 # NB: Multiprocessing is heavy, so don't spin it up for one job.
394 if len(projects_list) == 1 or opt.jobs == 1: 400 if len(projects_list) == 1 or jobs == 1:
395 if not _ProcessResults(self._FetchProjectList(opt, x) for x in projects_list): 401 if not _ProcessResults(self._FetchProjectList(opt, x) for x in projects_list):
396 ret = False 402 ret = False
397 else: 403 else:
@@ -409,7 +415,7 @@ later is required to fix a server side protocol bug.
409 else: 415 else:
410 pm.update(inc=0, msg='warming up') 416 pm.update(inc=0, msg='warming up')
411 chunksize = 4 417 chunksize = 4
412 with multiprocessing.Pool(opt.jobs) as pool: 418 with multiprocessing.Pool(jobs) as pool:
413 results = pool.imap_unordered( 419 results = pool.imap_unordered(
414 functools.partial(self._FetchProjectList, opt), 420 functools.partial(self._FetchProjectList, opt),
415 projects_list, 421 projects_list,
@@ -463,6 +469,7 @@ later is required to fix a server side protocol bug.
463 err_results: A list of strings, paths to git repos where checkout failed. 469 err_results: A list of strings, paths to git repos where checkout failed.
464 """ 470 """
465 ret = True 471 ret = True
472 jobs = opt.jobs_checkout if opt.jobs_checkout else self.jobs
466 473
467 # Only checkout projects with worktrees. 474 # Only checkout projects with worktrees.
468 all_projects = [x for x in all_projects if x.worktree] 475 all_projects = [x for x in all_projects if x.worktree]
@@ -483,11 +490,11 @@ later is required to fix a server side protocol bug.
483 return True 490 return True
484 491
485 # NB: Multiprocessing is heavy, so don't spin it up for one job. 492 # NB: Multiprocessing is heavy, so don't spin it up for one job.
486 if len(all_projects) == 1 or opt.jobs == 1: 493 if len(all_projects) == 1 or jobs == 1:
487 if not _ProcessResults(self._CheckoutOne(opt, x) for x in all_projects): 494 if not _ProcessResults(self._CheckoutOne(opt, x) for x in all_projects):
488 ret = False 495 ret = False
489 else: 496 else:
490 with multiprocessing.Pool(opt.jobs) as pool: 497 with multiprocessing.Pool(jobs) as pool:
491 results = pool.imap_unordered( 498 results = pool.imap_unordered(
492 functools.partial(self._CheckoutOne, opt), 499 functools.partial(self._CheckoutOne, opt),
493 all_projects, 500 all_projects,