From ea2e330e43c182dc16b0111ebc69ee5a71ee4ce1 Mon Sep 17 00:00:00 2001 From: Gavin Mak Date: Sat, 11 Mar 2023 06:46:20 +0000 Subject: Format codebase with black and check formatting in CQ Apply rules set by https://gerrit-review.googlesource.com/c/git-repo/+/362954/ across the codebase and fix any lingering errors caught by flake8. Also check black formatting in run_tests (and CQ). Bug: b/267675342 Change-Id: I972d77649dac351150dcfeb1cd1ad0ea2efc1956 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/363474 Reviewed-by: Mike Frysinger Tested-by: Gavin Mak Commit-Queue: Gavin Mak --- subcmds/rebase.py | 313 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 180 insertions(+), 133 deletions(-) (limited to 'subcmds/rebase.py') diff --git a/subcmds/rebase.py b/subcmds/rebase.py index 3d1a63e4..dc4f5805 100644 --- a/subcmds/rebase.py +++ b/subcmds/rebase.py @@ -20,146 +20,193 @@ from git_command import GitCommand class RebaseColoring(Coloring): - def __init__(self, config): - Coloring.__init__(self, config, 'rebase') - self.project = self.printer('project', attr='bold') - self.fail = self.printer('fail', fg='red') + def __init__(self, config): + Coloring.__init__(self, config, "rebase") + self.project = self.printer("project", attr="bold") + self.fail = self.printer("fail", fg="red") class Rebase(Command): - COMMON = True - helpSummary = "Rebase local branches on upstream branch" - helpUsage = """ + COMMON = True + helpSummary = "Rebase local branches on upstream branch" + helpUsage = """ %prog {[...] | -i ...} """ - helpDescription = """ + helpDescription = """ '%prog' uses git rebase to move local changes in the current topic branch to the HEAD of the upstream history, useful when you have made commits in a topic branch but need to incorporate new upstream changes "underneath" them. """ - def _Options(self, p): - g = p.get_option_group('--quiet') - g.add_option('-i', '--interactive', - dest="interactive", action="store_true", - help="interactive rebase (single project only)") - - p.add_option('--fail-fast', - dest='fail_fast', action='store_true', - help='stop rebasing after first error is hit') - p.add_option('-f', '--force-rebase', - dest='force_rebase', action='store_true', - help='pass --force-rebase to git rebase') - p.add_option('--no-ff', - dest='ff', default=True, action='store_false', - help='pass --no-ff to git rebase') - p.add_option('--autosquash', - dest='autosquash', action='store_true', - help='pass --autosquash to git rebase') - p.add_option('--whitespace', - dest='whitespace', action='store', metavar='WS', - help='pass --whitespace to git rebase') - p.add_option('--auto-stash', - dest='auto_stash', action='store_true', - help='stash local modifications before starting') - p.add_option('-m', '--onto-manifest', - dest='onto_manifest', action='store_true', - help='rebase onto the manifest version instead of upstream ' - 'HEAD (this helps to make sure the local tree stays ' - 'consistent if you previously synced to a manifest)') - - def Execute(self, opt, args): - all_projects = self.GetProjects(args, all_manifests=not opt.this_manifest_only) - one_project = len(all_projects) == 1 - - if opt.interactive and not one_project: - print('error: interactive rebase not supported with multiple projects', - file=sys.stderr) - if len(args) == 1: - print('note: project %s is mapped to more than one path' % (args[0],), - file=sys.stderr) - return 1 - - # Setup the common git rebase args that we use for all projects. - common_args = ['rebase'] - if opt.whitespace: - common_args.append('--whitespace=%s' % opt.whitespace) - if opt.quiet: - common_args.append('--quiet') - if opt.force_rebase: - common_args.append('--force-rebase') - if not opt.ff: - common_args.append('--no-ff') - if opt.autosquash: - common_args.append('--autosquash') - if opt.interactive: - common_args.append('-i') - - config = self.manifest.manifestProject.config - out = RebaseColoring(config) - out.redirect(sys.stdout) - _RelPath = lambda p: p.RelPath(local=opt.this_manifest_only) - - ret = 0 - for project in all_projects: - if ret and opt.fail_fast: - break - - cb = project.CurrentBranch - if not cb: - if one_project: - print("error: project %s has a detached HEAD" % _RelPath(project), - file=sys.stderr) - return 1 - # ignore branches with detatched HEADs - continue - - upbranch = project.GetBranch(cb) - if not upbranch.LocalMerge: - if one_project: - print("error: project %s does not track any remote branches" - % _RelPath(project), file=sys.stderr) - return 1 - # ignore branches without remotes - continue - - args = common_args[:] - if opt.onto_manifest: - args.append('--onto') - args.append(project.revisionExpr) - - args.append(upbranch.LocalMerge) - - out.project('project %s: rebasing %s -> %s', - _RelPath(project), cb, upbranch.LocalMerge) - out.nl() - out.flush() - - needs_stash = False - if opt.auto_stash: - stash_args = ["update-index", "--refresh", "-q"] - - if GitCommand(project, stash_args).Wait() != 0: - needs_stash = True - # Dirty index, requires stash... - stash_args = ["stash"] - - if GitCommand(project, stash_args).Wait() != 0: - ret += 1 - continue - - if GitCommand(project, args).Wait() != 0: - ret += 1 - continue - - if needs_stash: - stash_args.append('pop') - stash_args.append('--quiet') - if GitCommand(project, stash_args).Wait() != 0: - ret += 1 - - if ret: - out.fail('%i projects had errors', ret) - out.nl() - - return ret + def _Options(self, p): + g = p.get_option_group("--quiet") + g.add_option( + "-i", + "--interactive", + dest="interactive", + action="store_true", + help="interactive rebase (single project only)", + ) + + p.add_option( + "--fail-fast", + dest="fail_fast", + action="store_true", + help="stop rebasing after first error is hit", + ) + p.add_option( + "-f", + "--force-rebase", + dest="force_rebase", + action="store_true", + help="pass --force-rebase to git rebase", + ) + p.add_option( + "--no-ff", + dest="ff", + default=True, + action="store_false", + help="pass --no-ff to git rebase", + ) + p.add_option( + "--autosquash", + dest="autosquash", + action="store_true", + help="pass --autosquash to git rebase", + ) + p.add_option( + "--whitespace", + dest="whitespace", + action="store", + metavar="WS", + help="pass --whitespace to git rebase", + ) + p.add_option( + "--auto-stash", + dest="auto_stash", + action="store_true", + help="stash local modifications before starting", + ) + p.add_option( + "-m", + "--onto-manifest", + dest="onto_manifest", + action="store_true", + help="rebase onto the manifest version instead of upstream " + "HEAD (this helps to make sure the local tree stays " + "consistent if you previously synced to a manifest)", + ) + + def Execute(self, opt, args): + all_projects = self.GetProjects( + args, all_manifests=not opt.this_manifest_only + ) + one_project = len(all_projects) == 1 + + if opt.interactive and not one_project: + print( + "error: interactive rebase not supported with multiple " + "projects", + file=sys.stderr, + ) + if len(args) == 1: + print( + "note: project %s is mapped to more than one path" + % (args[0],), + file=sys.stderr, + ) + return 1 + + # Setup the common git rebase args that we use for all projects. + common_args = ["rebase"] + if opt.whitespace: + common_args.append("--whitespace=%s" % opt.whitespace) + if opt.quiet: + common_args.append("--quiet") + if opt.force_rebase: + common_args.append("--force-rebase") + if not opt.ff: + common_args.append("--no-ff") + if opt.autosquash: + common_args.append("--autosquash") + if opt.interactive: + common_args.append("-i") + + config = self.manifest.manifestProject.config + out = RebaseColoring(config) + out.redirect(sys.stdout) + _RelPath = lambda p: p.RelPath(local=opt.this_manifest_only) + + ret = 0 + for project in all_projects: + if ret and opt.fail_fast: + break + + cb = project.CurrentBranch + if not cb: + if one_project: + print( + "error: project %s has a detached HEAD" + % _RelPath(project), + file=sys.stderr, + ) + return 1 + # Ignore branches with detached HEADs. + continue + + upbranch = project.GetBranch(cb) + if not upbranch.LocalMerge: + if one_project: + print( + "error: project %s does not track any remote branches" + % _RelPath(project), + file=sys.stderr, + ) + return 1 + # Ignore branches without remotes. + continue + + args = common_args[:] + if opt.onto_manifest: + args.append("--onto") + args.append(project.revisionExpr) + + args.append(upbranch.LocalMerge) + + out.project( + "project %s: rebasing %s -> %s", + _RelPath(project), + cb, + upbranch.LocalMerge, + ) + out.nl() + out.flush() + + needs_stash = False + if opt.auto_stash: + stash_args = ["update-index", "--refresh", "-q"] + + if GitCommand(project, stash_args).Wait() != 0: + needs_stash = True + # Dirty index, requires stash... + stash_args = ["stash"] + + if GitCommand(project, stash_args).Wait() != 0: + ret += 1 + continue + + if GitCommand(project, args).Wait() != 0: + ret += 1 + continue + + if needs_stash: + stash_args.append("pop") + stash_args.append("--quiet") + if GitCommand(project, stash_args).Wait() != 0: + ret += 1 + + if ret: + out.fail("%i projects had errors", ret) + out.nl() + + return ret -- cgit v1.2.3-54-g00ecf