Changed clang-format-diff.py to output diff by default. Added -i option to apply changes to files instead.

Summary:
"svn diff|clang-format-diff.py" will just output the diff.
Now it's possible to use:
  svn diff|clang-format-diff.py|patch -p0
as an equivalent to:
  svn diff|clang-format-diff.py -i
;)

Reviewers: djasper

Reviewed By: djasper

CC: cfe-commits

Differential Revision: http://llvm-reviews.chandlerc.com/D1840

llvm-svn: 192505
This commit is contained in:
Alexander Kornienko 2013-10-11 21:32:01 +00:00
parent 7bb1344c67
commit 95c009afd9
1 changed files with 22 additions and 3 deletions

View File

@ -17,13 +17,16 @@ This script reads input from a unified diff and reformats all the changed
lines. This is useful to reformat all the lines touched by a specific patch.
Example usage for git users:
git diff -U0 HEAD^ | clang-format-diff.py -p1
git diff -U0 HEAD^ | clang-format-diff.py -p1 -i
"""
import argparse
import difflib
import re
import string
import subprocess
import StringIO
import sys
@ -33,7 +36,11 @@ binary = 'clang-format'
def main():
parser = argparse.ArgumentParser(description=
'Reformat changed lines in diff.')
'Reformat changed lines in diff. Without -i '
'option just output the diff that would be'
'introduced.')
parser.add_argument('-i', action='store_true', default=False,
help='apply edits to files instead of displaying a diff')
parser.add_argument('-p', default=0,
help='strip the smallest prefix containing P slashes')
parser.add_argument(
@ -71,7 +78,9 @@ def main():
# Reformat files containing changes in place.
for filename, lines in lines_by_file.iteritems():
command = [binary, '-i', filename]
command = [binary, filename]
if args.i:
command.append('-i')
command.extend(lines)
if args.style:
command.extend(['-style', args.style])
@ -84,6 +93,16 @@ def main():
if p.returncode != 0:
sys.exit(p.returncode);
if not args.i:
with open(filename) as f:
code = f.readlines()
formatted_code = StringIO.StringIO(stdout).readlines()
diff = difflib.unified_diff(code, formatted_code,
filename, filename,
'(before formatting)', '(after formatting)')
diff_string = string.join(diff, '')
if len(diff_string) > 0:
print diff_string
if __name__ == '__main__':
main()