Junio C Hamano <gitster@xxxxxxxxx> writes: >> So opt for the more simpler option, of >> lowercasing all references sent to this function when on a >> case-insensitive filesystem and operating on the files-backend. > > So when you are trying to lock "Foo", you lock "foo", for example? > How would that let the generic code liks verify_refname_available > notice that an existing ref "Foo/bar" would crash with the name you > are trying to take, which is now downcased to be "foo"? I am not > sure if the above explanation is sufficiently clear to convince > readers why it is sufficient.. Here is a quick-and-dirty monkey-see-monkey-do patch on top of your series, and with it jobs on osx boxes seem to fail. https://github.com/git/git/actions/runs/17477662700/job/49641377250#step:4:1912 t/t5510-fetch.sh | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/t/t5510-fetch.sh b/t/t5510-fetch.sh index 84dc68e5f3..76af769f5c 100755 --- a/t/t5510-fetch.sh +++ b/t/t5510-fetch.sh @@ -59,6 +59,12 @@ test_expect_success "clone and setup child repos" ' cd case_sensitive_fd && git branch foo/bar && git branch Foo + ) && + git clone --ref-format=reftable . case_sensitive_df && + ( + cd case_sensitive_df && + git branch Foo/bar && + git branch foo ) ' @@ -1566,6 +1572,20 @@ test_expect_success CASE_INSENSITIVE_FS,REFFILES 'F/D conflict on case insensiti ) ' +test_expect_success CASE_INSENSITIVE_FS,REFFILES 'D/F conflict on case insensitive filesystem' ' + test_when_finished rm -rf case_insensitive && + ( + git init --bare case_insensitive && + cd case_insensitive && + git remote add origin -- ../case_sensitive_df && + test_must_fail git fetch -f origin "refs/heads/*:refs/heads/*" 2>err && + test_grep "failed: refname conflict" err && + git rev-parse refs/heads/main >expect && + git rev-parse refs/heads/Foo/bar >actual && + test_cmp expect actual + ) +' + . "$TEST_DIRECTORY"/lib-httpd.sh start_httpd -- 2.51.0-314-g9a15cfd6dc