git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] Demonstrate failure of 'core.ignorecase = true'

From
Junio C Hamano <gitster@pobox.com>
Date
Mar 21, 2012, 23:58 UTC
Message-ID
<7vmx79zeui.fsf@alter.siamese.dyndns.org>
In-Reply-To
<1332370222-5123-1-git-send-email-pj@irregularexpressions.net>
"Peter J. Weisberg" <pj@irregularexpressions.net> writes:
Show 7 quoted lines
> From: "Peter J. Weisberg" <pj@irregularexpressions.net>
>
> On a filesystem that *is* case-sensitive, renaming a file to a name
> that would be equivalent on a case-insensitive filesystem makes Git
> think the original file was deleted.  Add a test that demonstrates
> this as a known error.
> ---
Thanks, Needs sign-off.
Show 5 quoted lines
> I have a repository that contains files that I sync from a place where
> names are case-insensitive.  When I sync a file that has a change in
> the case of the file name, I want Git to ignore that non-change.  I
> would think core.ignorecase would accomplish this, but it does not.
> ---
No need for the second "---"
>  t/t2000-ignorecase-config.sh |   21 +++++++++++++++++++++
We'd rather not waste a new test number for a single test like this.
Show 19 quoted lines
>  1 files changed, 21 insertions(+), 0 deletions(-)
>  create mode 100755 t/t2000-ignorecase-config.sh
>
> diff --git a/t/t2000-ignorecase-config.sh b/t/t2000-ignorecase-config.sh
> new file mode 100755
> index 0000000..9d05cee
> --- /dev/null
> +++ b/t/t2000-ignorecase-config.sh
> @@ -0,0 +1,21 @@
> +#!/bin/sh
> +#
> +# Copyright (c) 2012 Peter J Weisberg
> +#
> +
> +test_description='core.ignorecase'
> +
> +. ./test-lib.sh
> +
> +test_expect_failure "diff-files doesn't show case change when ignorecase=true" '

This needs to be protected by test prerequisite to make sure that the test is run on a case insensitive filesystem. Even if you declare that the filesystem is case insensitive by setting core.ignorecase to true, the underlying system calls like open("foo") will *not* magically start returning a file descriptor opened for "FOO" if your filesystem is not case insensitive.

Perhaps something as simple as the following would do:
	# on case insensitive filesystems, "mv" would fail
        if >testfile && ! mv testfile TESTFILE >/dev/null 2>/dev/null
        then
                test_set_prereq CASE_INSENSITIVE_FS
        fi
        rm -f testfile TESTFILE
	test_expect_failure CASE_INSENSITIVE_FS "diff-files doesn't..." '
        	... test body comes here ...
Show 11 quoted lines
> +	git config core.ignorecase true &&
> +
> +	touch foo &&
> +	git add foo &&
> +	git commit -m "foo" &&
> +	mv foo FOO &&
> +
> +	test -z "$(git diff-files)"
> +'
> +
> +test_done
Previous: Peter J. WeisbergNext: PJ Weisberg
Message 2 of 23 in “Demonstrate failure of 'core.ignorecase = true'”
  1. Demonstrate failure of 'core.ignorecase = true'Peter J. Weisberg, Mar 21, 2012
  2. Junio C HamanoMar 21, 2012
  3. PJ WeisbergMar 22, 2012
  4. Junio C HamanoMar 22, 2012
  5. Thomas RastMar 23, 2012
  6. Junio C HamanoMar 23, 2012
  7. Jeff KingMar 23, 2012
  8. Jeff KingMar 23, 2012
  9. Johannes SixtMar 22, 2012
  10. Zbigniew Jędrzejewski-SzmekMar 22, 2012
  11. Jeff KingMar 22, 2012
  12. Junio C HamanoMar 22, 2012
  13. Jeff KingMar 22, 2012
  14. Junio C HamanoMar 22, 2012
  15. Jeff KingMar 22, 2012
  16. Junio C HamanoMar 22, 2012
  17. Zbigniew Jędrzejewski-SzmekMar 22, 2012
  18. Junio C HamanoMar 22, 2012
  19. Zbigniew Jędrzejewski-SzmekMar 22, 2012
  20. PJ WeisbergMar 22, 2012
  21. Junio C HamanoMar 22, 2012
  22. Jeff KingMar 22, 2012
  23. Junio C HamanoMar 22, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.