Index: gclient.py |
diff --git a/gclient.py b/gclient.py |
index aa80b8660a56a65927c6750f756f0319821129f0..4699d1f955790b276f7ee3aafd372e4bce1af8b8 100644 |
--- a/gclient.py |
+++ b/gclient.py |
@@ -49,8 +49,9 @@ Hooks |
] |
""" |
-__version__ = "0.5.2" |
+__version__ = "0.6" |
+import copy |
import logging |
import optparse |
import os |
@@ -355,12 +356,13 @@ class Dependency(GClientKeywords, gclient_utils.WorkItem): |
args + [self.parsed_url.GetFilename()], |
self._file_list) |
else: |
+ # Create a shallow copy to mutate revision. |
+ options = copy.copy(options) |
options.revision = revision_overrides.get(self.name) |
scm = gclient_scm.CreateSCM(self.parsed_url, self.root_dir(), self.name) |
scm.RunCommand(command, options, args, self._file_list) |
self._file_list = [os.path.join(self.name, f.strip()) |
for f in self._file_list] |
- options.revision = None |
self.processed = True |
if self.recursion_limit() > 0: |
# Then we can parse the DEPS file. |
@@ -710,7 +712,7 @@ solutions = [ |
pm = None |
if command == 'update' and not self._options.verbose: |
pm = Progress('Syncing projects', 1) |
- work_queue = gclient_utils.ExecutionQueue(pm) |
+ work_queue = gclient_utils.ExecutionQueue(self._options.jobs, pm) |
for s in self.dependencies: |
work_queue.enqueue(s) |
work_queue.flush(self._options, revision_overrides, command, args, |
@@ -755,7 +757,7 @@ solutions = [ |
if not self.dependencies: |
raise gclient_utils.Error('No solution specified') |
# Load all the settings. |
- work_queue = gclient_utils.ExecutionQueue(None) |
+ work_queue = gclient_utils.ExecutionQueue(self._options.jobs, None) |
for s in self.dependencies: |
work_queue.enqueue(s) |
work_queue.flush(self._options, {}, None, [], work_queue) |
@@ -1168,6 +1170,8 @@ def Main(argv): |
' %-10s %s' % (fn[3:], Command(fn[3:]).__doc__.split('\n')[0].strip()) |
for fn in dir(sys.modules[__name__]) if fn.startswith('CMD')])) |
parser = optparse.OptionParser(version='%prog ' + __version__) |
+ parser.add_option('-j', '--jobs', default=1, type='int', |
+ help='Specify how many SCM commands can run in parallel') |
parser.add_option('-v', '--verbose', action='count', default=0, |
help='Produces additional output for diagnostics. Can be ' |
'used up to three times for more logging info.') |
@@ -1186,6 +1190,8 @@ def Main(argv): |
logging.basicConfig(level=level, |
format='%(module)s(%(lineno)d) %(funcName)s:%(message)s') |
options.entries_filename = options.config_filename + '_entries' |
+ if options.jobs < 1: |
+ parser.error('--jobs must be 1 or higher') |
# These hacks need to die. |
if not hasattr(options, 'revisions'): |