diff options
Diffstat (limited to 'tools/run_tests/jobset.py')
-rwxr-xr-x | tools/run_tests/jobset.py | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/tools/run_tests/jobset.py b/tools/run_tests/jobset.py index 01739be27c..fdbddf82ee 100755 --- a/tools/run_tests/jobset.py +++ b/tools/run_tests/jobset.py @@ -317,9 +317,13 @@ class Jobset(object): self._hashes = {} self._add_env = add_env self.resultset = {} - + self._remaining = None + + def set_remaining(self, remaining): + self._remaining = remaining + def get_num_failures(self): - return self._failures + return self._failures def start(self, spec): """Start a job. Return True on success, False on failure.""" @@ -372,8 +376,9 @@ class Jobset(object): self._running.remove(job) if dead: return if (not self._travis): - message('WAITING', '%d jobs running, %d complete, %d failed' % ( - len(self._running), self._completed, self._failures)) + rstr = '' if self._remaining is None else '%d queued, ' % self._remaining + message('WAITING', '%s%d jobs running, %d complete, %d failed' % ( + rstr, len(self._running), self._completed, self._failures)) if platform_string() == 'windows': time.sleep(0.1) else: @@ -412,6 +417,17 @@ class NoCache(object): pass +def tag_remaining(xs): + staging = [] + for x in xs: + staging.append(x) + if len(staging) > 1000: + yield (staging.pop(0), None) + n = len(staging) + for i, x in enumerate(staging): + yield (x, n - i - 1) + + def run(cmdlines, check_cancelled=_never_cancelled, maxjobs=None, @@ -425,8 +441,11 @@ def run(cmdlines, maxjobs if maxjobs is not None else _DEFAULT_MAX_JOBS, newline_on_success, travis, stop_on_failure, add_env, cache if cache is not None else NoCache()) - for cmdline in cmdlines: + for cmdline, remaining in tag_remaining(cmdlines): if not js.start(cmdline): break - js.finish() + if remaining is not None: + js.set_remaining(remaining) + js.finish() return js.get_num_failures(), js.resultset + |