tests: use the correct path separator with BusyBox

BusyBox-w32 is a true Win32 application, i.e. it does not come with a
POSIX emulation layer.

That also means that it does *not* use the Unix convention of separating
the entries in the PATH variable using colons, but semicolons.

However, there are also BusyBox ports to Windows which use a POSIX
emulation layer such as Cygwin's or MSYS2's runtime, i.e. using colons
as PATH separators.

As a tell-tale, let's use the presence of semicolons in the PATH
variable: on Unix, it is highly unlikely that it contains semicolons,
and on Windows (without POSIX emulation), it is virtually guaranteed, as
everybody should have both $SYSTEMROOT and $SYSTEMROOT/system32 in their
PATH.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
This commit is contained in:
Johannes Schindelin
2018-11-19 20:34:13 +01:00
parent 6bf2469602
commit 4a15dc6f96
17 changed files with 54 additions and 41 deletions

View File

@@ -4,6 +4,10 @@
. ../../GIT-BUILD-OPTIONS . ../../GIT-BUILD-OPTIONS
INTEROP_ROOT=$(pwd) INTEROP_ROOT=$(pwd)
BUILD_ROOT=$INTEROP_ROOT/build BUILD_ROOT=$INTEROP_ROOT/build
case "$PATH" in
*\;*) PATH_SEP=\; ;;
*) PATH_SEP=: ;;
esac
build_version () { build_version () {
if test -z "$1" if test -z "$1"
@@ -57,7 +61,7 @@ wrap_git () {
write_script "$1" <<-EOF write_script "$1" <<-EOF
GIT_EXEC_PATH="$2" GIT_EXEC_PATH="$2"
export GIT_EXEC_PATH export GIT_EXEC_PATH
PATH="$2:\$PATH" PATH="$2$PATH_SEP\$PATH"
export GIT_EXEC_PATH export GIT_EXEC_PATH
exec git "\$@" exec git "\$@"
EOF EOF
@@ -71,7 +75,7 @@ generate_wrappers () {
echo >&2 fatal: test tried to run generic git: $* echo >&2 fatal: test tried to run generic git: $*
exit 1 exit 1
EOF EOF
PATH=$(pwd)/.bin:$PATH PATH=$(pwd)/.bin$PATH_SEP$PATH
} }
VERSION_A=${GIT_TEST_VERSION_A:-$VERSION_A} VERSION_A=${GIT_TEST_VERSION_A:-$VERSION_A}

View File

@@ -214,7 +214,7 @@ setup_ext_wrapper () {
cd "$TRASH_DIRECTORY/remote" && cd "$TRASH_DIRECTORY/remote" &&
eval "$*" eval "$*"
EOF EOF
PATH=$TRASH_DIRECTORY:$PATH && PATH=$TRASH_DIRECTORY$PATH_SEP$PATH &&
export TRASH_DIRECTORY export TRASH_DIRECTORY
' '
} }

View File

@@ -8,7 +8,7 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
. ./test-lib.sh . ./test-lib.sh
. "$TEST_DIRECTORY"/lib-terminal.sh . "$TEST_DIRECTORY"/lib-terminal.sh
PATH=$PWD:$PATH PATH=$PWD$PATH_SEP$PATH
TEST_ROOT="$(pwd)" TEST_ROOT="$(pwd)"
write_script <<\EOF "$TEST_ROOT/rot13.sh" write_script <<\EOF "$TEST_ROOT/rot13.sh"

View File

@@ -148,25 +148,25 @@ ancestor /foo /fo -1
ancestor /foo /foo -1 ancestor /foo /foo -1
ancestor /foo /bar -1 ancestor /foo /bar -1
ancestor /foo /foo/bar -1 ancestor /foo /foo/bar -1
ancestor /foo /foo:/bar -1 ancestor /foo "/foo$PATH_SEP/bar" -1
ancestor /foo /:/foo:/bar 0 ancestor /foo "/$PATH_SEP/foo$PATH_SEP/bar" 0
ancestor /foo /foo:/:/bar 0 ancestor /foo "/foo$PATH_SEP/$PATH_SEP/bar" 0
ancestor /foo /:/bar:/foo 0 ancestor /foo "/$PATH_SEP/bar$PATH_SEP/foo" 0
ancestor /foo/bar / 0 ancestor /foo/bar / 0
ancestor /foo/bar /fo -1 ancestor /foo/bar /fo -1
ancestor /foo/bar /foo 4 ancestor /foo/bar /foo 4
ancestor /foo/bar /foo/ba -1 ancestor /foo/bar /foo/ba -1
ancestor /foo/bar /:/fo 0 ancestor /foo/bar "/$PATH_SEP/fo" 0
ancestor /foo/bar /foo:/foo/ba 4 ancestor /foo/bar "/foo$PATH_SEP/foo/ba" 4
ancestor /foo/bar /bar -1 ancestor /foo/bar /bar -1
ancestor /foo/bar /fo -1 ancestor /foo/bar /fo -1
ancestor /foo/bar /foo:/bar 4 ancestor /foo/bar "/foo$PATH_SEP/bar" 4
ancestor /foo/bar /:/foo:/bar 4 ancestor /foo/bar "/$PATH_SEP/foo$PATH_SEP/bar" 4
ancestor /foo/bar /foo:/:/bar 4 ancestor /foo/bar "/foo$PATH_SEP/$PATH_SEP/bar" 4
ancestor /foo/bar /:/bar:/fo 0 ancestor /foo/bar "/$PATH_SEP/bar$PATH_SEP/fo" 0
ancestor /foo/bar /:/bar 0 ancestor /foo/bar "/$PATH_SEP/bar" 0
ancestor /foo/bar /foo 4 ancestor /foo/bar /foo 4
ancestor /foo/bar /foo:/bar 4 ancestor /foo/bar "/foo$PATH_SEP/bar" 4
ancestor /foo/bar /bar -1 ancestor /foo/bar /bar -1
# Windows-specific: DOS drives, network shares # Windows-specific: DOS drives, network shares

View File

@@ -70,7 +70,7 @@ test_expect_success 'run_command does not try to execute a directory' '
cat bin2/greet cat bin2/greet
EOF EOF
PATH=$PWD/bin1:$PWD/bin2:$PATH \ PATH=$PWD/bin1$PATH_SEP$PWD/bin2$PATH_SEP$PATH \
test-tool run-command run-command greet >actual 2>err && test-tool run-command run-command greet >actual 2>err &&
test_cmp bin2/greet actual && test_cmp bin2/greet actual &&
test_must_be_empty err test_must_be_empty err
@@ -87,7 +87,7 @@ test_expect_success POSIXPERM 'run_command passes over non-executable file' '
cat bin2/greet cat bin2/greet
EOF EOF
PATH=$PWD/bin1:$PWD/bin2:$PATH \ PATH=$PWD/bin1$PATH_SEP$PWD/bin2$PATH_SEP$PATH \
test-tool run-command run-command greet >actual 2>err && test-tool run-command run-command greet >actual 2>err &&
test_cmp bin2/greet actual && test_cmp bin2/greet actual &&
test_must_be_empty err test_must_be_empty err
@@ -107,7 +107,7 @@ test_expect_success POSIXPERM,SANITY 'unreadable directory in PATH' '
git config alias.nitfol "!echo frotz" && git config alias.nitfol "!echo frotz" &&
chmod a-rx local-command && chmod a-rx local-command &&
( (
PATH=./local-command:$PATH && PATH=./local-command$PATH_SEP$PATH &&
git nitfol >actual git nitfol >actual
) && ) &&
echo frotz >expect && echo frotz >expect &&

View File

@@ -45,7 +45,7 @@ test_expect_success 'setup helper scripts' '
test -z "$pexpiry" || echo password_expiry_utc=$pexpiry test -z "$pexpiry" || echo password_expiry_utc=$pexpiry
EOF EOF
PATH="$PWD:$PATH" PATH="$PWD$PATH_SEP$PATH"
' '
test_expect_success 'credential_fill invokes helper' ' test_expect_success 'credential_fill invokes helper' '

View File

@@ -85,9 +85,9 @@ then
GIT_CEILING_DIRECTORIES="$TRASH_ROOT/top/" GIT_CEILING_DIRECTORIES="$TRASH_ROOT/top/"
test_fail subdir_ceil_at_top_slash test_fail subdir_ceil_at_top_slash
GIT_CEILING_DIRECTORIES=":$TRASH_ROOT/top" GIT_CEILING_DIRECTORIES="$PATH_SEP$TRASH_ROOT/top"
test_prefix subdir_ceil_at_top_no_resolve "sub/dir/" test_prefix subdir_ceil_at_top_no_resolve "sub/dir/"
GIT_CEILING_DIRECTORIES=":$TRASH_ROOT/top/" GIT_CEILING_DIRECTORIES="$PATH_SEP$TRASH_ROOT/top/"
test_prefix subdir_ceil_at_top_slash_no_resolve "sub/dir/" test_prefix subdir_ceil_at_top_slash_no_resolve "sub/dir/"
fi fi
@@ -117,13 +117,13 @@ GIT_CEILING_DIRECTORIES="$TRASH_ROOT/subdi"
test_prefix subdir_ceil_at_subdi_slash "sub/dir/" test_prefix subdir_ceil_at_subdi_slash "sub/dir/"
GIT_CEILING_DIRECTORIES="/foo:$TRASH_ROOT/sub" GIT_CEILING_DIRECTORIES="/foo$PATH_SEP$TRASH_ROOT/sub"
test_fail second_of_two test_fail second_of_two
GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sub:/bar" GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sub$PATH_SEP/bar"
test_fail first_of_two test_fail first_of_two
GIT_CEILING_DIRECTORIES="/foo:$TRASH_ROOT/sub:/bar" GIT_CEILING_DIRECTORIES="/foo$PATH_SEP$TRASH_ROOT/sub$PATH_SEP/bar"
test_fail second_of_three test_fail second_of_three

View File

@@ -17,7 +17,7 @@ test_cd_to_toplevel () {
test_expect_success $3 "$2" ' test_expect_success $3 "$2" '
( (
cd '"'$1'"' && cd '"'$1'"' &&
PATH="$EXEC_PATH:$PATH" && PATH="$EXEC_PATH$PATH_SEP$PATH" &&
. git-sh-setup && . git-sh-setup &&
cd_to_toplevel && cd_to_toplevel &&
[ "$(pwd -P)" = "$TOPLEVEL" ] [ "$(pwd -P)" = "$TOPLEVEL" ]

View File

@@ -82,7 +82,7 @@ test_expect_success 'rebase --continue remembers merge strategy and options' '
rm -f actual && rm -f actual &&
( (
PATH=./test-bin:$PATH && PATH=./test-bin$PATH_SEP$PATH &&
test_must_fail git rebase -s funny -X"option=arg with space" \ test_must_fail git rebase -s funny -X"option=arg with space" \
-Xop\"tion\\ -X"new${LF}line " main topic -Xop\"tion\\ -X"new${LF}line " main topic
) && ) &&
@@ -91,7 +91,7 @@ test_expect_success 'rebase --continue remembers merge strategy and options' '
echo "Resolved" >F2 && echo "Resolved" >F2 &&
git add F2 && git add F2 &&
( (
PATH=./test-bin:$PATH && PATH=./test-bin$PATH_SEP$PATH &&
git rebase --continue git rebase --continue
) && ) &&
test_cmp expect actual test_cmp expect actual

View File

@@ -40,7 +40,7 @@ test_expect_success 'access alternate via absolute path' '
' '
test_expect_success 'access multiple alternates' ' test_expect_success 'access multiple alternates' '
check_obj "$PWD/one.git/objects:$PWD/two.git/objects" <<-EOF check_obj "$PWD/one.git/objects$PATH_SEP$PWD/two.git/objects" <<-EOF
$one blob $one blob
$two blob $two blob
EOF EOF
@@ -76,7 +76,7 @@ test_expect_success 'access alternate via relative path (subdir)' '
quoted='"one.git\057objects"' quoted='"one.git\057objects"'
unquoted='two.git/objects' unquoted='two.git/objects'
test_expect_success 'mix of quoted and unquoted alternates' ' test_expect_success 'mix of quoted and unquoted alternates' '
check_obj "$quoted:$unquoted" <<-EOF check_obj "$quoted$PATH_SEP$unquoted" <<-EOF
$one blob $one blob
$two blob $two blob
EOF EOF

View File

@@ -85,7 +85,7 @@ test_expect_success 'set up fake git-daemon' '
"$TRASH_DIRECTORY/remote" "$TRASH_DIRECTORY/remote"
EOF EOF
export TRASH_DIRECTORY && export TRASH_DIRECTORY &&
PATH=$TRASH_DIRECTORY:$PATH PATH=$TRASH_DIRECTORY$PATH_SEP$PATH
' '
test_expect_success 'ext command can connect to git daemon (no vhost)' ' test_expect_success 'ext command can connect to git daemon (no vhost)' '

View File

@@ -54,7 +54,7 @@ test_expect_success !MINGW,TTY 'LESS and LV envvars set by git-sh-setup' '
sane_unset LESS LV && sane_unset LESS LV &&
PAGER="env >pager-env.out; wc" && PAGER="env >pager-env.out; wc" &&
export PAGER && export PAGER &&
PATH="$(git --exec-path):$PATH" && PATH="$(git --exec-path)$PATH_SEP$PATH" &&
export PATH && export PATH &&
test_terminal sh -c ". git-sh-setup && git_pager" test_terminal sh -c ". git-sh-setup && git_pager"
) && ) &&
@@ -388,7 +388,7 @@ test_default_pager() {
EOF EOF
chmod +x \$less && chmod +x \$less &&
( (
PATH=.:\$PATH && PATH=.$PATH_SEP\$PATH &&
export PATH && export PATH &&
$full_command $full_command
) && ) &&

View File

@@ -23,7 +23,7 @@ test_expect_success 'set up custom strategy' '
EOF EOF
chmod +x git-merge-theirs && chmod +x git-merge-theirs &&
PATH=.:$PATH && PATH=.$PATH_SEP$PATH &&
export PATH export PATH
' '

View File

@@ -53,7 +53,7 @@ test_expect_success SIMPLEPAGER 'git grep -O' '
EOF EOF
echo grep.h >expect.notless && echo grep.h >expect.notless &&
PATH=.:$PATH git grep -O GREP_PATTERN >out && PATH=.$PATH_SEP$PATH git grep -O GREP_PATTERN >out &&
{ {
test_cmp expect.less pager-args || test_cmp expect.less pager-args ||
test_cmp expect.notless pager-args test_cmp expect.notless pager-args

View File

@@ -14,7 +14,7 @@ test_expect_success 'setup' '
echo distimdistim was called echo distimdistim was called
EOF EOF
PATH="$PATH:." && PATH="$PATH$PATH_SEP." &&
export PATH && export PATH &&
git commit --allow-empty -m "a single log entry" && git commit --allow-empty -m "a single log entry" &&

View File

@@ -286,7 +286,7 @@ test_expect_success 'exit when p4 fails to produce marshaled output' '
EOF EOF
chmod 755 badp4dir/p4 && chmod 755 badp4dir/p4 &&
( (
PATH="$TRASH_DIRECTORY/badp4dir:$PATH" && PATH="$TRASH_DIRECTORY/badp4dir$PATH_SEP$PATH" &&
export PATH && export PATH &&
test_expect_code 1 git p4 clone --dest="$git" //depot >errs 2>&1 test_expect_code 1 git p4 clone --dest="$git" //depot >errs 2>&1
) && ) &&

View File

@@ -15,6 +15,15 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see https://www.gnu.org/licenses/ . # along with this program. If not, see https://www.gnu.org/licenses/ .
# On Unix/Linux, the path separator is the colon, on other systems it
# may be different, though. On Windows, for example, it is a semicolon.
# If the PATH variable contains semicolons, it is pretty safe to assume
# that the path separator is a semicolon.
case "$PATH" in
*\;*) PATH_SEP=\; ;;
*) PATH_SEP=: ;;
esac
# Test the binaries we have just built. The tests are kept in # Test the binaries we have just built. The tests are kept in
# t/ subdirectory and are run in 'trash directory' subdirectory. # t/ subdirectory and are run in 'trash directory' subdirectory.
if test -z "$TEST_DIRECTORY" if test -z "$TEST_DIRECTORY"
@@ -1459,7 +1468,7 @@ then
done done
done done
IFS=$OLDIFS IFS=$OLDIFS
PATH=$GIT_VALGRIND/bin:$PATH PATH=$GIT_VALGRIND/bin$PATH_SEP$PATH
GIT_EXEC_PATH=$GIT_VALGRIND/bin GIT_EXEC_PATH=$GIT_VALGRIND/bin
export GIT_VALGRIND export GIT_VALGRIND
GIT_VALGRIND_MODE="$valgrind" GIT_VALGRIND_MODE="$valgrind"
@@ -1471,7 +1480,7 @@ elif test -n "$GIT_TEST_INSTALLED"
then then
GIT_EXEC_PATH=$($GIT_TEST_INSTALLED/git --exec-path) || GIT_EXEC_PATH=$($GIT_TEST_INSTALLED/git --exec-path) ||
error "Cannot run git from $GIT_TEST_INSTALLED." error "Cannot run git from $GIT_TEST_INSTALLED."
PATH=$GIT_TEST_INSTALLED:$GIT_BUILD_DIR/t/helper:$PATH PATH=$GIT_TEST_INSTALLED$PATH_SEP$GIT_BUILD_DIR/t/helper$PATH_SEP$PATH
GIT_EXEC_PATH=${GIT_TEST_EXEC_PATH:-$GIT_EXEC_PATH} GIT_EXEC_PATH=${GIT_TEST_EXEC_PATH:-$GIT_EXEC_PATH}
else # normal case, use ../bin-wrappers only unless $with_dashes: else # normal case, use ../bin-wrappers only unless $with_dashes:
if test -n "$no_bin_wrappers" if test -n "$no_bin_wrappers"
@@ -1487,12 +1496,12 @@ else # normal case, use ../bin-wrappers only unless $with_dashes:
fi fi
with_dashes=t with_dashes=t
fi fi
PATH="$git_bin_dir:$PATH" PATH="$git_bin_dir$PATH_SEP$PATH"
fi fi
GIT_EXEC_PATH=$GIT_BUILD_DIR GIT_EXEC_PATH=$GIT_BUILD_DIR
if test -n "$with_dashes" if test -n "$with_dashes"
then then
PATH="$GIT_BUILD_DIR:$GIT_BUILD_DIR/t/helper:$PATH" PATH="$GIT_BUILD_DIR$PATH_SEP$GIT_BUILD_DIR/t/helper$PATH_SEP$PATH"
fi fi
fi fi
GIT_TEMPLATE_DIR="$GIT_BUILD_DIR"/templates/blt GIT_TEMPLATE_DIR="$GIT_BUILD_DIR"/templates/blt