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.
A smoother workflow can be achieved,
so set core.precomposeunicode to true on a decomposing file system.
Signed-off-by: Torsten Bögershausen <tboegi@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
		
	
		
			
				
	
	
		
			154 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			154 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/sh
 | 
						|
#
 | 
						|
# Copyright (c) 2012 Torsten Bögershausen
 | 
						|
#
 | 
						|
 | 
						|
test_description='utf-8 decomposed (nfd) converted to precomposed (nfc)'
 | 
						|
 | 
						|
. ./test-lib.sh
 | 
						|
 | 
						|
if ! test_have_prereq UTF8_NFD_TO_NFC
 | 
						|
then
 | 
						|
	skip_all="filesystem does not corrupt utf-8"
 | 
						|
	test_done
 | 
						|
fi
 | 
						|
 | 
						|
# create utf-8 variables
 | 
						|
Adiarnfc=`printf '\303\204'`
 | 
						|
Adiarnfd=`printf 'A\314\210'`
 | 
						|
 | 
						|
Odiarnfc=`printf '\303\226'`
 | 
						|
Odiarnfd=`printf 'O\314\210'`
 | 
						|
AEligatu=`printf '\303\206'`
 | 
						|
Invalidu=`printf '\303\377'`
 | 
						|
 | 
						|
 | 
						|
#Create a string with 255 bytes (decomposed)
 | 
						|
Alongd=$Adiarnfd$Adiarnfd$Adiarnfd$Adiarnfd$Adiarnfd$Adiarnfd$Adiarnfd #21 Byte
 | 
						|
Alongd=$Alongd$Alongd$Alongd                                           #63 Byte
 | 
						|
Alongd=$Alongd$Alongd$Alongd$Alongd$Adiarnfd                           #255 Byte
 | 
						|
 | 
						|
#Create a string with 254 bytes (precomposed)
 | 
						|
Alongc=$AEligatu$AEligatu$AEligatu$AEligatu$AEligatu #10 Byte
 | 
						|
Alongc=$Alongc$Alongc$Alongc$Alongc$Alongc           #50 Byte
 | 
						|
Alongc=$Alongc$Alongc$Alongc$Alongc$Alongc           #250 Byte
 | 
						|
Alongc=$Alongc$AEligatu$AEligatu                     #254 Byte
 | 
						|
 | 
						|
test_expect_success "detect if nfd needed" '
 | 
						|
	precomposeunicode=`git config core.precomposeunicode` &&
 | 
						|
	test "$precomposeunicode" = true &&
 | 
						|
	git config core.precomposeunicode true
 | 
						|
'
 | 
						|
test_expect_success "setup" '
 | 
						|
	>x &&
 | 
						|
	git add x &&
 | 
						|
	git commit -m "1st commit" &&
 | 
						|
	git rm x &&
 | 
						|
	git commit -m "rm x"
 | 
						|
'
 | 
						|
test_expect_success "setup case mac" '
 | 
						|
	git checkout -b mac_os
 | 
						|
'
 | 
						|
# This will test nfd2nfc in readdir()
 | 
						|
test_expect_success "add file Adiarnfc" '
 | 
						|
	echo f.Adiarnfc >f.$Adiarnfc &&
 | 
						|
	git add f.$Adiarnfc &&
 | 
						|
	git commit -m "add f.$Adiarnfc"
 | 
						|
'
 | 
						|
# This will test nfd2nfc in git stage()
 | 
						|
test_expect_success "stage file d.Adiarnfd/f.Adiarnfd" '
 | 
						|
	mkdir d.$Adiarnfd &&
 | 
						|
	echo d.$Adiarnfd/f.$Adiarnfd >d.$Adiarnfd/f.$Adiarnfd &&
 | 
						|
	git stage d.$Adiarnfd/f.$Adiarnfd &&
 | 
						|
	git commit -m "add d.$Adiarnfd/f.$Adiarnfd"
 | 
						|
'
 | 
						|
test_expect_success "add link Adiarnfc" '
 | 
						|
	ln -s d.$Adiarnfd/f.$Adiarnfd l.$Adiarnfc &&
 | 
						|
	git add l.$Adiarnfc &&
 | 
						|
	git commit -m "add l.Adiarnfc"
 | 
						|
'
 | 
						|
# This will test git log
 | 
						|
test_expect_success "git log f.Adiar" '
 | 
						|
	git log f.$Adiarnfc > f.Adiarnfc.log &&
 | 
						|
	git log f.$Adiarnfd > f.Adiarnfd.log &&
 | 
						|
	test -s f.Adiarnfc.log &&
 | 
						|
	test -s f.Adiarnfd.log &&
 | 
						|
	test_cmp f.Adiarnfc.log f.Adiarnfd.log &&
 | 
						|
	rm f.Adiarnfc.log f.Adiarnfd.log
 | 
						|
'
 | 
						|
# This will test git ls-files
 | 
						|
test_expect_success "git lsfiles f.Adiar" '
 | 
						|
	git ls-files f.$Adiarnfc > f.Adiarnfc.log &&
 | 
						|
	git ls-files f.$Adiarnfd > f.Adiarnfd.log &&
 | 
						|
	test -s f.Adiarnfc.log &&
 | 
						|
	test -s f.Adiarnfd.log &&
 | 
						|
	test_cmp f.Adiarnfc.log f.Adiarnfd.log &&
 | 
						|
	rm f.Adiarnfc.log f.Adiarnfd.log
 | 
						|
'
 | 
						|
# This will test git mv
 | 
						|
test_expect_success "git mv" '
 | 
						|
	git mv f.$Adiarnfd f.$Odiarnfc &&
 | 
						|
	git mv d.$Adiarnfd d.$Odiarnfc &&
 | 
						|
	git mv l.$Adiarnfd l.$Odiarnfc &&
 | 
						|
	git commit -m "mv Adiarnfd Odiarnfc"
 | 
						|
'
 | 
						|
# Files can be checked out as nfc
 | 
						|
# And the link has been corrected from nfd to nfc
 | 
						|
test_expect_success "git checkout nfc" '
 | 
						|
	rm f.$Odiarnfc &&
 | 
						|
	git checkout f.$Odiarnfc
 | 
						|
'
 | 
						|
# Make it possible to checkout files with their NFD names
 | 
						|
test_expect_success "git checkout file nfd" '
 | 
						|
	rm -f f.* &&
 | 
						|
	git checkout f.$Odiarnfd
 | 
						|
'
 | 
						|
# Make it possible to checkout links with their NFD names
 | 
						|
test_expect_success "git checkout link nfd" '
 | 
						|
	rm l.* &&
 | 
						|
	git checkout l.$Odiarnfd
 | 
						|
'
 | 
						|
test_expect_success "setup case mac2" '
 | 
						|
	git checkout master &&
 | 
						|
	git reset --hard &&
 | 
						|
	git checkout -b mac_os_2
 | 
						|
'
 | 
						|
# This will test nfd2nfc in git commit
 | 
						|
test_expect_success "commit file d2.Adiarnfd/f.Adiarnfd" '
 | 
						|
	mkdir d2.$Adiarnfd &&
 | 
						|
	echo d2.$Adiarnfd/f.$Adiarnfd >d2.$Adiarnfd/f.$Adiarnfd &&
 | 
						|
	git add d2.$Adiarnfd/f.$Adiarnfd &&
 | 
						|
	git commit -m "add d2.$Adiarnfd/f.$Adiarnfd" -- d2.$Adiarnfd/f.$Adiarnfd
 | 
						|
'
 | 
						|
test_expect_success "setup for long decomposed filename" '
 | 
						|
	git checkout master &&
 | 
						|
	git reset --hard &&
 | 
						|
	git checkout -b mac_os_long_nfd_fn
 | 
						|
'
 | 
						|
test_expect_success "Add long decomposed filename" '
 | 
						|
	echo longd >$Alongd &&
 | 
						|
	git add * &&
 | 
						|
	git commit -m "Long filename"
 | 
						|
'
 | 
						|
test_expect_success "setup for long precomposed filename" '
 | 
						|
	git checkout master &&
 | 
						|
	git reset --hard &&
 | 
						|
	git checkout -b mac_os_long_nfc_fn
 | 
						|
'
 | 
						|
test_expect_success "Add long precomposed filename" '
 | 
						|
	echo longc >$Alongc &&
 | 
						|
	git add * &&
 | 
						|
	git commit -m "Long filename"
 | 
						|
'
 | 
						|
# Test if the global core.precomposeunicode stops autosensing
 | 
						|
# Must be the last test case
 | 
						|
test_expect_success "respect git config --global core.precomposeunicode" '
 | 
						|
	git config --global core.precomposeunicode true &&
 | 
						|
	rm -rf .git &&
 | 
						|
	git init &&
 | 
						|
	precomposeunicode=`git config core.precomposeunicode` &&
 | 
						|
	test "$precomposeunicode" = "true"
 | 
						|
'
 | 
						|
 | 
						|
test_done
 |