commit 2591440faa2671b52c290879bb3d426eeeec6380
parent 9a402a654a311dc9b326445d12bc0170887a544a
Author: Nick Mathewson <nickm@torproject.org>
Date: Thu, 5 Sep 2019 07:41:58 -0400
Merge remote-tracking branch 'tor-github/pr/1278'
Diffstat:
4 files changed, 76 insertions(+), 16 deletions(-)
diff --git a/Makefile.am b/Makefile.am
@@ -168,6 +168,7 @@ EXTRA_DIST+= \
ReleaseNotes \
scripts/maint/checkIncludes.py \
scripts/maint/checkSpace.pl \
+ scripts/maint/checkShellScripts.sh \
scripts/maint/practracker/README \
scripts/maint/practracker/exceptions.txt \
scripts/maint/practracker/includes.py \
@@ -239,22 +240,7 @@ test: all
$(top_builddir)/src/test/test
shellcheck:
- # Only use shellcheck if it is present
- if command -v shellcheck; then \
- find "$(top_srcdir)" -name "*.sh" -not -path "$(top_srcdir)/src/ext/*" -not -path "$(top_srcdir)/src/rust/registry/*" -exec shellcheck {} +; \
- if [ -d "$(top_srcdir)/scripts/test" ]; then \
- shellcheck $(top_srcdir)/scripts/test/cov-diff $(top_srcdir)/scripts/test/coverage; \
- fi; \
- if [ -e "$(top_srcdir)/contrib/dirauth-tools/nagios-check-tor-authority-cert" ]; then \
- shellcheck "$(top_srcdir)/contrib/dirauth-tools/nagios-check-tor-authority-cert"; \
- fi; \
- if [ -e "$(top_srcdir)/contrib/client-tools/torify" ]; then \
- shellcheck "$(top_srcdir)/contrib/client-tools/torify"; \
- fi; \
- if [ -d "$(top_srcdir)/scripts/git" ]; then \
- shellcheck $(top_srcdir)/scripts/git/*.git-hook; \
- fi; \
- fi
+ $(top_srcdir)/scripts/maint/checkShellScripts.sh
check-local: check-spaces check-changes check-includes check-best-practices shellcheck
diff --git a/changes/ticket30967 b/changes/ticket30967
@@ -0,0 +1,6 @@
+ o Testing:
+ - When checking shell scripts, ignore any user-created directories.
+ Closes ticket 30967.
+ o Minor features (git scripts):
+ - Call the shellcheck script from the pre-commit hook.
+ Closes ticket 30967.
diff --git a/scripts/git/pre-commit.git-hook b/scripts/git/pre-commit.git-hook
@@ -53,3 +53,7 @@ if [ -e "${PT_DIR}/practracker.py" ]; then
fi
fi
fi
+
+if [ -e scripts/maint/checkShellScripts.sh ]; then
+ scripts/maint/checkShellScripts.sh
+fi
diff --git a/scripts/maint/checkShellScripts.sh b/scripts/maint/checkShellScripts.sh
@@ -0,0 +1,64 @@
+#!/usr/bin/env bash
+#
+# Copyright (c) 2019 The Tor Project, Inc.
+# See LICENSE for license information
+#
+# checkShellScripts.sh
+# --------------------
+# If shellcheck is installed, check all the shell scripts that we can fix.
+
+set -e
+
+# Only run this script if shellcheck is installed
+# command echoes the path to shellcheck, which is a useful diagnostic log
+if ! command -v shellcheck; then
+ printf "%s: Install shellcheck to check shell scripts.\\n" "$0"
+ exit 0
+fi
+
+# Some platforms don't have realpath
+if command -v realpath ; then
+ HERE=$(dirname "$(realpath "$0")")
+else
+ HERE=$(dirname "$0")
+ if [ ! -d "$HERE" ]; then
+ HERE=$(dirname "$PWD/$0")
+ fi
+fi
+TOPLEVEL=$(dirname "$(dirname "$HERE")")
+
+# Check we actually have a tor/src directory
+if [ ! -d "$TOPLEVEL/src" ]; then
+ printf "Error: Couldn't find src directory in expected location: %s\\n" \
+ "$TOPLEVEL/src"
+fi
+
+# Check *.sh scripts, but ignore the ones that we can't fix
+find "$TOPLEVEL" \
+ -name "*.sh" \
+ -path "$TOPLEVEL/contrib/*" \
+ -path "$TOPLEVEL/doc/*" \
+ -path "$TOPLEVEL/scripts/*" \
+ -path "$TOPLEVEL/src/*" \
+ -not -path "$TOPLEVEL/src/ext/*" \
+ -not -path "$TOPLEVEL/src/rust/registry/*" \
+ -exec shellcheck {} +
+
+# Check scripts that aren't named *.sh
+if [ -d "$TOPLEVEL/scripts/test" ]; then
+ shellcheck \
+ "$TOPLEVEL/scripts/test/cov-diff" \
+ "$TOPLEVEL/scripts/test/coverage"
+fi
+if [ -e \
+ "$TOPLEVEL/contrib/dirauth-tools/nagios-check-tor-authority-cert" \
+ ]; then
+ shellcheck \
+ "$TOPLEVEL/contrib/dirauth-tools/nagios-check-tor-authority-cert"
+fi
+if [ -e "$TOPLEVEL/contrib/client-tools/torify" ]; then
+ shellcheck "$TOPLEVEL/contrib/client-tools/torify"
+fi
+if [ -d "$TOPLEVEL/scripts/git" ]; then
+ shellcheck "$TOPLEVEL/scripts/git/"*.git-hook
+fi