Chromium Code Reviews| Index: git_cl.py |
| diff --git a/git_cl.py b/git_cl.py |
| index b34edcf38df385ee4be9566372e16259c696c6d4..892554dc86159989be543e72dfe60a2d5ad2dca8 100755 |
| --- a/git_cl.py |
| +++ b/git_cl.py |
| @@ -1952,24 +1952,57 @@ def CMDformat(parser, args): |
| if args: |
| parser.error('Unrecognized args: %s' % ' '.join(args)) |
| + # Generate diff for the current branch's changes. |
| + diff_cmd = ['diff', '--no-ext-diff'] |
| if opts.full: |
| - cmd = ['diff', '--name-only', '--'] + ['.*' + ext for ext in CLANG_EXTS] |
| - files = RunGit(cmd).split() |
| + # Only list the names of modified files. |
| + diff_cmd.append('--name-only') |
| + else: |
| + # Only generate context-less patches. |
| + diff_cmd.append('-U0') |
| + |
| + # Grab the merge-base commit, i.e. the upstream commit of the current |
| + # branch when it was created or the last time it was rebased. This is |
| + # to cover the case where the user may have called "git fetch origin", |
| + # moving the origin branch to a newer commit, but hasn't rebased yet. |
| + upstream_commit = None |
| + cl = Changelist() |
| + if cl: |
|
M-A Ruel
2013/05/17 15:13:03
It's an object so it'll always be not false.
digit1
2013/05/17 15:21:08
Doh :)
|
| + upstream_commit = RunGit(['merge-base', 'HEAD', cl.GetUpstreamBranch()]) |
| + upstream_commit = upstream_commit.splitlines() |
|
M-A Ruel
2013/05/17 15:13:03
strip(), not splitlines
digit1
2013/05/17 15:21:08
Done.
|
| + if len(upstream_commit) != 1: |
|
M-A Ruel
2013/05/17 15:13:03
if not upstream_commit:
DieWithError
digit1
2013/05/17 15:21:08
Done.
|
| + upstream_commit = None |
| + else: |
| + upstream_commit = upstream_commit[0].strip() |
| + |
| + if not upstream_commit: |
| + print >> sys.stderr, \ |
| + 'Could not find base commit for this branch. Are you in detached state?' |
| + return 2 |
| + |
| + diff_cmd.append(upstream_commit) |
| + |
| + # Handle source file filtering. |
| + diff_cmd.append('--') |
| + diff_cmd += ['*' + ext for ext in CLANG_EXTS] |
| + diff_output = RunGit(diff_cmd) |
| + |
| + if opts.full: |
| + # diff_output is a list of files to send to clang-format. |
| + files = diff_output.splitlines() |
| if not files: |
| print "Nothing to format." |
| return 0 |
| - RunCommand(['clang-format', '-i'] + files) |
| + RunCommand(['clang-format', '-i', '-style', 'Chromium'] + files) |
| else: |
| + # diff_output is a patch to send to clang-format-diff.py |
| cfd_path = os.path.join('/usr', 'lib', 'clang-format', |
| 'clang-format-diff.py') |
| if not os.path.exists(cfd_path): |
| print >> sys.stderr, 'Could not find clang-format-diff at %s.' % cfd_path |
| return 2 |
| - cmd = ['diff', '-U0', '@{u}', '--'] + ['.*' + ext for ext in CLANG_EXTS] |
| - diff = RunGit(cmd) |
| - cmd = [sys.executable, '/usr/lib/clang-format/clang-format-diff.py', |
| - '-style', 'Chromium'] |
| - RunCommand(cmd, stdin=diff) |
| + cmd = [sys.executable, cfd_path, '-style', 'Chromium'] |
| + RunCommand(cmd, stdin=diff_output) |
| return 0 |