[tor-commits] [tor/master] scripts/git: Only check modified files in existing git hook checks

teor at torproject.org teor at torproject.org
Fri Oct 25 06:15:24 UTC 2019


commit b4b316631d10daf7ff22d42724c9bfb7381f4265
Author: teor <teor at torproject.org>
Date:   Thu Oct 24 13:59:02 2019 +1000

    scripts/git: Only check modified files in existing git hook checks
    
    Part of 31919.
---
 scripts/git/pre-commit.git-hook | 115 +++++++++++++++++++---------------------
 scripts/git/pre-push.git-hook   |  33 +++++++-----
 2 files changed, 77 insertions(+), 71 deletions(-)

diff --git a/scripts/git/pre-commit.git-hook b/scripts/git/pre-commit.git-hook
index 7437bc085..2e476c310 100755
--- a/scripts/git/pre-commit.git-hook
+++ b/scripts/git/pre-commit.git-hook
@@ -13,31 +13,61 @@ cd "$workdir" || exit 1
 
 set -e
 
+if [ $# -eq 0 ]; then
+    # When called in pre-commit, check the files modified in this commit
+    CHECK_FILTER="git diff --cached --name-only --diff-filter=ACMR"
+    # Use the appropriate owned tor source list to filter the changed files
+    if [ -d src/lib ]; then
+        # This is the layout in 0.3.5
+        CHECK_FILES="$($CHECK_FILTER \
+                           src/lib/*/*.[ch] \
+                           src/core/*/*.[ch] \
+                           src/feature/*/*.[ch] \
+                           src/app/*/*.[ch] \
+                           src/test/*.[ch] \
+                           src/test/*/*.[ch] \
+                           src/tools/*.[ch] \
+                      )"
+    elif [ -d src/common ]; then
+        # This was the layout before 0.3.5
+        CHECK_FILES="$($CHECK_FILTER \
+                           src/common/*/*.[ch] \
+                           src/or/*/*.[ch] \
+                           src/test/*.[ch] \
+                           src/test/*/*.[ch] \
+                           src/tools/*.[ch]
+                      )"
+    fi
+else
+    # When called in pre-push, concatenate the argument array
+    # Fails on special characters in file names
+    CHECK_FILES="$*"
+fi
+
+## General File Checks
+
 if [ -n "$(ls ./changes/)" ]; then
     python scripts/maint/lintChanges.py ./changes/*
 fi
 
-if [ -d src/lib ]; then
-    # This is the layout in 0.3.5
-    # There are two copies of this list in this file
-    perl scripts/maint/checkSpace.pl -C \
-         src/lib/*/*.[ch] \
-         src/core/*/*.[ch] \
-         src/feature/*/*.[ch] \
-         src/app/*/*.[ch] \
-         src/test/*.[ch] \
-         src/test/*/*.[ch] \
-         src/tools/*.[ch]
-elif [ -d src/common ]; then
-    # This was the layout before 0.3.5
-    perl scripts/maint/checkSpace.pl -C \
-         src/common/*/*.[ch] \
-         src/or/*/*.[ch] \
-         src/test/*.[ch] \
-         src/test/*/*.[ch] \
-         src/tools/*.[ch]
+if [ -e scripts/maint/checkShellScripts.sh ]; then
+    scripts/maint/checkShellScripts.sh
+fi
+
+if [ ! "$CHECK_FILES" ]; then
+    echo "No modified tor-owned source files, skipping further checks"
+    exit 0
 fi
 
+## Owned Source File Checks
+
+printf "Modified tor-owned source files:\n%s\n" "$CHECK_FILES"
+
+# We want word splitting here, because file names are space separated
+# shellcheck disable=SC2086
+perl scripts/maint/checkSpace.pl -C \
+     $CHECK_FILES
+
 if test -e scripts/maint/practracker/includes.py; then
     python scripts/maint/practracker/includes.py
 fi
@@ -55,46 +85,13 @@ if [ -e "${PT_DIR}/practracker.py" ]; then
     fi
 fi
 
-if [ -e scripts/maint/checkShellScripts.sh ]; then
-    scripts/maint/checkShellScripts.sh
-fi
-
 if [ -e scripts/coccinelle/check_cocci_parse.sh ]; then
 
-    if [ $# -eq 0 ]; then
-        # When called in pre-commit, check the files modified in this commit
-        CHECK_FILTER="git diff --cached --name-only --diff-filter=ACMR"
-        # Use the owned tor source layout from 0.3.5 to filter the changed
-        # files.
-        # (There are two copies of this list in this file.)
-        CHECK_FILES="$($CHECK_FILTER \
-                          src/lib/*/*.[ch] \
-                          src/core/*/*.[ch] \
-                          src/feature/*/*.[ch] \
-                          src/app/*/*.[ch] \
-                          src/test/*.[ch] \
-                          src/test/*/*.[ch] \
-                          src/tools/*.[ch] \
-                      )"
-    fi
-
-    if [ "${CHECK_FILES:-$*}" ]; then
-        printf "Modified files:\n%s\n" "${CHECK_FILES:-$*}"
-
-        # Run a verbose cocci parse check on the changed files
-        # (spatch is slow, so we don't want to check all the files.)
-        if [ $# -eq 0 ]; then
-            # pre-commit: use $CHECK_FILES, fails on spaces in file names
-            #
-            # We want word splitting here, because file names are space
-            # separated
-            # shellcheck disable=SC2086
-            VERBOSE=1 scripts/coccinelle/check_cocci_parse.sh \
-                      $CHECK_FILES
-        else
-            # pre-push: use "$@" to preserve spaces in arguments
-            VERBOSE=1 scripts/coccinelle/check_cocci_parse.sh \
-                      "$@"
-        fi
-    fi
+    # Run a verbose cocci parse check on the changed files
+    # (spatch is slow, so we don't want to check all the files.)
+    #
+    # We want word splitting here, because file names are space separated
+    # shellcheck disable=SC2086
+    VERBOSE=1 scripts/coccinelle/check_cocci_parse.sh \
+              $CHECK_FILES
 fi
diff --git a/scripts/git/pre-push.git-hook b/scripts/git/pre-push.git-hook
index 6a44e93dd..1b88f1d5d 100755
--- a/scripts/git/pre-push.git-hook
+++ b/scripts/git/pre-push.git-hook
@@ -58,12 +58,13 @@ do
 			range="$remote_sha..$local_sha"
 		fi
 
-        # Call the pre-commit hook for the common checks, if it is executable.
-        # Use the owned tor source layout from 0.3.5 to filter the changed
-        # files.
-        if [ -x "$workdir/scripts/git/pre-commit.git-hook" ]; then
-            CHECK_FILES="$(git diff --name-only --diff-filter=ACMR \
-                               "$range" \
+        # Call the pre-commit hook for the common checks, if it is executable
+        # Only check the files newly modified in this branch
+        CHECK_FILTER="git diff --name-only --diff-filter=ACMR $range"
+        # Use the appropriate owned tor source list to filter the changed files
+        if [ -d src/lib ]; then
+            # This is the layout in 0.3.5
+            CHECK_FILES="$($CHECK_FILTER \
                                src/lib/*/*.[ch] \
                                src/core/*/*.[ch] \
                                src/feature/*/*.[ch] \
@@ -72,13 +73,21 @@ do
                                src/test/*/*.[ch] \
                                src/tools/*.[ch] \
                           )"
+        elif [ -d src/common ]; then
+            # This was the layout before 0.3.5
+            CHECK_FILES="$($CHECK_FILTER \
+                               src/common/*/*.[ch] \
+                               src/or/*/*.[ch] \
+                               src/test/*.[ch] \
+                               src/test/*/*.[ch] \
+                               src/tools/*.[ch]
+                          )"
+        fi
 
-            # We want word splitting here, because file names are space
-            # separated
-            # shellcheck disable=SC2086
-            if ! "$workdir/"scripts/git/pre-commit.git-hook $CHECK_FILES; then
-                exit 1
-            fi
+        # We want word splitting here, because file names are space separated
+        # shellcheck disable=SC2086
+        if ! "$workdir/"scripts/git/pre-commit.git-hook $CHECK_FILES; then
+            exit 1
         fi
 
         if [[ "$remote_name" != "$upstream_name" ]]; then





More information about the tor-commits mailing list