add --no-current-branch option to invert --current-branch

For most commands, this is more about providing a way to undo earlier
command line options (e.g. `repo info -c --no-current-branch`) which
can be helpful for scripting & automation.  But for the sync command,
this is helpful to undo the setting that exists in the manifest itself.

With this in place, tweak the sync current_branch_only logic to only
apply the manifest settings when the user hasn't specified a command
line option.

Bug: https://crbug.com/gerrit/12401
Change-Id: I21e2384624680cc740d1b5d1e49c50589d2fe6a0
Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/304903
Reviewed-by: Raman Tenneti <rtenneti@google.com>
Tested-by: Mike Frysinger <vapier@google.com>
diff --git a/project.py b/project.py
index f05ce66..ab28f2c 100644
--- a/project.py
+++ b/project.py
@@ -1041,7 +1041,7 @@
                        verbose=False,
                        output_redir=None,
                        is_new=None,
-                       current_branch_only=False,
+                       current_branch_only=None,
                        force_sync=False,
                        clone_bundle=True,
                        tags=True,
@@ -1116,7 +1116,7 @@
             and self._ApplyCloneBundle(initial=is_new, quiet=quiet, verbose=verbose)):
       is_new = False
 
-    if not current_branch_only:
+    if current_branch_only is None:
       if self.sync_c:
         current_branch_only = True
       elif not self.manifest._loaded:
diff --git a/repo b/repo
index b3f3673..4068b12 100755
--- a/repo
+++ b/repo
@@ -324,6 +324,9 @@
   group.add_option(*cbr_opts,
                    dest='current_branch_only', action='store_true',
                    help='fetch only current manifest branch from server')
+  group.add_option('--no-current-branch',
+                   dest='current_branch_only', action='store_false',
+                   help='fetch all manifest branches from server')
   group.add_option('--no-tags',
                    dest='tags', default=True, action='store_false',
                    help="don't fetch tags in the manifest")
diff --git a/subcmds/info.py b/subcmds/info.py
index 8e017ed..2be5610 100644
--- a/subcmds/info.py
+++ b/subcmds/info.py
@@ -39,6 +39,9 @@
     p.add_option('-c', '--current-branch',
                  dest="current_branch", action="store_true",
                  help="consider only checked out branches")
+    p.add_option('--no-current-branch',
+                 dest='current_branch', action='store_false',
+                 help='consider all local branches')
     # Turn this into a warning & remove this someday.
     p.add_option('-b',
                  dest='current_branch', action='store_true',
diff --git a/subcmds/overview.py b/subcmds/overview.py
index 4f62f94..202a5eb 100644
--- a/subcmds/overview.py
+++ b/subcmds/overview.py
@@ -37,6 +37,9 @@
     p.add_option('-c', '--current-branch',
                  dest="current_branch", action="store_true",
                  help="Consider only checked out branches")
+    p.add_option('--no-current-branch',
+                 dest='current_branch', action='store_false',
+                 help='consider all local branches')
     # Turn this into a warning & remove this someday.
     p.add_option('-b',
                  dest='current_branch', action='store_true',
diff --git a/subcmds/sync.py b/subcmds/sync.py
index 9f8de9e..f06c61c 100644
--- a/subcmds/sync.py
+++ b/subcmds/sync.py
@@ -213,6 +213,9 @@
     p.add_option('-c', '--current-branch',
                  dest='current_branch_only', action='store_true',
                  help='fetch only current branch from server')
+    p.add_option('--no-current-branch',
+                 dest='current_branch_only', action='store_false',
+                 help='fetch all branches from server')
     p.add_option('-m', '--manifest-name',
                  dest='manifest_name',
                  help='temporary manifest to use for this sync', metavar='NAME.xml')
diff --git a/subcmds/upload.py b/subcmds/upload.py
index 57434b1..c497d87 100644
--- a/subcmds/upload.py
+++ b/subcmds/upload.py
@@ -174,6 +174,9 @@
     p.add_option('-c', '--current-branch',
                  dest='current_branch', action='store_true',
                  help='Upload current git branch.')
+    p.add_option('--no-current-branch',
+                 dest='current_branch', action='store_false',
+                 help='Upload all git branches.')
     # Turn this into a warning & remove this someday.
     p.add_option('--cbr',
                  dest='current_branch', action='store_true',