Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(197)

Unified Diff: git_cl.py

Issue 1156743008: Add experimental support for python in 'git cl format' (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « git_cache.py ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: git_cl.py
diff --git a/git_cl.py b/git_cl.py
index ce365419b279a84dd43970244e43942b09515262..26f04fd8c8289ba838902f272f11346a7ef626c3 100755
--- a/git_cl.py
+++ b/git_cl.py
@@ -3183,12 +3183,14 @@ def BuildGitDiffCmd(diff_type, upstream_commit, args, extensions):
@subcommand.usage('[files or directories to diff]')
def CMDformat(parser, args):
- """Runs clang-format on the diff."""
+ """Runs auto-formatting tools (clang-format etc.) on the diff."""
CLANG_EXTS = ['.cc', '.cpp', '.h', '.mm', '.proto', '.java']
parser.add_option('--full', action='store_true',
help='Reformat the full content of all touched files')
parser.add_option('--dry-run', action='store_true',
help='Don\'t modify any file on disk.')
+ parser.add_option('--python', action='store_true',
+ help='Format python code with yapf (experimental).')
parser.add_option('--diff', action='store_true',
help='Print diff to stdout rather than modifying files.')
opts, args = parser.parse_args(args)
@@ -3216,12 +3218,12 @@ def CMDformat(parser, args):
if opts.full:
# Only list the names of modified files.
- clang_diff_type = '--name-only'
+ diff_type = '--name-only'
else:
# Only generate context-less patches.
- clang_diff_type = '-U0'
+ diff_type = '-U0'
- diff_cmd = BuildGitDiffCmd(clang_diff_type, upstream_commit, args, CLANG_EXTS)
+ diff_cmd = BuildGitDiffCmd(diff_type, upstream_commit, args, CLANG_EXTS)
diff_output = RunGit(diff_cmd)
top_dir = os.path.normpath(
@@ -3267,6 +3269,29 @@ def CMDformat(parser, args):
if opts.dry_run and len(stdout) > 0:
return_value = 2
+ # Similar code to above, but using yapf on .py files rather than clang-format
+ # on C/C++ files
+ if opts.python:
+ diff_cmd = BuildGitDiffCmd(diff_type, upstream_commit, args, ['.py'])
+ diff_output = RunGit(diff_cmd)
+ yapf_tool = gclient_utils.FindExecutable('yapf')
+ if yapf_tool is None:
+ DieWithError('yapf not found in PATH')
+
+ if opts.full:
+ files = diff_output.splitlines()
+ if files:
+ cmd = [yapf_tool]
+ if not opts.dry_run and not opts.diff:
+ cmd.append('-i')
+ stdout = RunCommand(cmd + files, cwd=top_dir)
+ if opts.diff:
+ sys.stdout.write(stdout)
+ else:
+ # TODO(sbc): yapf --lines mode still has some issues.
+ # https://github.com/google/yapf/issues/154
+ DieWithError('--python currently only works with --full')
+
# Build a diff command that only operates on dart files. dart's formatter
# does not have the nice property of only operating on modified chunks, so
# hard code full.
« no previous file with comments | « git_cache.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698