diff --git a/.githooks/pre-commit b/.githooks/pre-commit new file mode 100755 index 000000000..25e4bafd3 --- /dev/null +++ b/.githooks/pre-commit @@ -0,0 +1,43 @@ +#!/bin/sh + +project_folder=$(git rev-parse --show-toplevel) +if git rev-parse --verify HEAD >/dev/null 2>&1 +then + against=HEAD +else + # Initial commit: diff against an empty tree object + against=$(git hash-object -t tree /dev/null) +fi + +# Redirect output to stderr. +exec 1>&2 + +tmpdir=$(mktemp -d repo-XXXXXXXX) +trap "rm -rf $tmpdir" EXIT INT + +modified_files=$(git diff --cached --name-only --diff-filter=AM $against | sed -nE "/.*\.(cpp|cc|cxx|c|h|hpp|lcp)/p") +for file in $modified_files; do + echo "Checking $file..." + + cp $project_folder/.clang-format $project_folder/.clang-tidy $tmpdir + + git checkout-index --prefix="$tmpdir/" -- $file + + echo "Running clang-format..." + $project_folder/tools/git-clang-format $tmpdir/$file + code=$? + + if [ $code -ne 0 ]; then + break + fi + + echo "Running clang-tidy..." + $project_folder/tools/git-clang-tidy $tmpdir/$file + code=$? + + if [ $code -ne 0 ]; then + break + fi +done; + +return $code diff --git a/init b/init index 0ebce1b19..d6388f90c 100755 --- a/init +++ b/init @@ -195,3 +195,9 @@ setup_virtualenv tests/stress setup_virtualenv tests/integration/ldap echo "Done installing dependencies for Memgraph" + +echo "Linking git hooks" +for hook in $(find $DIR/.githooks -type f -printf "%f\n"); do + ln -s -f "$DIR/.githooks/$hook" "$DIR/.git/hooks/$hook" + echo "Added $hook hook" +done; diff --git a/tools/arc-clang-format b/tools/git-clang-format similarity index 87% rename from tools/arc-clang-format rename to tools/git-clang-format index 3d054a58c..59310d3c1 100755 --- a/tools/arc-clang-format +++ b/tools/git-clang-format @@ -11,9 +11,13 @@ data = subprocess.run( ["clang-format", "--output-replacements-xml", sys.argv[1]], stdout=subprocess.PIPE, check=True).stdout.decode( "utf-8").strip().split("\n") +has_error = False for row in data: match = re.match( r"^", row) if match: + has_error = True offset = int(match.group(1)) + int(match.group(2)) print("warning:{}:{}".format(offset, MESSAGE)) + +sys.exit(1 if has_error else 0) diff --git a/tools/arc-clang-tidy b/tools/git-clang-tidy similarity index 100% rename from tools/arc-clang-tidy rename to tools/git-clang-tidy