git-cl: simplify squash commandline parsing

We can have --no-squash update the --squash state directly so we don't
have to constantly check two different knobs.  This means opts.squash
is now a tristate: None means load config settings while True/False
means the user has specified a command line option.  This also means
we don't have to detect multiple --squash/--no-squash flags as the
argparse module will take care of coalescing.

Bug: 993518
Test: `git cl upload` uses my ~/.gitconfig
Test: `git cl upload --squash` squashes
Test: `git cl upload --no-squash` doesn't squash
Change-Id: Ib2577db11d3af03c93cb47d8b78b341213720a92
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/1754234
Reviewed-by: Edward Lesmes <ehmaldonado@chromium.org>
Commit-Queue: Mike Frysinger <vapier@chromium.org>
changes/34/1754234/2
Mike Frysinger 6 years ago committed by Commit Bot
parent 30f9664b48
commit a989d55904

@ -2652,14 +2652,9 @@ class _GerritChangelistImpl(_ChangelistCodereviewBase):
def CMDUploadChange(self, options, git_diff_args, custom_cl_base, change):
"""Upload the current branch to Gerrit."""
if options.squash and options.no_squash:
DieWithError('Can only use one of --squash or --no-squash')
if not options.squash and not options.no_squash:
if options.squash is None:
# Load default for user, repo, squash=true, in this order.
options.squash = settings.GetSquashGerritUploads()
elif options.no_squash:
options.squash = False
remote, remote_branch = self.GetRemoteBranch()
branch = GetTargetRef(remote, remote_branch, options.target_branch)
@ -4740,7 +4735,7 @@ def CMDupload(parser, args):
'Default: remote branch head, or master')
parser.add_option('--squash', action='store_true',
help='Squash multiple commits into one')
parser.add_option('--no-squash', action='store_true',
parser.add_option('--no-squash', action='store_false', dest='squash',
help='Don\'t squash multiple commits into one')
parser.add_option('--topic', default=None,
help='Topic to specify when uploading')

Loading…
Cancel
Save