Subject: Re: [PATCH/RFC v2] Set core.precomposeunicode to true on e.g. HFS+

From: Junio C Hamano <[email-masked]>
Date: Tue, 27 Aug 2013 07:33:16 -0700

Torsten Bögershausen <[email-masked]> writes:

> When core.precomposeunicode was introduced in 76759c7d,
> it was set to false on a unicode decomposing file system like HFS+
> to be compatible with older versions of Git.
>
> The Mac OS users need to find out that this configuration exist
> and change it manually from false to true.

Yeah, I think this makes sense.

I actually wonder why we thought that the way 76759c7d (git on Mac
OS and precomposed unicode, 2012-07-08) did "add the variable to the
config but do not enable" was a good idea.  If I recall correctly,
the justification was "that way the users will not be suddenly
affected by the behaviour change, but can notice an unfamiliar
variable in their configuration and flip it as needed"; I said that
it did not make sense to me ($gmane/188940) back then and now I
think with this patch we are in agreement ;-).

> -		/* Indicate to the user, that we can configure it to true */
> -		if (!access(path, R_OK))
> -			git_config_set("core.precomposeunicode", "false");
> -		/* To be backward compatible, set precomposed_unicode to 0 */
> -		precomposed_unicode = 0;
> +		precomposed_unicode = access(path, R_OK) ? 0 : 1;
> +		git_config_set("core.precomposeunicode", precomposed_unicode ? "true" : "false");

This test is very conservative in that only a successful access()
will flip the bit; I like it.

Will queue.  Thanks.

>  		strcpy(path + len, auml_nfc);
>  		if (unlink(path))
>  			die_errno(_("failed to unlink '%s'"), path);
> diff --git a/t/t0050-filesystem.sh b/t/t0050-filesystem.sh
> index 05d78d2..6b3cedc 100755
> --- a/t/t0050-filesystem.sh
> +++ b/t/t0050-filesystem.sh
> @@ -91,6 +91,7 @@ test_expect_failure CASE_INSENSITIVE_FS 'add (with different case)' '
>  test_expect_success "setup unicode normalization tests" '
>  	test_create_repo unicode &&
>  	cd unicode &&
> +	git config core.precomposeunicode false &&
>  	touch "$aumlcdiar" &&
>  	git add "$aumlcdiar" &&
>  	git commit -m initial &&
> diff --git a/t/t3910-mac-os-precompose.sh b/t/t3910-mac-os-precompose.sh
> index 5fe57c5..e4ba601 100755
> --- a/t/t3910-mac-os-precompose.sh
> +++ b/t/t3910-mac-os-precompose.sh
> @@ -36,7 +36,7 @@ Alongc=$Alongc$AEligatu$AEligatu                     #254 Byte
>  
>  test_expect_success "detect if nfd needed" '
>  	precomposeunicode=`git config core.precomposeunicode` &&
> -	test "$precomposeunicode" = false &&
> +	test "$precomposeunicode" = true &&
>  	git config core.precomposeunicode true
>  '
>  test_expect_success "setup" '
> diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh
> index 5ee97b0..f0f8cde 100755
> --- a/t/t7400-submodule-basic.sh
> +++ b/t/t7400-submodule-basic.sh
> @@ -958,7 +958,6 @@ test_expect_success 'submodule with UTF-8 name' '
>  		git add sub &&
>  		git commit -m "init sub"
>  	) &&
> -	test_config core.precomposeunicode true &&
>  	git submodule add ./"$svname" &&
>  	git submodule >&2 &&
>  	test -n "$(git submodule | grep "$svname")"