Add remaining count to run_tests
diff --git a/tools/run_tests/jobset.py b/tools/run_tests/jobset.py
index 88d9502..fb80c8d 100755
--- a/tools/run_tests/jobset.py
+++ b/tools/run_tests/jobset.py
@@ -302,9 +302,13 @@
     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."""
@@ -357,8 +361,9 @@
         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 remaining' % self._remaining
+        message('WAITING', '%d jobs running, %d complete, %d failed%s' % (
+            len(self._running), self._completed, self._failures, rstr))
       if platform.system() == 'Windows':
         time.sleep(0.1)
       else:
@@ -397,6 +402,17 @@
     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,
@@ -410,8 +426,11 @@
               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
+