Skip to content

Commit c2cafd3

Browse files
dschogitster
authored andcommitted
t/Makefile: ensure that paths are valid on platforms we care
Some pathnames that are okay on ext4 and on HFS+ cannot be checked out on Windows. Tests that want to see operations on such paths on filesystems that support them must do so behind appropriate test prerequisites, and must not include them in the source tree (instead they should create them when they run). Otherwise, the source tree cannot even be checked out. Make sure that double-quotes, asterisk, colon, greater/less-than, question-mark, backslash, tab, vertical-bar, as well as any non-ASCII characters never appear in the pathnames with a new test-lint-* target as part of a `make test`. To that end, we call `git ls-files` (ensuring that the paths are quoted properly), relying on the fact that paths containing non-ASCII characters are quoted within double-quotes. In case that the source code does not actually live in a Git repository (e.g. when extracted from a .zip file), or that the `git` executable cannot be executed, we simply ignore the error for now; In that case, our trusty Continuous Integration will be the last line of defense and catch any problematic file name. Noticed when a topic wanted to add a pathname with '>' in it. A check like this will prevent a similar problems from happening in the future. Signed-off-by: Johannes Schindelin <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent e0c1cea commit c2cafd3

File tree

1 file changed

+10
-1
lines changed

1 file changed

+10
-1
lines changed

t/Makefile

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@ clean-except-prove-cache:
5252
clean: clean-except-prove-cache
5353
$(RM) .prove
5454

55-
test-lint: test-lint-duplicates test-lint-executable test-lint-shell-syntax
55+
test-lint: test-lint-duplicates test-lint-executable test-lint-shell-syntax \
56+
test-lint-filenames
5657

5758
test-lint-duplicates:
5859
@dups=`echo $(T) | tr ' ' '\n' | sed 's/-.*//' | sort | uniq -d` && \
@@ -67,6 +68,14 @@ test-lint-executable:
6768
test-lint-shell-syntax:
6869
@'$(PERL_PATH_SQ)' check-non-portable-shell.pl $(T) $(THELPERS)
6970

71+
test-lint-filenames:
72+
@# We do *not* pass a glob to ls-files but use grep instead, to catch
73+
@# non-ASCII characters (which are quoted within double-quotes)
74+
@bad="$$(git -c core.quotepath=true ls-files 2>/dev/null | \
75+
grep '["*:<>?\\|]')"; \
76+
test -z "$$bad" || { \
77+
echo >&2 "non-portable file name(s): $$bad"; exit 1; }
78+
7079
aggregate-results-and-cleanup: $(T)
7180
$(MAKE) aggregate-results
7281
$(MAKE) clean

0 commit comments

Comments
 (0)