sync: Show number of running fetch jobs

Last of the recent `repo sync` UX changes. Show number of fetch jobs eg:
"Fetching:  3% (8/251) 0:03 | 8 jobs | 0:01 chromiumos/overlays/chrom.."

Bug: https://crbug.com/gerrit/11293
Change-Id: I1b3dcf3e56ae6731c6c6cb73cfce069b2f374b69
Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/374920
Reviewed-by: Josip Sokcevic <sokcevic@google.com>
Commit-Queue: Gavin Mak <gavinmak@google.com>
Tested-by: Gavin Mak <gavinmak@google.com>
Reviewed-by: Joanna Wang <jojwang@google.com>
diff --git a/progress.py b/progress.py
index 6686ad4..69c9592 100644
--- a/progress.py
+++ b/progress.py
@@ -76,6 +76,10 @@
     return ret
 
 
+def jobs_str(total):
+    return f"{total} job{'s' if total > 1 else ''}"
+
+
 class Progress(object):
     def __init__(
         self,
@@ -170,10 +174,7 @@
         else:
             p = (100 * self._done) / self._total
             if self._show_jobs:
-                jobs = "[%d job%s] " % (
-                    self._active,
-                    "s" if self._active > 1 else "",
-                )
+                jobs = f"[{jobs_str(self._active)}] "
             else:
                 jobs = ""
             if self._show_elapsed:
diff --git a/subcmds/sync.py b/subcmds/sync.py
index da9918b..a44ed5b 100644
--- a/subcmds/sync.py
+++ b/subcmds/sync.py
@@ -66,7 +66,7 @@
 from error import RepoChangedException, GitError
 import platform_utils
 from project import SyncBuffer
-from progress import Progress, elapsed_str
+from progress import Progress, elapsed_str, jobs_str
 from repo_trace import Trace
 import ssh
 from wrapper import Wrapper
@@ -673,7 +673,7 @@
     def _FetchInitChild(cls, ssh_proxy):
         cls.ssh_proxy = ssh_proxy
 
-    def _GetLongestSyncMessage(self):
+    def _GetSyncProgressMessage(self):
         if len(self._sync_dict) == 0:
             return None
 
@@ -685,7 +685,8 @@
                 earliest_proj = project
 
         elapsed = time.time() - earliest_time
-        return f"{elapsed_str(elapsed)} {earliest_proj}"
+        jobs = jobs_str(len(self._sync_dict))
+        return f"{jobs} | {elapsed_str(elapsed)} {earliest_proj}"
 
     def _Fetch(self, projects, opt, err_event, ssh_proxy):
         ret = True
@@ -707,7 +708,7 @@
 
         def _MonitorSyncLoop():
             while True:
-                pm.update(inc=0, msg=self._GetLongestSyncMessage())
+                pm.update(inc=0, msg=self._GetSyncProgressMessage())
                 if sync_event.wait(timeout=1):
                     return