t/Makefile: add machinery to check correctness of chainlint.sed
The --chain-lint option uses heuristics and knowledge of shell syntax to detect broken &&-chains in subshells by pure textual inspection. Although the heuristics work well, they are still best-guesses and future changes could accidentally break assumptions upon which they are based. To protect against this possibility, tests checking correctness of the linter itself will be added. As preparation, add a new makefile "check-chainlint" target and associated machinery. Signed-off-by: Eric Sunshine <sunshine@sunshineco.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
878f988350
commit
803394459d
1
t/.gitignore
vendored
1
t/.gitignore
vendored
@ -1,3 +1,4 @@
|
||||
/trash directory*
|
||||
/test-results
|
||||
/.prove
|
||||
/chainlinttmp
|
||||
|
25
t/Makefile
25
t/Makefile
@ -18,8 +18,10 @@ TEST_LINT ?= test-lint
|
||||
|
||||
ifdef TEST_OUTPUT_DIRECTORY
|
||||
TEST_RESULTS_DIRECTORY = $(TEST_OUTPUT_DIRECTORY)/test-results
|
||||
CHAINLINTTMP = $(TEST_OUTPUT_DIRECTORY)/chainlinttmp
|
||||
else
|
||||
TEST_RESULTS_DIRECTORY = test-results
|
||||
CHAINLINTTMP = chainlinttmp
|
||||
endif
|
||||
|
||||
# Shell quote;
|
||||
@ -27,14 +29,17 @@ SHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH))
|
||||
TEST_SHELL_PATH_SQ = $(subst ','\'',$(TEST_SHELL_PATH))
|
||||
PERL_PATH_SQ = $(subst ','\'',$(PERL_PATH))
|
||||
TEST_RESULTS_DIRECTORY_SQ = $(subst ','\'',$(TEST_RESULTS_DIRECTORY))
|
||||
CHAINLINTTMP_SQ = $(subst ','\'',$(CHAINLINTTMP))
|
||||
|
||||
T = $(sort $(wildcard t[0-9][0-9][0-9][0-9]-*.sh))
|
||||
TGITWEB = $(sort $(wildcard t95[0-9][0-9]-*.sh))
|
||||
THELPERS = $(sort $(filter-out $(T),$(wildcard *.sh)))
|
||||
CHAINLINTTESTS = $(sort $(patsubst chainlint/%.test,%,$(wildcard chainlint/*.test)))
|
||||
CHAINLINT = sed -f chainlint.sed
|
||||
|
||||
all: $(DEFAULT_TEST_TARGET)
|
||||
|
||||
test: pre-clean $(TEST_LINT)
|
||||
test: pre-clean check-chainlint $(TEST_LINT)
|
||||
$(MAKE) aggregate-results-and-cleanup
|
||||
|
||||
failed:
|
||||
@ -43,7 +48,7 @@ failed:
|
||||
sed -n 's/\.counts$$/.sh/p') && \
|
||||
test -z "$$failed" || $(MAKE) $$failed
|
||||
|
||||
prove: pre-clean $(TEST_LINT)
|
||||
prove: pre-clean check-chainlint $(TEST_LINT)
|
||||
@echo "*** prove ***"; $(PROVE) --exec '$(TEST_SHELL_PATH_SQ)' $(GIT_PROVE_OPTS) $(T) :: $(GIT_TEST_OPTS)
|
||||
$(MAKE) clean-except-prove-cache
|
||||
|
||||
@ -53,13 +58,25 @@ $(T):
|
||||
pre-clean:
|
||||
$(RM) -r '$(TEST_RESULTS_DIRECTORY_SQ)'
|
||||
|
||||
clean-except-prove-cache:
|
||||
clean-except-prove-cache: clean-chainlint
|
||||
$(RM) -r 'trash directory'.* '$(TEST_RESULTS_DIRECTORY_SQ)'
|
||||
$(RM) -r valgrind/bin
|
||||
|
||||
clean: clean-except-prove-cache
|
||||
$(RM) .prove
|
||||
|
||||
clean-chainlint:
|
||||
$(RM) -r '$(CHAINLINTTMP_SQ)'
|
||||
|
||||
check-chainlint:
|
||||
@mkdir -p '$(CHAINLINTTMP_SQ)' && \
|
||||
err=0 && \
|
||||
for i in $(CHAINLINTTESTS); do \
|
||||
$(CHAINLINT) <chainlint/$$i.test | \
|
||||
sed -e '/^# LINT: /d' >'$(CHAINLINTTMP_SQ)'/$$i.actual && \
|
||||
diff -u chainlint/$$i.expect '$(CHAINLINTTMP_SQ)'/$$i.actual || err=1; \
|
||||
done && exit $$err
|
||||
|
||||
test-lint: test-lint-duplicates test-lint-executable test-lint-shell-syntax \
|
||||
test-lint-filenames
|
||||
|
||||
@ -102,4 +119,4 @@ valgrind:
|
||||
perf:
|
||||
$(MAKE) -C perf/ all
|
||||
|
||||
.PHONY: pre-clean $(T) aggregate-results clean valgrind perf
|
||||
.PHONY: pre-clean $(T) aggregate-results clean valgrind perf check-chainlint clean-chainlint
|
||||
|
Loading…
Reference in New Issue
Block a user