trivial: make contrib/reformat-code.py easier to use

1. Let the user know what commit it's reformatting in stdout
2. Add a debug mode to show the command that was launched
3. Fix output of errors
4. Allow the user to specify starting commit in an argument
This commit is contained in:
Mario Limonciello 2021-07-29 20:17:03 -05:00
parent 269c1ea1d3
commit 8b679f7320
2 changed files with 45 additions and 14 deletions

View File

@ -58,5 +58,5 @@ from the PackageKit Coding Style.
`./contrib/reformat-code.py` can be used in order to get automated `./contrib/reformat-code.py` can be used in order to get automated
formatting. Calling the script without arguments formats the current formatting. Calling the script without arguments formats the current
patch while passing filenames will do whole-file formatting on the patch while passing commits will do formatting on everything changed since that
specified files. commit.

View File

@ -8,6 +8,7 @@
import os import os
import sys import sys
import subprocess import subprocess
import argparse
CLANG_DIFF_FORMATTERS = [ CLANG_DIFF_FORMATTERS = [
"clang-format-diff-11", "clang-format-diff-11",
@ -16,6 +17,20 @@ CLANG_DIFF_FORMATTERS = [
] ]
def parse_args():
parser = argparse.ArgumentParser(
description="Reformat C code to match project style",
epilog="Call with no argument to reformat uncommitted code.",
)
parser.add_argument(
"commit", nargs="*", default="", help="Reformat all changes since this commit"
)
parser.add_argument(
"--debug", action="store_true", help="Display all launched commands"
)
return parser.parse_args()
def select_clang_version(formatters): def select_clang_version(formatters):
for formatter in formatters: for formatter in formatters:
try: try:
@ -32,28 +47,44 @@ def select_clang_version(formatters):
## Entry Point ## ## Entry Point ##
if __name__ == "__main__": if __name__ == "__main__":
args = parse_args()
base = os.getenv("GITHUB_BASE_REF") base = os.getenv("GITHUB_BASE_REF")
if base: if base:
base = "origin/%s" % base base = "origin/%s" % base
else: else:
if args.commit:
base = args.commit[0]
else:
base = "HEAD"
cmd = ["git", "describe", base]
if args.debug:
print(cmd)
ret = subprocess.run(cmd, capture_output=True)
if ret.returncode:
if args.debug:
print(ret.stderr)
base = "HEAD" base = "HEAD"
print("Reformatting code against %s" % base)
formatter = select_clang_version(CLANG_DIFF_FORMATTERS) formatter = select_clang_version(CLANG_DIFF_FORMATTERS)
ret = subprocess.run( cmd = ["git", "diff", "-U0", base]
["git", "diff", "-U0", base], capture_output=True, check=True, text=True if args.debug:
) print(cmd)
ret = subprocess.run(cmd, capture_output=True, text=True)
if ret.returncode: if ret.returncode:
print("Failed to run git diff: %s" % ret.stderr) print("Failed to run %s\n%s" % (cmd, ret.stderr.strip()))
sys.exit(1) sys.exit(1)
ret = subprocess.run( cmd = [formatter, "-p1"]
[formatter, "-p1"], input=ret.stdout, capture_output=True, text=True if args.debug:
) print(cmd)
ret = subprocess.run(cmd, input=ret.stdout, capture_output=True, text=True)
if ret.returncode: if ret.returncode:
print("Failed to run formatter: %s % ret.stderr") print("Failed to run %s\n%s" % (cmd, ret.stderr.strip()))
sys.exit(1) sys.exit(1)
ret = subprocess.run( cmd = ["patch", "-p0"]
["patch", "-p0"], input=ret.stdout, capture_output=True, text=True if args.debug:
) print(cmd)
ret = subprocess.run(cmd, input=ret.stdout, capture_output=True, text=True)
if ret.returncode: if ret.returncode:
print("Failed to run patch: %s" % ret.stderr) print("Failed to run %s\n%s" % (cmd, ret.stderr.strip()))
sys.exit(1) sys.exit(1)
sys.exit(0) sys.exit(0)