Junio C Hamano [off-list ref] writes:
Good thinking.
Some tests may have to be skipped on platforms that cannot express
certain paths, but even then they shouldn't ship a file with
pathname that cannot even be checked out (they should instead create
and use such a path, protected behind filesystem specific test
prerequisite).
quoted
+test-lint-filenames:
+ @illegal="$$(git ls-files | grep '["*:<>?\\|]')"; \
This pattern must exclude questionables on either NTFS or HFS+; it
is ironic that it is not even sufficient to limit ourselves to the
Portable Character Set [*1*], but such is life.
By the way, doesn't ls-files take pathspec glob, saving one extra
process to run grep?
master$ git ls-files '*["*:<>?\\|]*'
pu$ git ls-files '*["*:<>?\\|]*'
t/t4013/diff.diff_--diff-line-prefix=-->_master_master^_side
One more thing you may want to exclude is HT. Here is a suggested
reroll. I reworded to avoid a subjective "truly platform-independent",
which is not what we intend to aim for anyway (we only try to support
the platforms we care about).
-- >8 --
From: Johannes Schindelin <redacted>
Date: Mon, 15 Aug 2016 16:08:41 +0200
Subject: [PATCH] t/Makefile: make sure that paths can be checked out 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 be even checked out.
Make sure that double-quotes, asterisk, colon, greater/less-than,
question-mark, backslash, tab and vertical-bar never appears in the
pathnames with a new test-lint-* target as part of a `make test`.
Noticed when a topic wanted to add a pathname with '>' in it. A
check like this will prevent a similar problems from happening.
Signed-off-by: Johannes Schindelin <redacted>
Signed-off-by: Junio C Hamano <redacted>
---
t/Makefile | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/t/Makefile b/t/Makefile
index 18e2b28..d4b2a50 100644
--- a/t/Makefile
+++ b/t/Makefile
@@ -52,7 +52,8 @@ clean-except-prove-cache:
clean: clean-except-prove-cache
$(RM) .prove
-test-lint: test-lint-duplicates test-lint-executable test-lint-shell-syntax
+test-lint: test-lint-duplicates test-lint-executable test-lint-shell-syntax \
+ test-lint-filenames
test-lint-duplicates:
@dups=`echo $(T) | tr ' ' '\n' | sed 's/-.*//' | sort | uniq -d` && \
@@ -67,6 +68,11 @@ test-lint-executable:
test-lint-shell-syntax:
@'$(PERL_PATH_SQ)' check-non-portable-shell.pl $(T) $(THELPERS)
+test-lint-filenames:
+ @bad=$$(git ls-files '*[ "*:<>?\\|]*'); \
+ test -z "$$bad" || { \
+ echo >&2 "do not use non-portable file name(s): $$bad"; exit 1; }
+
aggregate-results-and-cleanup: $(T)
$(MAKE) aggregate-results
$(MAKE) clean--
2.10.0-rc0-132-gce76bc9
Hi Junio,
On Mon, 15 Aug 2016, Junio C Hamano wrote:
Junio C Hamano [off-list ref] writes:
quoted
quoted
+test-lint-filenames:
+ @illegal="$$(git ls-files | grep '["*:<>?\\|]')"; \
This pattern must exclude questionables on either NTFS or HFS+; it
is ironic that it is not even sufficient to limit ourselves to the
Portable Character Set [*1*], but such is life.
By the way, doesn't ls-files take pathspec glob, saving one extra
process to run grep?
I specifically did not do that, sorry for omitting the rationale from the
commit message. The reason why I have that grep is so that the backslash
can also catch non-ASCII characters, such as "Hellö-Jüniö".
One more thing you may want to exclude is HT. Here is a suggested
reroll. I reworded to avoid a subjective "truly platform-independent",
which is not what we intend to aim for anyway (we only try to support
the platforms we care about).
Unfortunately, this version (actually, the version of `pu`, which I
assume is identical) does not work correctly:
$ make test-lint
do not use non-portable file name(s): Git-SVN/00compile.t
Git-SVN/Utils/add_path_to_url.t
Git-SVN/Utils/can_compress.t
Git-SVN/Utils/canonicalize_url.t
Git-SVN/Utils/collapse_dotdot.t
Git-SVN/Utils/fatal.t
Git-SVN/Utils/join_paths.t
diff-lib/COPYING
diff-lib/README
helper/.gitignore
helper/test-chmtime.c
helper/test-config.c
helper/test-ctype.c
helper/test-date.c
helper/test-delta.c
helper/test-dump-cache-tree.c
helper/test-dump-split-index.c
helper/test-dump-untracked-cache.c
helper/test-dump-watchman.c
helper/test-fake-ssh.c
helper/test-genrandom.c
helper/test-hashmap.c
helper/test-index-version.c
helper/test-line-buffer.c
helper/test-match-trees.c
helper/test-mergesort.c
helper/test-mktemp.c
helper/test-parse-options.c
helper/test-path-utils.c
helper/test-prio-queue.c
helper/test-read-cache.c
helper/test-regex.c
helper/test-revision-walking.c
helper/test-run-command.c
helper/test-scrap-cache-tree.c
helper/test-sha1-array.c
helper/test-sha1.c
helper/test-sha1.sh
helper/test-sigchain.c
helper/test-string-list.c
helper/test-submodule-config.c
helper/test-subprocess.c
helper/test-svn-fe.c
helper/test-urlmatch-normalization.c
helper/test-wildmatch.c
lib-gpg/keyring.gpg
lib-gpg/ownertrust
lib-httpd/apache.conf
lib-httpd/broken-smart-http.sh
lib-httpd/error.sh
lib-httpd/passwd
lib-httpd/ssl.cnf
perf/.gitignore
perf/Makefile
perf/README
perf/aggregate.perl
perf/min_time.perl
perf/p0000-perf-lib-sanity.sh
perf/p0001-rev-list.sh
perf/p0002-read-cache.sh
perf/p3400-rebase.sh
perf/p3404-rebase-interactive.sh
perf/p4000-diff-algorithms.sh
perf/p4001-diff-no-index.sh
perf/p4211-line-log.sh
perf/p5302-pack-index.sh
perf/p5303-many-packs.sh
perf/p5310-pack-bitmaps.sh
perf/p7000-filter-branch.sh
perf/p7300-clean.sh
perf/p7810-grep.sh
perf/perf-lib.sh
perf/run
t0110/README
t0110/url-1
t0110/url-10
t0110/url-11
t0110/url-2
t0110/url-3
t0110/url-4
t0110/url-5
t0110/url-6
t0110/url-7
t0110/url-8
t0110/url-9
t0200/test.c
t0200/test.perl
t0200/test.sh
t0202/test.pl
t1509/excludes
t1509/prepare-chroot.sh
t3900/1-UTF-8.txt
t3900/2-UTF-8.txt
t3900/ISO-2022-JP.txt
t3900/ISO8859-1.txt
t3900/UTF-16.txt
t3900/eucJP.txt
t4013/diff.config_format.subjectprefix_DIFFERENT_PREFIX
t4013/diff.diff-tree_--cc_--patch-with-stat_--summary_master
t4013/diff.diff-tree_--cc_--patch-with-stat_--summary_side
t4013/diff.diff-tree_--cc_--patch-with-stat_master
t4013/diff.diff-tree_--cc_--stat_--summary_master
t4013/diff.diff-tree_--cc_--stat_--summary_side
t4013/diff.diff-tree_--cc_--stat_master
t4013/diff.diff-tree_--cc_master
t4013/diff.diff-tree_--patch-with-raw_initial
t4013/diff.diff-tree_--patch-with-stat_initial
t4013/diff.diff-tree_--pretty=oneline_--patch-with-raw_initial
t4013/diff.diff-tree_--pretty=oneline_--patch-with-stat_initial
t4013/diff.diff-tree_--pretty=oneline_--root_--patch-with-raw_initial
t4013/diff.diff-tree_--pretty=oneline_--root_--patch-with-stat_initial
t4013/diff.diff-tree_--pretty=oneline_--root_-p_initial
t4013/diff.diff-tree_--pretty=oneline_--root_initial
t4013/diff.diff-tree_--pretty=oneline_-p_initial
t4013/diff.diff-tree_--pretty=oneline_initial
t4013/diff.diff-tree_--pretty_--patch-with-raw_initial
t4013/diff.diff-tree_--pretty_--patch-with-stat_initial
t4013/diff.diff-tree_--pretty_--patch-with-stat_side
t4013/diff.diff-tree_--pretty_--root_--patch-with-raw_initial
t4013/diff.diff-tree_--pretty_--root_--patch-with-stat_initial
t4013/diff.diff-tree_--pretty_--root_--stat_--summary_initial
t4013/diff.diff-tree_--pretty_--root_--stat_initial
t4013/diff.diff-tree_--pretty_--root_--summary_-r_initial
t4013/diff.diff-tree_--pretty_--root_--summary_initial
t4013/diff.diff-tree_--pretty_--root_-p_initial
t4013/diff.diff-tree_--pretty_--root_initial
t4013/diff.diff-tree_--pretty_--stat_--summary_initial
t4013/diff.diff-tree_--pretty_--stat_initial
t4013/diff.diff-tree_--pretty_--summary_initial
t4013/diff.diff-tree_--pretty_-p_initial
t4013/diff.diff-tree_--pretty_-p_side
t4013/diff.diff-tree_--pretty_initial
t4013/diff.diff-tree_--pretty_side
t4013/diff.diff-tree_--root_--abbrev_initial
t4013/diff.diff-tree_--root_--patch-with-raw_initial
t4013/diff.diff-tree_--root_--patch-with-stat_initial
t4013/diff.diff-tree_--root_-p_initial
t4013/diff.diff-tree_--root_-r_--abbrev=4_initial
t4013/diff.diff-tree_--root_-r_--abbrev_initial
t4013/diff.diff-tree_--root_-r_initial
t4013/diff.diff-tree_--root_initial
t4013/diff.diff-tree_-c_--abbrev_master
t4013/diff.diff-tree_-c_--stat_--summary_master
t4013/diff.diff-tree_-c_--stat_--summary_side
t4013/diff.diff-tree_-c_--stat_master
t4013/diff.diff-tree_-c_master
t4013/diff.diff-tree_-p_-m_master
t4013/diff.diff-tree_-p_initial
t4013/diff.diff-tree_-p_master
t4013/diff.diff-tree_-r_--abbrev=4_initial
t4013/diff.diff-tree_-r_--abbrev_initial
t4013/diff.diff-tree_-r_initial
t4013/diff.diff-tree_initial
t4013/diff.diff-tree_master
t4013/diff.diff_--abbrev_initial..side
t4013/diff.diff_--cached
t4013/diff.diff_--cached_--_file0
t4013/diff.diff_--dirstat-by-file_initial_rearrange
t4013/diff.diff_--dirstat_initial_rearrange
t4013/diff.diff_--dirstat_master~1_master~2
t4013/diff.diff_--name-status_dir2_dir
t4013/diff.diff_--no-index_--name-status_--_dir2_dir
t4013/diff.diff_--no-index_--name-status_dir2_dir
t4013/diff.diff_--no-index_dir_dir3
t4013/diff.diff_--patch-with-raw_-r_initial..side
t4013/diff.diff_--patch-with-raw_initial..side
t4013/diff.diff_--patch-with-stat_-r_initial..side
t4013/diff.diff_--patch-with-stat_initial..side
t4013/diff.diff_--stat_initial..side
t4013/diff.diff_-r_--stat_initial..side
t4013/diff.diff_-r_initial..side
t4013/diff.diff_initial..side
t4013/diff.diff_master_master^_side
t4013/diff.format-patch_--attach_--stdout_--suffix=.diff_initial..side
t4013/diff.format-patch_--attach_--stdout_initial..master
t4013/diff.format-patch_--attach_--stdout_initial..master^
t4013/diff.format-patch_--attach_--stdout_initial..side
t4013/diff.format-patch_--inline_--stdout_--numbered-files_initial..master
t4013/diff.format-patch_--inline_--stdout_--subject-prefix=TESTCASE_initial..master
t4013/diff.format-patch_--inline_--stdout_initial..master
t4013/diff.format-patch_--inline_--stdout_initial..master^
t4013/diff.format-patch_--inline_--stdout_initial..master^^
t4013/diff.format-patch_--inline_--stdout_initial..side
t4013/diff.format-patch_--stdout_--cover-letter_-n_initial..master^
t4013/diff.format-patch_--stdout_--no-numbered_initial..master
t4013/diff.format-patch_--stdout_--numbered_initial..master
t4013/diff.format-patch_--stdout_initial..master
t4013/diff.format-patch_--stdout_initial..master^
t4013/diff.format-patch_--stdout_initial..side
t4013/diff.log_--decorate=full_--all
t4013/diff.log_--decorate_--all
t4013/diff.log_--patch-with-stat_--summary_master_--_dir_
t4013/diff.log_--patch-with-stat_master
t4013/diff.log_--patch-with-stat_master_--_dir_
t4013/diff.log_--root_--cc_--patch-with-stat_--summary_master
t4013/diff.log_--root_--patch-with-stat_--summary_master
t4013/diff.log_--root_--patch-with-stat_master
t4013/diff.log_--root_-c_--patch-with-stat_--summary_master
t4013/diff.log_--root_-p_master
t4013/diff.log_--root_master
t4013/diff.log_-GF_-p_--pickaxe-all_master
t4013/diff.log_-GF_-p_master
t4013/diff.log_-GF_master
t4013/diff.log_-SF_-p_master
t4013/diff.log_-SF_master
t4013/diff.log_-SF_master_--max-count=0
t4013/diff.log_-SF_master_--max-count=1
t4013/diff.log_-SF_master_--max-count=2
t4013/diff.log_-S_F_master
t4013/diff.log_-m_-p_--first-parent_master
t4013/diff.log_-m_-p_master
t4013/diff.log_-p_--first-parent_master
t4013/diff.log_-p_master
t4013/diff.log_master
t4013/diff.rev-list_--children_HEAD
t4013/diff.rev-list_--parents_HEAD
t4013/diff.show_--first-parent_master
t4013/diff.show_--patch-with-raw_side
t4013/diff.show_--patch-with-stat_--summary_side
t4013/diff.show_--patch-with-stat_side
t4013/diff.show_--root_initial
t4013/diff.show_--stat_--summary_side
t4013/diff.show_--stat_side
t4013/diff.show_-c_master
t4013/diff.show_-m_master
t4013/diff.show_initial
t4013/diff.show_master
t4013/diff.show_side
t4013/diff.whatchanged_--patch-with-stat_--summary_master_--_dir_
t4013/diff.whatchanged_--patch-with-stat_master
t4013/diff.whatchanged_--patch-with-stat_master_--_dir_
t4013/diff.whatchanged_--root_--cc_--patch-with-stat_--summary_master
t4013/diff.whatchanged_--root_--patch-with-stat_--summary_master
t4013/diff.whatchanged_--root_--patch-with-stat_master
t4013/diff.whatchanged_--root_-c_--patch-with-stat_--summary_master
t4013/diff.whatchanged_--root_-p_master
t4013/diff.whatchanged_--root_master
t4013/diff.whatchanged_-SF_-p_master
t4013/diff.whatchanged_-SF_master
t4013/diff.whatchanged_-p_master
t4013/diff.whatchanged_master
t4018/README
t4018/cpp-c++-function
t4018/cpp-class-constructor
t4018/cpp-class-constructor-mem-init
t4018/cpp-class-definition
t4018/cpp-class-definition-derived
t4018/cpp-class-destructor
t4018/cpp-function-returning-global-type
t4018/cpp-function-returning-nested
t4018/cpp-function-returning-pointer
t4018/cpp-function-returning-reference
t4018/cpp-gnu-style-function
t4018/cpp-namespace-definition
t4018/cpp-operator-definition
t4018/cpp-skip-access-specifiers
t4018/cpp-skip-comment-block
t4018/cpp-skip-labels
t4018/cpp-struct-definition
t4018/cpp-struct-single-line
t4018/cpp-template-function-definition
t4018/cpp-union-definition
t4018/cpp-void-c-function
t4018/css-brace-in-col-1
t4018/css-colon-eol
t4018/css-colon-selector
t4018/css-common
t4018/css-long-selector-list
t4018/css-prop-sans-indent
t4018/css-short-selector-list
t4018/css-trailing-space
t4018/custom1-pattern
t4018/custom2-match-to-end-of-line
t4018/custom3-alternation-in-pattern
t4018/fountain-scene
t4018/java-class-member-function
t4018/perl-skip-end-of-heredoc
t4018/perl-skip-forward-decl
t4018/perl-skip-sub-in-pod
t4018/perl-sub-definition
t4018/perl-sub-definition-kr-brace
t4020/diff.NUL
t4034/ada/expect
t4034/ada/post
t4034/ada/pre
t4034/bibtex/expect
t4034/bibtex/post
t4034/bibtex/pre
t4034/cpp/expect
t4034/cpp/post
t4034/cpp/pre
t4034/csharp/expect
t4034/csharp/post
t4034/csharp/pre
t4034/css/expect
t4034/css/post
t4034/css/pre
t4034/fortran/expect
t4034/fortran/post
t4034/fortran/pre
t4034/html/expect
t4034/html/post
t4034/html/pre
t4034/java/expect
t4034/java/post
t4034/java/pre
t4034/matlab/expect
t4034/matlab/post
t4034/matlab/pre
t4034/objc/expect
t4034/objc/post
t4034/objc/pre
t4034/pascal/expect
t4034/pascal/post
t4034/pascal/pre
t4034/perl/expect
t4034/perl/post
t4034/perl/pre
t4034/php/expect
t4034/php/post
t4034/php/pre
t4034/python/expect
t4034/python/post
t4034/python/pre
t4034/ruby/expect
t4034/ruby/post
t4034/ruby/pre
t4034/tex/expect
t4034/tex/post
t4034/tex/pre
t4051/appended1.c
t4051/appended2.c
t4051/dummy.c
t4051/hello.c
t4051/includes.c
t4100/t-apply-1.expect
t4100/t-apply-1.patch
t4100/t-apply-2.expect
t4100/t-apply-2.patch
t4100/t-apply-3.expect
t4100/t-apply-3.patch
t4100/t-apply-4.expect
t4100/t-apply-4.patch
t4100/t-apply-5.expect
t4100/t-apply-5.patch
t4100/t-apply-6.expect
t4100/t-apply-6.patch
t4100/t-apply-7.expect
t4100/t-apply-7.patch
t4100/t-apply-8.expect
t4100/t-apply-8.patch
t4100/t-apply-9.expect
t4100/t-apply-9.patch
t4101/diff.0-1
t4101/diff.0-2
t4101/diff.0-3
t4101/diff.1-0
t4101/diff.1-2
t4101/diff.1-3
t4101/diff.2-0
t4101/diff.2-1
t4101/diff.2-3
t4101/diff.3-0
t4101/diff.3-1
t4101/diff.3-2
t4109/expect-1
t4109/expect-2
t4109/expect-3
t4109/patch1.patch
t4109/patch2.patch
t4109/patch3.patch
t4109/patch4.patch
t4110/expect
t4110/patch1.patch
t4110/patch2.patch
t4110/patch3.patch
t4110/patch4.patch
t4110/patch5.patch
t4135/.gitignore
t4135/add-plain.diff
t4135/add-with backslash.diff
t4135/add-with quote.diff
t4135/add-with spaces.diff
t4135/add-with tab.diff
t4135/damaged-tz.diff
t4135/damaged.diff
t4135/diff-plain.diff
t4135/diff-with backslash.diff
t4135/diff-with quote.diff
t4135/diff-with spaces.diff
t4135/diff-with tab.diff
t4135/funny-tz.diff
t4135/git-plain.diff
t4135/git-with backslash.diff
t4135/git-with quote.diff
t4135/git-with spaces.diff
t4135/git-with tab.diff
t4135/make-patches
t4211/expect.beginning-of-file
t4211/expect.end-of-file
t4211/expect.move-support-f
t4211/expect.multiple
t4211/expect.multiple-overlapping
t4211/expect.multiple-superset
t4211/expect.parallel-change-f-to-main
t4211/expect.simple-f
t4211/expect.simple-f-to-main
t4211/expect.simple-main
t4211/expect.simple-main-to-end
t4211/expect.two-ranges
t4211/expect.vanishes-early
t4211/history.export
t4252/am-test-1-1
t4252/am-test-1-2
t4252/am-test-2-1
t4252/am-test-2-2
t4252/am-test-3-1
t4252/am-test-3-2
t4252/am-test-4-1
t4252/am-test-4-2
t4252/am-test-5-1
t4252/am-test-5-2
t4252/am-test-6-1
t4252/file-1-0
t4252/file-2-0
t5000/19f9c8273ec45a8938e6999cb59b3ff66739902a
t5000/huge-and-future.tar
t5000/pax.tar
t5003/infozip-symlinks.zip
t5004/empty-with-pax-header.tar
t5004/empty.zip
t5100/.gitattributes
t5100/0001mboxrd
t5100/0002mboxrd
t5100/embed-from.expect
t5100/embed-from.in
t5100/empty
t5100/info-from.expect
t5100/info-from.in
t5100/info0001
t5100/info0002
t5100/info0003
t5100/info0004
t5100/info0005
t5100/info0006
t5100/info0007
t5100/info0008
t5100/info0009
t5100/info0010
t5100/info0011
t5100/info0012
t5100/info0012--message-id
t5100/info0013
t5100/info0014
t5100/info0014--scissors
t5100/info0015
t5100/info0015--no-inbody-headers
t5100/info0016
t5100/info0016--no-inbody-headers
t5100/info0017
t5100/msg0001
t5100/msg0002
t5100/msg0003
t5100/msg0004
t5100/msg0005
t5100/msg0006
t5100/msg0007
t5100/msg0008
t5100/msg0009
t5100/msg0010
t5100/msg0011
t5100/msg0012
t5100/msg0012--message-id
t5100/msg0013
t5100/msg0014
t5100/msg0014--scissors
t5100/msg0015
t5100/msg0015--no-inbody-headers
t5100/msg0016
t5100/msg0016--no-inbody-headers
t5100/msg0017
t5100/nul-b64.expect
t5100/nul-b64.in
t5100/nul-plain
t5100/patch0001
t5100/patch0002
t5100/patch0003
t5100/patch0004
t5100/patch0005
t5100/patch0006
t5100/patch0007
t5100/patch0008
t5100/patch0009
t5100/patch0010
t5100/patch0011
t5100/patch0012
t5100/patch0012--message-id
t5100/patch0013
t5100/patch0014
t5100/patch0014--scissors
t5100/patch0015
t5100/patch0015--no-inbody-headers
t5100/patch0016
t5100/patch0016--no-inbody-headers
t5100/patch0017
t5100/quoted-from.expect
t5100/quoted-from.in
t5100/rfc2047-info-0001
t5100/rfc2047-info-0002
t5100/rfc2047-info-0003
t5100/rfc2047-info-0004
t5100/rfc2047-info-0005
t5100/rfc2047-info-0006
t5100/rfc2047-info-0007
t5100/rfc2047-info-0008
t5100/rfc2047-info-0009
t5100/rfc2047-info-0010
t5100/rfc2047-info-0011
t5100/rfc2047-samples.mbox
t5100/sample.mbox
t5100/sample.mboxrd
t5515/fetch.br-branches-default
t5515/fetch.br-branches-default-merge
t5515/fetch.br-branches-default-merge_branches-default
t5515/fetch.br-branches-default-octopus
t5515/fetch.br-branches-default-octopus_branches-default
t5515/fetch.br-branches-default_branches-default
t5515/fetch.br-branches-one
t5515/fetch.br-branches-one-merge
t5515/fetch.br-branches-one-merge_branches-one
t5515/fetch.br-branches-one-octopus
t5515/fetch.br-branches-one-octopus_branches-one
t5515/fetch.br-branches-one_branches-one
t5515/fetch.br-config-explicit
t5515/fetch.br-config-explicit-merge
t5515/fetch.br-config-explicit-merge_config-explicit
t5515/fetch.br-config-explicit-octopus
t5515/fetch.br-config-explicit-octopus_config-explicit
t5515/fetch.br-config-explicit_config-explicit
t5515/fetch.br-config-glob
t5515/fetch.br-config-glob-merge
t5515/fetch.br-config-glob-merge_config-glob
t5515/fetch.br-config-glob-octopus
t5515/fetch.br-config-glob-octopus_config-glob
t5515/fetch.br-config-glob_config-glob
t5515/fetch.br-remote-explicit
t5515/fetch.br-remote-explicit-merge
t5515/fetch.br-remote-explicit-merge_remote-explicit
t5515/fetch.br-remote-explicit-octopus
t5515/fetch.br-remote-explicit-octopus_remote-explicit
t5515/fetch.br-remote-explicit_remote-explicit
t5515/fetch.br-remote-glob
t5515/fetch.br-remote-glob-merge
t5515/fetch.br-remote-glob-merge_remote-glob
t5515/fetch.br-remote-glob-octopus
t5515/fetch.br-remote-glob-octopus_remote-glob
t5515/fetch.br-remote-glob_remote-glob
t5515/fetch.br-unconfig
t5515/fetch.br-unconfig_--tags_.._.git
t5515/fetch.br-unconfig_.._.git
t5515/fetch.br-unconfig_.._.git_one
t5515/fetch.br-unconfig_.._.git_one_tag_tag-one_tag_tag-three-file
t5515/fetch.br-unconfig_.._.git_one_two
t5515/fetch.br-unconfig_.._.git_tag_tag-one-tree_tag_tag-three-file
t5515/fetch.br-unconfig_.._.git_tag_tag-one_tag_tag-three
t5515/fetch.br-unconfig_branches-default
t5515/fetch.br-unconfig_branches-one
t5515/fetch.br-unconfig_config-explicit
t5515/fetch.br-unconfig_config-glob
t5515/fetch.br-unconfig_remote-explicit
t5515/fetch.br-unconfig_remote-glob
t5515/fetch.master
t5515/fetch.master_--tags_.._.git
t5515/fetch.master_.._.git
t5515/fetch.master_.._.git_one
t5515/fetch.master_.._.git_one_tag_tag-one_tag_tag-three-file
t5515/fetch.master_.._.git_one_two
t5515/fetch.master_.._.git_tag_tag-one-tree_tag_tag-three-file
t5515/fetch.master_.._.git_tag_tag-one_tag_tag-three
t5515/fetch.master_branches-default
t5515/fetch.master_branches-one
t5515/fetch.master_config-explicit
t5515/fetch.master_config-glob
t5515/fetch.master_remote-explicit
t5515/fetch.master_remote-glob
t5515/refs.br-branches-default
t5515/refs.br-branches-default-merge
t5515/refs.br-branches-default-merge_branches-default
t5515/refs.br-branches-default-octopus
t5515/refs.br-branches-default-octopus_branches-default
t5515/refs.br-branches-default_branches-default
t5515/refs.br-branches-one
t5515/refs.br-branches-one-merge
t5515/refs.br-branches-one-merge_branches-one
t5515/refs.br-branches-one-octopus
t5515/refs.br-branches-one-octopus_branches-one
t5515/refs.br-branches-one_branches-one
t5515/refs.br-config-explicit
t5515/refs.br-config-explicit-merge
t5515/refs.br-config-explicit-merge_config-explicit
t5515/refs.br-config-explicit-octopus
t5515/refs.br-config-explicit-octopus_config-explicit
t5515/refs.br-config-explicit_config-explicit
t5515/refs.br-config-glob
t5515/refs.br-config-glob-merge
t5515/refs.br-config-glob-merge_config-glob
t5515/refs.br-config-glob-octopus
t5515/refs.br-config-glob-octopus_config-glob
t5515/refs.br-config-glob_config-glob
t5515/refs.br-remote-explicit
t5515/refs.br-remote-explicit-merge
t5515/refs.br-remote-explicit-merge_remote-explicit
t5515/refs.br-remote-explicit-octopus
t5515/refs.br-remote-explicit-octopus_remote-explicit
t5515/refs.br-remote-explicit_remote-explicit
t5515/refs.br-remote-glob
t5515/refs.br-remote-glob-merge
t5515/refs.br-remote-glob-merge_remote-glob
t5515/refs.br-remote-glob-octopus
t5515/refs.br-remote-glob-octopus_remote-glob
t5515/refs.br-remote-glob_remote-glob
t5515/refs.br-unconfig
t5515/refs.br-unconfig_--tags_.._.git
t5515/refs.br-unconfig_.._.git
t5515/refs.br-unconfig_.._.git_one
t5515/refs.br-unconfig_.._.git_one_tag_tag-one_tag_tag-three-file
t5515/refs.br-unconfig_.._.git_one_two
t5515/refs.br-unconfig_.._.git_tag_tag-one-tree_tag_tag-three-file
t5515/refs.br-unconfig_.._.git_tag_tag-one_tag_tag-three
t5515/refs.br-unconfig_branches-default
t5515/refs.br-unconfig_branches-one
t5515/refs.br-unconfig_config-explicit
t5515/refs.br-unconfig_config-glob
t5515/refs.br-unconfig_remote-explicit
t5515/refs.br-unconfig_remote-glob
t5515/refs.master
t5515/refs.master_--tags_.._.git
t5515/refs.master_.._.git
t5515/refs.master_.._.git_one
t5515/refs.master_.._.git_one_tag_tag-one_tag_tag-three-file
t5515/refs.master_.._.git_one_two
t5515/refs.master_.._.git_tag_tag-one-tree_tag_tag-three-file
t5515/refs.master_.._.git_tag_tag-one_tag_tag-three
t5515/refs.master_branches-default
t5515/refs.master_branches-one
t5515/refs.master_config-explicit
t5515/refs.master_config-glob
t5515/refs.master_remote-explicit
t5515/refs.master_remote-glob
t7500/add-comments
t7500/add-content
t7500/add-content-and-comment
t7500/add-signed-off
t7500/add-whitespaced-content
t7500/edit-content
t8005/euc-japan.txt
t8005/sjis.txt
t8005/utf8.txt
t9000/test.pl
t9110/svm.dump
t9111/svnsync.dump
t9115/funky-names.dump
t9121/renamed-dir.dump
t9126/follow-deleted-readded.dump
t9135/svn.dump
t9136/svn.dump
t9150/make-svk-dump
t9150/svk-merge.dump
t9151/.gitignore
t9151/make-svnmerge-dump
t9151/svn-mergeinfo.dump
t9153/svn.dump
t9154/svn.dump
t9161/branches.dump
t9601/cvsroot/.gitattributes
t9601/cvsroot/CVSROOT/.gitignore
t9601/cvsroot/module/added-imported.txt,v
t9601/cvsroot/module/imported-anonymously.txt,v
t9601/cvsroot/module/imported-modified-imported.txt,v
t9601/cvsroot/module/imported-modified.txt,v
t9601/cvsroot/module/imported-once.txt,v
t9601/cvsroot/module/imported-twice.txt,v
t9602/README
t9602/cvsroot/.gitattributes
t9602/cvsroot/CVSROOT/.gitignore
t9602/cvsroot/module/default,v
t9602/cvsroot/module/sub1/default,v
t9602/cvsroot/module/sub1/subsubA/default,v
t9602/cvsroot/module/sub1/subsubB/default,v
t9602/cvsroot/module/sub2/Attic/branch_B_MIXED_only,v
t9602/cvsroot/module/sub2/default,v
t9602/cvsroot/module/sub2/subsubA/default,v
t9602/cvsroot/module/sub3/default,v
t9603/cvsroot/.gitattributes
t9603/cvsroot/CVSROOT/.gitignore
t9603/cvsroot/module/a,v
t9603/cvsroot/module/b,v
t9604/cvsroot/.gitattributes
t9604/cvsroot/CVSROOT/.gitignore
t9604/cvsroot/module/a,v
t9700/test.pl
valgrind/.gitignore
valgrind/analyze.sh
valgrind/default.supp
valgrind/valgrind.sh
make: *** [Makefile:72: test-lint-filenames] Error 1
As a consequence, my two `pu`-based CI jobs failed to run even one
regression test.
Ciao,
Dscho
Hi Junio,
On Tue, 16 Aug 2016, Johannes Schindelin wrote:
On Mon, 15 Aug 2016, Junio C Hamano wrote:
quoted
Junio C Hamano [off-list ref] writes:
quoted
quoted
+test-lint-filenames:
+ @illegal="$$(git ls-files | grep '["*:<>?\\|]')"; \
This pattern must exclude questionables on either NTFS or HFS+; it
is ironic that it is not even sufficient to limit ourselves to the
Portable Character Set [*1*], but such is life.
By the way, doesn't ls-files take pathspec glob, saving one extra
process to run grep?
I specifically did not do that, sorry for omitting the rationale from the
commit message. The reason why I have that grep is so that the backslash
can also catch non-ASCII characters, such as "Hellö-Jüniö".
And there is another very good reason to keep the grep: the problem I just
reported is *caused* by your avoiding the grep call.
In my tests, at least, `git ls-files '*\*' lists *all* files in
subdirectories. In other words, it matches the *forward* slash. This also
happens when I run the command in cmd.exe instead of Git Bash, meaning
that it is *not* caused by some MSYS2 path conversion from pseudo-Unix to
Windows paths. That only leaves the conclusion that some of our pathspec
code tries to be helpful and takes a backslash for a directory separator.
In light of these problems, and also in light of the fact that the
test-lint-filenames code is hardly performance critical, I am strongly in
favor of reverting to using grep.
Ciao,
Dscho