Skip to content

Commit eb29901

Browse files
jeffhostetlergitster
authored andcommitted
t7527: test Unicode NFC/NFD handling on MacOS
Confirm that the daemon reports events using the on-disk spelling for Unicode NFC/NFD characters. On APFS we still have Unicode aliasing, so we cannot create two files that only differ by NFC/NFD, but the on-disk format preserves the spelling used to create the file. On HFS+ we also have aliasing, but the path is always stored on disk in NFD. Signed-off-by: Jeff Hostetler <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 00991e1 commit eb29901

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed

t/t7527-builtin-fsmonitor.sh

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -868,4 +868,59 @@ test_expect_success CASE_INSENSITIVE_FS 'case insensitive+preserving' '
868868
egrep "^event: abc/def/xyz$" ./insensitive.trace
869869
'
870870

871+
# The variable "unicode_debug" is defined in the following library
872+
# script to dump information about how the (OS, FS) handles Unicode
873+
# composition. Uncomment the following line if you want to enable it.
874+
#
875+
# unicode_debug=true
876+
877+
. "$TEST_DIRECTORY/lib-unicode-nfc-nfd.sh"
878+
879+
# See if the OS or filesystem does NFC/NFD aliasing/munging.
880+
#
881+
# The daemon should err on the side of caution and send BOTH the
882+
# NFC and NFD forms. It does not know the original spelling of
883+
# the pathname (how the user thinks it should be spelled), so
884+
# emit both and let the client decide (when necessary). This is
885+
# similar to "core.precomposeUnicode".
886+
#
887+
test_expect_success !UNICODE_COMPOSITION_SENSITIVE 'Unicode nfc/nfd' '
888+
test_when_finished "stop_daemon_delete_repo test_unicode" &&
889+
890+
git init test_unicode &&
891+
892+
start_daemon -C test_unicode --tf "$PWD/unicode.trace" &&
893+
894+
# Create a directory using an NFC spelling.
895+
#
896+
mkdir test_unicode/nfc &&
897+
mkdir test_unicode/nfc/c_${utf8_nfc} &&
898+
899+
# Create a directory using an NFD spelling.
900+
#
901+
mkdir test_unicode/nfd &&
902+
mkdir test_unicode/nfd/d_${utf8_nfd} &&
903+
904+
git -C test_unicode fsmonitor--daemon stop &&
905+
906+
if test_have_prereq UNICODE_NFC_PRESERVED
907+
then
908+
# We should have seen NFC event from OS.
909+
# We should not have synthesized an NFD event.
910+
egrep "^event: nfc/c_${utf8_nfc}/?$" ./unicode.trace &&
911+
egrep -v "^event: nfc/c_${utf8_nfd}/?$" ./unicode.trace
912+
else
913+
# We should have seen NFD event from OS.
914+
# We should have synthesized an NFC event.
915+
egrep "^event: nfc/c_${utf8_nfd}/?$" ./unicode.trace &&
916+
egrep "^event: nfc/c_${utf8_nfc}/?$" ./unicode.trace
917+
fi &&
918+
919+
# We assume UNICODE_NFD_PRESERVED.
920+
# We should have seen explicit NFD from OS.
921+
# We should have synthesized an NFC event.
922+
egrep "^event: nfd/d_${utf8_nfd}/?$" ./unicode.trace &&
923+
egrep "^event: nfd/d_${utf8_nfc}/?$" ./unicode.trace
924+
'
925+
871926
test_done

0 commit comments

Comments
 (0)