From cb2e0552f12d09f2928b14e302d36fd5d25d4056 Mon Sep 17 00:00:00 2001 From: Hans Dembinski <hans.dembinski@gmail.com> Date: Thu, 4 Jul 2019 11:36:43 +0200 Subject: [PATCH] fix --- do-clang-format.py | 69 ++++++++++++++++++++++++++++++++++++---------- 1 file changed, 54 insertions(+), 15 deletions(-) diff --git a/do-clang-format.py b/do-clang-format.py index 4141a193d..80381fdf8 100755 --- a/do-clang-format.py +++ b/do-clang-format.py @@ -1,15 +1,54 @@ -#!/bin/bash - -command="clang-format -style=file `find . -iregex '^.*\.\(cc\|h\)$' -not -path './ThirdParty/*'`" - -if [ "$1" == "check" ]; -then - `! ${command} -output-replacements-xml | grep -qc "<replacement "` || \ - { echo "format-check FAILED!"; exit 1; } - echo "Congratulations: format-check succeeded" -elif [ "$1" == "apply" ]; -then - ${command} -i -else - echo "please use: ./do-clang-format.sh [check] or [apply]" -fi +#!/usr/bin/env python3 +""" +Run clang-format with the style file in the CORSIKA repository. + +By default it finds new files and files with modifications with respect to the current master and prints +the filenames which need clang-formatting. Returns 1 if there are files with need modifications and 0 otherwise. +""" +import argparse +import subprocess as subp +import os +import sys + +parser = argparse.ArgumentParser(description=__doc__) +parser.add_argument('--apply', action="store_true", help="Apply clang-format to files which need changes.") +parser.add_argument("--all", action="store_true", help="Check all files below current path instead of new/modified.") + +args = parser.parse_args() + +filelist = [] +if args.all: + for dirpath, dirnames, filenames in os.walk("."): + if "ThirdParty" in dirpath: + continue + for f in filenames: + if f.endswith(".h") or f.endswith(".cc"): + filename = os.path.join(dirpath, f) + if not os.path.islink(filename): + filelist.append(filename) + if not filelist: + raise SystemExit("Error: You specified --all, but file list is empty. Did you run from the build directory?") +else: + cmd = "git diff master --name-status" + for line in subp.check_output(cmd, shell=True).decode("utf8").strip().split("\n"): + if line.startswith("D"): continue + filelist.append(line[1:].lstrip()) + + cmd = "git ls-files --exclude-standard --others" + filelist += subp.check_output(cmd, shell=True).decode("utf8").strip().split("\n") + filelist = [x for x in filelist if "ThirdParty" not in x and (x.endswith(".h") or x.endswith(".cc"))] + +cmd = "clang-format -style=file" +if args.apply: + for filename in filelist: + subp.check_call(cmd.split() + ["-i", filename]) +else: + # only print files which need formatting + files_need_formatting = 0 + for filename in filelist: + a = open(filename, "rb").read() + b = subp.check_output(cmd.split() + [filename]) + if a != b: + files_need_formatting += 1 + print(filename) + sys.exit(1 if files_need_formatting > 0 else 0) -- GitLab