Index: gclient.py |
=================================================================== |
--- gclient.py (revision 124337) |
+++ gclient.py (working copy) |
@@ -1121,6 +1121,32 @@ |
return client.RunOnDeps('cleanup', args) |
+class Entry(gclient_utils.WorkItem): |
M-A Ruel
2012/03/01 14:12:12
I'm a tad uncomfortable with this class. I'd rathe
|
+ """Object that represents a gclient entry.""" |
+ |
+ def __init__(self, name, scm, cwd, url): |
+ gclient_utils.WorkItem.__init__(self, name) |
+ self._scm = scm |
+ self._cwd = cwd |
+ self._url = url |
+ self.requirements = {} |
+ |
+ # Arguments number differs from overridden method |
+ # pylint: disable=W0221 |
+ def run(self, revision_overrides, command, args, work_queue, options): |
+ """Executes a command in a given module.""" |
+ assert command == 'exec' |
+ # Pass in the SCM type as an env variable |
+ env = os.environ.copy() |
+ if self._scm: |
+ env['GCLIENT_SCM'] = self._scm |
+ if self._url: |
+ env['GCLIENT_URL'] = self._url |
+ if os.path.isdir(self._cwd): |
+ subprocess2.call(args, cwd=self._cwd, env=env) |
davidbarr
2012/03/01 05:33:15
Maybe this should be a wrapper method provided by
|
+ else: |
+ print >> sys.stderr, 'Skipped missing %s' % self._cwd |
+ |
davidbarr
2012/03/01 05:33:15
Whitespace nit.
|
@attr('usage', '[command] [args ...]') |
def CMDrecurse(parser, args): |
"""Operates on all the entries. |
@@ -1131,7 +1157,6 @@ |
parser.disable_interspersed_args() |
parser.add_option('-s', '--scm', action='append', default=[], |
help='choose scm types to operate upon') |
- parser.remove_option('--jobs') |
options, args = parser.parse_args(args) |
if not args: |
print >> sys.stderr, 'Need to supply a command!' |
@@ -1147,22 +1172,18 @@ |
for scm in options.scm: |
scm_set.update(scm.split(',')) |
- # Pass in the SCM type as an env variable |
- env = os.environ.copy() |
- |
+ pm = None |
+ # Disable progress for non-tty stdout. |
+ if (sys.stdout.isatty() and not options.verbose): |
+ pm = Progress(' '.join(args), 1) |
+ work_queue = gclient_utils.ExecutionQueue(options.jobs, pm) |
for path, url in entries.iteritems(): |
scm = gclient_scm.GetScmName(url) |
if scm_set and scm not in scm_set: |
continue |
cwd = os.path.normpath(os.path.join(root, path)) |
- if scm: |
- env['GCLIENT_SCM'] = scm |
- if url: |
- env['GCLIENT_URL'] = url |
- if os.path.isdir(cwd): |
- subprocess2.call(args, cwd=cwd, env=env) |
- else: |
- print >> sys.stderr, 'Skipped missing %s' % cwd |
+ work_queue.enqueue(Entry(path, scm, cwd, url)) |
+ work_queue.flush({}, 'exec', args, options=options) |
return 0 |
@@ -1172,8 +1193,8 @@ |
Completely git-specific. Simply runs 'git fetch [args ...]' for each module. |
""" |
- (_, args) = parser.parse_args(args) |
- args = ['-s', 'git', 'git', 'fetch'] + args |
+ (options, args) = parser.parse_args(args) |
+ args = ['-j%d' % options.jobs, '-s', 'git', 'git', 'fetch'] + args |
davidbarr
2012/03/01 05:33:15
Is this necessary? Will the parser accumulate opti
|
return CMDrecurse(parser, args) |