mirror of
https://github.com/git/git.git
synced 2024-11-01 14:57:52 +01:00
43a7ddb55d
Using git with GIT_CEILING_DIRECTORIES crashed on Windows due to a failed assertion in normalize_absolute_path(): This function expects absolute paths to start with a slash, while on Windows they can start with a drive letter or a backslash. This fixes it by using the alternative, normalize_path_copy() instead, which can handle Windows-style paths just fine. Secondly, the portability macro PATH_SEP is used instead of expecting colons to be used as path list delimiter. The test script t1504 is also changed to help MSYS's bash recognize some program arguments as path list. (MSYS's bash must translate POSIX-style path lists to Windows-style path lists, and the heuristic did not catch some cases.) Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx> Signed-off-by: Johannes Sixt <j6t@kdbg.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
163 lines
3.6 KiB
Bash
Executable file
163 lines
3.6 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
test_description='test GIT_CEILING_DIRECTORIES'
|
|
. ./test-lib.sh
|
|
|
|
test_prefix() {
|
|
test_expect_success "$1" \
|
|
"test '$2' = \"\$(git rev-parse --show-prefix)\""
|
|
}
|
|
|
|
test_fail() {
|
|
test_expect_code 128 "$1: prefix" \
|
|
"git rev-parse --show-prefix"
|
|
}
|
|
|
|
TRASH_ROOT="$(pwd)"
|
|
ROOT_PARENT=$(dirname "$TRASH_ROOT")
|
|
|
|
|
|
unset GIT_CEILING_DIRECTORIES
|
|
test_prefix no_ceil ""
|
|
|
|
export GIT_CEILING_DIRECTORIES
|
|
|
|
GIT_CEILING_DIRECTORIES=""
|
|
test_prefix ceil_empty ""
|
|
|
|
GIT_CEILING_DIRECTORIES="$ROOT_PARENT"
|
|
test_prefix ceil_at_parent ""
|
|
|
|
GIT_CEILING_DIRECTORIES="$ROOT_PARENT/"
|
|
test_prefix ceil_at_parent_slash ""
|
|
|
|
GIT_CEILING_DIRECTORIES="$TRASH_ROOT"
|
|
test_prefix ceil_at_trash ""
|
|
|
|
GIT_CEILING_DIRECTORIES="$TRASH_ROOT/"
|
|
test_prefix ceil_at_trash_slash ""
|
|
|
|
GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sub"
|
|
test_prefix ceil_at_sub ""
|
|
|
|
GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sub/"
|
|
test_prefix ceil_at_sub_slash ""
|
|
|
|
|
|
mkdir -p sub/dir || exit 1
|
|
cd sub/dir || exit 1
|
|
|
|
unset GIT_CEILING_DIRECTORIES
|
|
test_prefix subdir_no_ceil "sub/dir/"
|
|
|
|
export GIT_CEILING_DIRECTORIES
|
|
|
|
GIT_CEILING_DIRECTORIES=""
|
|
test_prefix subdir_ceil_empty "sub/dir/"
|
|
|
|
GIT_CEILING_DIRECTORIES="$TRASH_ROOT"
|
|
test_fail subdir_ceil_at_trash
|
|
|
|
GIT_CEILING_DIRECTORIES="$TRASH_ROOT/"
|
|
test_fail subdir_ceil_at_trash_slash
|
|
|
|
GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sub"
|
|
test_fail subdir_ceil_at_sub
|
|
|
|
GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sub/"
|
|
test_fail subdir_ceil_at_sub_slash
|
|
|
|
GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sub/dir"
|
|
test_prefix subdir_ceil_at_subdir "sub/dir/"
|
|
|
|
GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sub/dir/"
|
|
test_prefix subdir_ceil_at_subdir_slash "sub/dir/"
|
|
|
|
|
|
GIT_CEILING_DIRECTORIES="$TRASH_ROOT/su"
|
|
test_prefix subdir_ceil_at_su "sub/dir/"
|
|
|
|
GIT_CEILING_DIRECTORIES="$TRASH_ROOT/su/"
|
|
test_prefix subdir_ceil_at_su_slash "sub/dir/"
|
|
|
|
GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sub/di"
|
|
test_prefix subdir_ceil_at_sub_di "sub/dir/"
|
|
|
|
GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sub/di"
|
|
test_prefix subdir_ceil_at_sub_di_slash "sub/dir/"
|
|
|
|
GIT_CEILING_DIRECTORIES="$TRASH_ROOT/subdi"
|
|
test_prefix subdir_ceil_at_subdi "sub/dir/"
|
|
|
|
GIT_CEILING_DIRECTORIES="$TRASH_ROOT/subdi"
|
|
test_prefix subdir_ceil_at_subdi_slash "sub/dir/"
|
|
|
|
|
|
GIT_CEILING_DIRECTORIES="/foo:$TRASH_ROOT/sub"
|
|
test_fail second_of_two
|
|
|
|
GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sub:/bar"
|
|
test_fail first_of_two
|
|
|
|
GIT_CEILING_DIRECTORIES="/foo:$TRASH_ROOT/sub:/bar"
|
|
test_fail second_of_three
|
|
|
|
|
|
GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sub"
|
|
GIT_DIR=../../.git
|
|
export GIT_DIR
|
|
test_prefix git_dir_specified ""
|
|
unset GIT_DIR
|
|
|
|
|
|
cd ../.. || exit 1
|
|
mkdir -p s/d || exit 1
|
|
cd s/d || exit 1
|
|
|
|
unset GIT_CEILING_DIRECTORIES
|
|
test_prefix sd_no_ceil "s/d/"
|
|
|
|
export GIT_CEILING_DIRECTORIES
|
|
|
|
GIT_CEILING_DIRECTORIES=""
|
|
test_prefix sd_ceil_empty "s/d/"
|
|
|
|
GIT_CEILING_DIRECTORIES="$TRASH_ROOT"
|
|
test_fail sd_ceil_at_trash
|
|
|
|
GIT_CEILING_DIRECTORIES="$TRASH_ROOT/"
|
|
test_fail sd_ceil_at_trash_slash
|
|
|
|
GIT_CEILING_DIRECTORIES="$TRASH_ROOT/s"
|
|
test_fail sd_ceil_at_s
|
|
|
|
GIT_CEILING_DIRECTORIES="$TRASH_ROOT/s/"
|
|
test_fail sd_ceil_at_s_slash
|
|
|
|
GIT_CEILING_DIRECTORIES="$TRASH_ROOT/s/d"
|
|
test_prefix sd_ceil_at_sd "s/d/"
|
|
|
|
GIT_CEILING_DIRECTORIES="$TRASH_ROOT/s/d/"
|
|
test_prefix sd_ceil_at_sd_slash "s/d/"
|
|
|
|
|
|
GIT_CEILING_DIRECTORIES="$TRASH_ROOT/su"
|
|
test_prefix sd_ceil_at_su "s/d/"
|
|
|
|
GIT_CEILING_DIRECTORIES="$TRASH_ROOT/su/"
|
|
test_prefix sd_ceil_at_su_slash "s/d/"
|
|
|
|
GIT_CEILING_DIRECTORIES="$TRASH_ROOT/s/di"
|
|
test_prefix sd_ceil_at_s_di "s/d/"
|
|
|
|
GIT_CEILING_DIRECTORIES="$TRASH_ROOT/s/di"
|
|
test_prefix sd_ceil_at_s_di_slash "s/d/"
|
|
|
|
GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sdi"
|
|
test_prefix sd_ceil_at_sdi "s/d/"
|
|
|
|
GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sdi"
|
|
test_prefix sd_ceil_at_sdi_slash "s/d/"
|
|
|
|
|
|
test_done
|