| Index: gclient_utils.py
|
| diff --git a/gclient_utils.py b/gclient_utils.py
|
| index 78fa7222adc4bae3d8c8696186ecc38352d5a8f8..0eeb185dc1481335ec9b4e5c885a585760d80485 100644
|
| --- a/gclient_utils.py
|
| +++ b/gclient_utils.py
|
| @@ -192,29 +192,31 @@ def safe_makedirs(tree):
|
| raise
|
|
|
|
|
| -def CheckCallAndFilterAndHeader(args, always=False, **kwargs):
|
| +def CheckCallAndFilterAndHeader(args, always=False, header=None, **kwargs):
|
| """Adds 'header' support to CheckCallAndFilter.
|
|
|
| If |always| is True, a message indicating what is being done
|
| is printed to stdout all the time even if not output is generated. Otherwise
|
| the message header is printed only if the call generated any ouput.
|
| """
|
| - stdout = kwargs.get('stdout', None) or sys.stdout
|
| + stdout = kwargs.setdefault('stdout', sys.stdout)
|
| + if header is None:
|
| + header = "\n________ running '%s' in '%s'\n" % (
|
| + ' '.join(args), kwargs.get('cwd', '.'))
|
| +
|
| if always:
|
| - stdout.write('\n________ running \'%s\' in \'%s\'\n'
|
| - % (' '.join(args), kwargs.get('cwd', '.')))
|
| + stdout.write(header)
|
| else:
|
| - filter_fn = kwargs.get('filter_fn', None)
|
| + filter_fn = kwargs.get('filter_fn')
|
| def filter_msg(line):
|
| if line is None:
|
| - stdout.write('\n________ running \'%s\' in \'%s\'\n'
|
| - % (' '.join(args), kwargs.get('cwd', '.')))
|
| + stdout.write(header)
|
| elif filter_fn:
|
| filter_fn(line)
|
| kwargs['filter_fn'] = filter_msg
|
| kwargs['call_filter_on_first_line'] = True
|
| # Obviously.
|
| - kwargs['print_stdout'] = True
|
| + kwargs.setdefault('print_stdout', True)
|
| return CheckCallAndFilter(args, **kwargs)
|
|
|
|
|
| @@ -450,7 +452,7 @@ def PathDifference(root, subpath):
|
|
|
| def FindFileUpwards(filename, path=None):
|
| """Search upwards from the a directory (default: current) to find a file.
|
| -
|
| +
|
| Returns nearest upper-level directory with the passed in file.
|
| """
|
| if not path:
|
| @@ -526,7 +528,7 @@ class ExecutionQueue(object):
|
|
|
| Methods of this class are thread safe.
|
| """
|
| - def __init__(self, jobs, progress):
|
| + def __init__(self, jobs, progress, ignore_requirements):
|
| """jobs specifies the number of concurrent tasks to allow. progress is a
|
| Progress instance."""
|
| # Set when a thread is done or a new item is enqueued.
|
| @@ -546,6 +548,8 @@ class ExecutionQueue(object):
|
| if self.progress:
|
| self.progress.update(0)
|
|
|
| + self.ignore_requirements = ignore_requirements
|
| +
|
| def enqueue(self, d):
|
| """Enqueue one Dependency to be executed later once its requirements are
|
| satisfied.
|
| @@ -583,11 +587,8 @@ class ExecutionQueue(object):
|
| # Check for new tasks to start.
|
| for i in xrange(len(self.queued)):
|
| # Verify its requirements.
|
| - for r in self.queued[i].requirements:
|
| - if not r in self.ran:
|
| - # Requirement not met.
|
| - break
|
| - else:
|
| + if (self.ignore_requirements or
|
| + not (set(self.queued[i].requirements) - set(self.ran))):
|
| # Start one work item: all its requirements are satisfied.
|
| self._run_one_task(self.queued.pop(i), args, kwargs)
|
| break
|
|
|