From 7c2dfca7e81538b3d979b85b5bd023358d4d79eb Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Sat, 11 Apr 2020 13:40:20 +0000 Subject: [PATCH 1/3] t: consolidate the `is_hidden` functions The `is_hidden` function can be used (only on Windows) to determine whether a directory or file have their `hidden` flag set. This function is duplicated between two test scripts. It is better to move it into `test-lib-functions.sh` so that it is reused. This patch is best viewed with `--color-moved`. Signed-off-by: Johannes Schindelin Signed-off-by: Junio C Hamano --- t/t0001-init.sh | 7 ------- t/t5611-clone-config.sh | 7 ------- t/test-lib-functions.sh | 7 +++++++ 3 files changed, 7 insertions(+), 14 deletions(-) diff --git a/t/t0001-init.sh b/t/t0001-init.sh index 26f8206326..9cc919d8d1 100755 --- a/t/t0001-init.sh +++ b/t/t0001-init.sh @@ -392,13 +392,6 @@ test_expect_success SYMLINKS 're-init to move gitdir symlink' ' test_path_is_dir realgitdir/refs ' -# Tests for the hidden file attribute on windows -is_hidden () { - # Use the output of `attrib`, ignore the absolute path - case "$(attrib "$1")" in *H*?:*) return 0;; esac - return 1 -} - test_expect_success MINGW '.git hidden' ' rm -rf newdir && ( diff --git a/t/t5611-clone-config.sh b/t/t5611-clone-config.sh index 60c1ba951b..c861e12ea4 100755 --- a/t/t5611-clone-config.sh +++ b/t/t5611-clone-config.sh @@ -92,13 +92,6 @@ test_expect_success 'clone -c remote..fetch= --origin=' ' test_cmp expect actual ' -# Tests for the hidden file attribute on windows -is_hidden () { - # Use the output of `attrib`, ignore the absolute path - case "$(attrib "$1")" in *H*?:*) return 0;; esac - return 1 -} - test_expect_success MINGW 'clone -c core.hideDotFiles' ' test_commit attributes .gitattributes "" && rm -rf child && diff --git a/t/test-lib-functions.sh b/t/test-lib-functions.sh index 352c213d52..7a7e7a3831 100644 --- a/t/test-lib-functions.sh +++ b/t/test-lib-functions.sh @@ -1543,3 +1543,10 @@ test_bitmap_traversal () { test_cmp "$1.normalized" "$2.normalized" && rm -f "$1.normalized" "$2.normalized" } + +# Tests for the hidden file attribute on windows +is_hidden () { + # Use the output of `attrib`, ignore the absolute path + case "$(attrib "$1")" in *H*?:*) return 0;; esac + return 1 +} From 9814d0a4ad0f9670b5959939f38dd42f9a7d83b6 Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Sat, 11 Apr 2020 13:40:21 +0000 Subject: [PATCH 2/3] mingw: make test_path_is_hidden more robust This function uses Windows' system tool `attrib` to determine the state of the hidden flag of a file or directory. We should not actually expect the first `attrib.exe` in the PATH to be the one we are looking for. Or that it is in the PATH, for that matter. Let's use the full path to the tool instead. Signed-off-by: Johannes Schindelin Signed-off-by: Junio C Hamano --- t/test-lib-functions.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/t/test-lib-functions.sh b/t/test-lib-functions.sh index 7a7e7a3831..2f81463a24 100644 --- a/t/test-lib-functions.sh +++ b/t/test-lib-functions.sh @@ -1547,6 +1547,6 @@ test_bitmap_traversal () { # Tests for the hidden file attribute on windows is_hidden () { # Use the output of `attrib`, ignore the absolute path - case "$(attrib "$1")" in *H*?:*) return 0;; esac + case "$("$SYSTEMROOT"/system32/attrib "$1")" in *H*?:*) return 0;; esac return 1 } From 176a66a748c18132ebb747553896b810993179a6 Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Sat, 11 Apr 2020 13:40:22 +0000 Subject: [PATCH 3/3] t: restrict `is_hidden` to be called only on Windows The function won't work anywhere else, so let's mark it as an explicit bug if it is called on a non-Windows platform. Let's also rename the function to avoid cluttering the global namespace with an overly-generic function name. While at it, we also fix the code comment above that function: the lower-case `windows` refers to something different than `Windows`. Signed-off-by: Johannes Schindelin Signed-off-by: Junio C Hamano --- t/t0001-init.sh | 2 +- t/t5611-clone-config.sh | 6 +++--- t/test-lib-functions.sh | 7 +++++-- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/t/t0001-init.sh b/t/t0001-init.sh index 9cc919d8d1..1edd5aeb8f 100755 --- a/t/t0001-init.sh +++ b/t/t0001-init.sh @@ -399,7 +399,7 @@ test_expect_success MINGW '.git hidden' ' mkdir newdir && cd newdir && git init && - is_hidden .git + test_path_is_hidden .git ) && check_config newdir/.git false unset ' diff --git a/t/t5611-clone-config.sh b/t/t5611-clone-config.sh index c861e12ea4..8e0fd39823 100755 --- a/t/t5611-clone-config.sh +++ b/t/t5611-clone-config.sh @@ -96,13 +96,13 @@ test_expect_success MINGW 'clone -c core.hideDotFiles' ' test_commit attributes .gitattributes "" && rm -rf child && git clone -c core.hideDotFiles=false . child && - ! is_hidden child/.gitattributes && + ! test_path_is_hidden child/.gitattributes && rm -rf child && git clone -c core.hideDotFiles=dotGitOnly . child && - ! is_hidden child/.gitattributes && + ! test_path_is_hidden child/.gitattributes && rm -rf child && git clone -c core.hideDotFiles=true . child && - is_hidden child/.gitattributes + test_path_is_hidden child/.gitattributes ' test_done diff --git a/t/test-lib-functions.sh b/t/test-lib-functions.sh index 2f81463a24..139647a634 100644 --- a/t/test-lib-functions.sh +++ b/t/test-lib-functions.sh @@ -1544,8 +1544,11 @@ test_bitmap_traversal () { rm -f "$1.normalized" "$2.normalized" } -# Tests for the hidden file attribute on windows -is_hidden () { +# Tests for the hidden file attribute on Windows +test_path_is_hidden () { + test_have_prereq MINGW || + BUG "test_path_is_hidden can only be used on Windows" + # Use the output of `attrib`, ignore the absolute path case "$("$SYSTEMROOT"/system32/attrib "$1")" in *H*?:*) return 0;; esac return 1