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