man: make output system independent

The current help output might change based on the number of CPU cores
available (since it reflects the dynamic --jobs logic).  This is good
for users running repo locally, but not good for shipping static man
pages.  Hook the help output to have it generate the same output all
the time.

Change-Id: I3098ceddc0ad914b0b8e3b25d660b5a264cb41ee
Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/312882
Reviewed-by: Roger Shimizu <rosh@debian.org>
Reviewed-by: Mike Frysinger <vapier@google.com>
Tested-by: Mike Frysinger <vapier@google.com>
diff --git a/command.py b/command.py
index 4087cab..b972a0b 100644
--- a/command.py
+++ b/command.py
@@ -24,6 +24,10 @@
 import progress
 
 
+# Are we generating man-pages?
+GENERATE_MANPAGES = os.environ.get('_REPO_GENERATE_MANPAGES_') == ' indeed! '
+
+
 # Number of projects to submit to a single worker process at a time.
 # This number represents a tradeoff between the overhead of IPC and finer
 # grained opportunity for parallelism. This particular value was chosen by
@@ -122,10 +126,14 @@
                  help='only show errors')
 
     if self.PARALLEL_JOBS is not None:
+      default = 'based on number of CPU cores'
+      if not GENERATE_MANPAGES:
+        # Only include active cpu count if we aren't generating man pages.
+        default = f'%default; {default}'
       p.add_option(
           '-j', '--jobs',
           type=int, default=self.PARALLEL_JOBS,
-          help='number of jobs to run in parallel (default: %s)' % self.PARALLEL_JOBS)
+          help=f'number of jobs to run in parallel (default: {default})')
 
   def _Options(self, p):
     """Initialize the option parser with subcommand-specific options."""
diff --git a/man/repo-abandon.1 b/man/repo-abandon.1
index fb3160c..b3c0422 100644
--- a/man/repo-abandon.1
+++ b/man/repo-abandon.1
@@ -20,7 +20,8 @@
 show this help message and exit
 .TP
 \fB\-j\fR JOBS, \fB\-\-jobs\fR=\fI\,JOBS\/\fR
-number of jobs to run in parallel (default: 4)
+number of jobs to run in parallel (default: based on
+number of CPU cores)
 .TP
 \fB\-\-all\fR
 delete all branches in all projects
diff --git a/man/repo-branches.1 b/man/repo-branches.1
index 0080e46..7fe0b02 100644
--- a/man/repo-branches.1
+++ b/man/repo-branches.1
@@ -46,7 +46,8 @@
 show this help message and exit
 .TP
 \fB\-j\fR JOBS, \fB\-\-jobs\fR=\fI\,JOBS\/\fR
-number of jobs to run in parallel (default: 4)
+number of jobs to run in parallel (default: based on
+number of CPU cores)
 .SS Logging options:
 .TP
 \fB\-v\fR, \fB\-\-verbose\fR
diff --git a/man/repo-checkout.1 b/man/repo-checkout.1
index 882b4ba..6dd3e6c 100644
--- a/man/repo-checkout.1
+++ b/man/repo-checkout.1
@@ -15,7 +15,8 @@
 show this help message and exit
 .TP
 \fB\-j\fR JOBS, \fB\-\-jobs\fR=\fI\,JOBS\/\fR
-number of jobs to run in parallel (default: 4)
+number of jobs to run in parallel (default: based on
+number of CPU cores)
 .SS Logging options:
 .TP
 \fB\-v\fR, \fB\-\-verbose\fR
diff --git a/man/repo-diff.1 b/man/repo-diff.1
index aff36d2..890f8d2 100644
--- a/man/repo-diff.1
+++ b/man/repo-diff.1
@@ -19,7 +19,8 @@
 show this help message and exit
 .TP
 \fB\-j\fR JOBS, \fB\-\-jobs\fR=\fI\,JOBS\/\fR
-number of jobs to run in parallel (default: 4)
+number of jobs to run in parallel (default: based on
+number of CPU cores)
 .TP
 \fB\-u\fR, \fB\-\-absolute\fR
 paths are relative to the repository root
diff --git a/man/repo-forall.1 b/man/repo-forall.1
index 194f4d2..eb2ad57 100644
--- a/man/repo-forall.1
+++ b/man/repo-forall.1
@@ -17,7 +17,8 @@
 show this help message and exit
 .TP
 \fB\-j\fR JOBS, \fB\-\-jobs\fR=\fI\,JOBS\/\fR
-number of jobs to run in parallel (default: 4)
+number of jobs to run in parallel (default: based on
+number of CPU cores)
 .TP
 \fB\-r\fR, \fB\-\-regex\fR
 execute the command only on projects matching regex or
diff --git a/man/repo-grep.1 b/man/repo-grep.1
index fb515a7..be41058 100644
--- a/man/repo-grep.1
+++ b/man/repo-grep.1
@@ -15,7 +15,8 @@
 show this help message and exit
 .TP
 \fB\-j\fR JOBS, \fB\-\-jobs\fR=\fI\,JOBS\/\fR
-number of jobs to run in parallel (default: 4)
+number of jobs to run in parallel (default: based on
+number of CPU cores)
 .SS Logging options:
 .TP
 \fB\-\-verbose\fR
diff --git a/man/repo-prune.1 b/man/repo-prune.1
index 2479542..bd68a37 100644
--- a/man/repo-prune.1
+++ b/man/repo-prune.1
@@ -15,7 +15,8 @@
 show this help message and exit
 .TP
 \fB\-j\fR JOBS, \fB\-\-jobs\fR=\fI\,JOBS\/\fR
-number of jobs to run in parallel (default: 4)
+number of jobs to run in parallel (default: based on
+number of CPU cores)
 .SS Logging options:
 .TP
 \fB\-v\fR, \fB\-\-verbose\fR
diff --git a/man/repo-smartsync.1 b/man/repo-smartsync.1
index ad98b47..5d93911 100644
--- a/man/repo-smartsync.1
+++ b/man/repo-smartsync.1
@@ -15,7 +15,8 @@
 show this help message and exit
 .TP
 \fB\-j\fR JOBS, \fB\-\-jobs\fR=\fI\,JOBS\/\fR
-number of jobs to run in parallel (default: 1)
+number of jobs to run in parallel (default: based on
+number of CPU cores)
 .TP
 \fB\-\-jobs\-network\fR=\fI\,JOBS\/\fR
 number of network jobs to run in parallel (defaults to
diff --git a/man/repo-start.1 b/man/repo-start.1
index cda3739..b00a31f 100644
--- a/man/repo-start.1
+++ b/man/repo-start.1
@@ -15,7 +15,8 @@
 show this help message and exit
 .TP
 \fB\-j\fR JOBS, \fB\-\-jobs\fR=\fI\,JOBS\/\fR
-number of jobs to run in parallel (default: 4)
+number of jobs to run in parallel (default: based on
+number of CPU cores)
 .TP
 \fB\-\-all\fR
 begin branch in all projects
diff --git a/man/repo-status.1 b/man/repo-status.1
index 6037ae1..fbae2c5 100644
--- a/man/repo-status.1
+++ b/man/repo-status.1
@@ -15,7 +15,8 @@
 show this help message and exit
 .TP
 \fB\-j\fR JOBS, \fB\-\-jobs\fR=\fI\,JOBS\/\fR
-number of jobs to run in parallel (default: 4)
+number of jobs to run in parallel (default: based on
+number of CPU cores)
 .TP
 \fB\-o\fR, \fB\-\-orphans\fR
 include objects in working directory outside of repo
diff --git a/man/repo-sync.1 b/man/repo-sync.1
index 70f7c20..c87c970 100644
--- a/man/repo-sync.1
+++ b/man/repo-sync.1
@@ -15,7 +15,8 @@
 show this help message and exit
 .TP
 \fB\-j\fR JOBS, \fB\-\-jobs\fR=\fI\,JOBS\/\fR
-number of jobs to run in parallel (default: 1)
+number of jobs to run in parallel (default: based on
+number of CPU cores)
 .TP
 \fB\-\-jobs\-network\fR=\fI\,JOBS\/\fR
 number of network jobs to run in parallel (defaults to
diff --git a/man/repo-upload.1 b/man/repo-upload.1
index 6deed04..36a0dac 100644
--- a/man/repo-upload.1
+++ b/man/repo-upload.1
@@ -15,7 +15,8 @@
 show this help message and exit
 .TP
 \fB\-j\fR JOBS, \fB\-\-jobs\fR=\fI\,JOBS\/\fR
-number of jobs to run in parallel (default: 4)
+number of jobs to run in parallel (default: based on
+number of CPU cores)
 .TP
 \fB\-t\fR
 send local branch name to Gerrit Code Review
diff --git a/release/update-manpages b/release/update-manpages
index f841f30..6ef3ec1 100755
--- a/release/update-manpages
+++ b/release/update-manpages
@@ -47,6 +47,11 @@
   if not shutil.which('help2man'):
     sys.exit('Please install help2man to continue.')
 
+  # Let repo know we're generating man pages so it can avoid some dynamic
+  # behavior (like probing active number of CPUs).  We use a weird name &
+  # value to make it less likely for users to set this var themselves.
+  os.environ['_REPO_GENERATE_MANPAGES_'] = ' indeed! '
+
   # "repo branch" is an alias for "repo branches".
   del subcmds.all_commands['branch']
   (MANDIR / 'repo-branch.1').write_text('.so man1/repo-branches.1')