Re: [PATCH 1/1] t0001: fix on case-insensitive filesystems
- From
brian m. carlson <sandals@crustytoothpaste.net>
- Date
- Jun 9, 2019, 20:13 UTC
- Message-ID
- <20190609201302.GX8616@genre.crustytoothpaste.net>
- In-Reply-To
- <1dd56d034efb6ff251bdac8d099052175f4777a0.1560005022.git.gitgitgadget@gmail.com>
On 2019-06-08 at 14:43:43, Johannes Schindelin via GitGitGadget wrote:
Show 11 quoted lines
> diff --git a/t/t0001-init.sh b/t/t0001-init.sh
> index 42a263cada..f54a69e2d9 100755
> --- a/t/t0001-init.sh
> +++ b/t/t0001-init.sh
> @@ -307,10 +307,20 @@ test_expect_success 'init prefers command line to GIT_DIR' '
> test_path_is_missing otherdir/refs
> '
>
> +downcase_on_case_insensitive_fs () {
> + test false = "$(git config --get core.filemode)" || return 0
> + for fTIL that “for f” is equivalent to “for f in "$@"”. Thanks for teaching me something new.
Show 11 quoted lines
> + do > + tr A-Z a-z <"$f" >"$f".downcased && > + mv -f "$f".downcased "$f" || return 1 > + done > +} > + > test_expect_success 'init with separate gitdir' ' > rm -rf newdir && > git init --separate-git-dir realgitdir newdir && > echo "gitdir: $(pwd)/realgitdir" >expected && > + downcase_on_case_insensitive_fs expected newdir/.git &&
I wonder if there's maybe a simpler way. If we canonicalize paths when writing them to the gitdir file, then writing "$(pwd -P)" on the line above should produce the right result.
Now, technically, POSIX doesn't require case canonicalization of the path with "pwd -P", but then again, POSIX doesn't permit case-insensitive file systems, and we know the behavior on macOS uses bash, which does the right thing in this case because it calls realpath(3). I've tested that it also does the right thing on Linux when the worktree containing the Git checkout is in a path with symlinks.
I don't know how that works on Windows, but if it does, it might be simpler.
-- brian m. carlson: Houston, Texas, US OpenPGP: https://keybase.io/bk2204