On Thu, May 27 2021, Ævar Arnfjörð Bjarmason wrote: > On Wed, May 26 2021, Matheus Tavares wrote: > >> t2080 makes a few copies of a test repository and later performs a >> branch switch on each one of the copies to verify that parallel checkout >> and sequential checkout produce the same results. However, the >> repository is copied with `cp -R` which, on some systems, defaults to >> following symlinks on the directory hierarchy and copying their target >> files instead of copying the symlinks themselves. AIX is one example of >> system where this happens. Because the symlinks are not preserved, the >> copied repositories have paths that do not match what is in the index, >> causing git to abort the checkout operation that we want to test. This >> makes the test fail on these systems. >> >> Fix this by copying the repository with the POSIX flag '-P', which >> forces cp to copy the symlinks instead of following them. Note that we >> already use this flag for other cp invocations in our test suite (see >> t7001). With this change, t2080 now passes on AIX. >> >> Reported-by: Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx> >> Signed-off-by: Matheus Tavares <matheus.bernardino@xxxxxx> >> --- >> t/t2080-parallel-checkout-basics.sh | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/t/t2080-parallel-checkout-basics.sh b/t/t2080-parallel-checkout-basics.sh >> index 7087818550..3e0f8c675f 100755 >> --- a/t/t2080-parallel-checkout-basics.sh >> +++ b/t/t2080-parallel-checkout-basics.sh >> @@ -114,7 +114,7 @@ do >> >> test_expect_success "$mode checkout" ' >> repo=various_$mode && >> - cp -R various $repo && >> + cp -R -P various $repo && >> >> # The just copied files have more recent timestamps than their >> # associated index entries. So refresh the cached timestamps > > Thanks for the quick fix, I can confirm that this makes the test pass on > AIX 7.2. There's still a failure[1] in t2082-parallel-checkout-attributes.sh though, which is new in 2.32.0-rc*. The difference is in an unexpected BOM: avar@gcc119:[/scratch/avar/git/t]perl -nle 'print unpack "H*"' trash\ directory.t2082-parallel-checkout-attributes/encoding/A.internal efbbbf74657874 avar@gcc119:[/scratch/avar/git/t]perl -nle 'print unpack "H*"' trash\ directory.t2082-parallel-checkout-attributes/encoding/utf8-text 74657874 I.e. the A.internal starts with 0xefbbbf. The 2nd test of t0028*.sh also fails similarly[2], so perhaps it's some old/iconv/whatever issue not per-se related to any change of yours. I tried compiling with both NO_ICONV=Y and ICONV_OMITS_BOM=Y, both have the same failure. In any case, I think AIX test failures (or other obscure platforms I test) are rather uninteresting per-se, I mainly test on these to smoke out bad assumptions elsewhere. E.g. non-POSIX code, perhaps in this case we're relying on some unportable iconv assumption, or maybe not... 1. Initialized empty Git repository in /scratch/avar/git/t/trash directory.t2082-parallel-checkout-attributes/encoding/.git/ + cd encoding + echo text + 1> utf8-text + write_utf16 + 0< utf8-text 1> utf16-text checking prerequisite: NO_UTF16_BOM mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-NO_UTF16_BOM" && ( cd "$TRASH_DIRECTORY/prereq-test-dir-NO_UTF16_BOM" && test $(printf abc | iconv -f UTF-8 -t UTF-16 | wc -c) = 6 ) + mkdir -p /scratch/avar/git/t/trash directory.t2082-parallel-checkout-attributes/prereq-test-dir-NO_UTF16_BOM + cd /scratch/avar/git/t/trash directory.t2082-parallel-checkout-attributes/prereq-test-dir-NO_UTF16_BOM + printf abc + iconv -f UTF-8 -t UTF-16 + wc -c + test 6 = 6 prerequisite NO_UTF16_BOM ok + echo A working-tree-encoding=UTF-16 + 1> .gitattributes + cp utf16-text A + cp utf8-text B + git add A B .gitattributes + git commit -m encoding [master (root-commit) 65fa7e8] encoding Author: A U Thor <author@xxxxxxxxxxx> 3 files changed, 3 insertions(+) create mode 100644 .gitattributes create mode 100644 A create mode 100644 B + git cat-file -p :A + 1> A.internal + test_cmp_bin utf8-text A.internal utf8-text A.internal differ: char 1, line 1 error: last command exited with $?=1 not ok 2 - parallel-checkout with re-encoding # # set_checkout_config 2 0 && # git init encoding && # ( # cd encoding && # echo text >utf8-text && # write_utf16 <utf8-text >utf16-text && # # echo "A working-tree-encoding=UTF-16" >.gitattributes && # cp utf16-text A && # cp utf8-text B && # git add A B .gitattributes && # git commit -m encoding && # # # Check that A is stored in UTF-8 # git cat-file -p :A >A.internal && # test_cmp_bin utf8-text A.internal && # # rm A B && # test_checkout_workers 2 git checkout A B && # # # Check that A (and only A) is re-encoded during checkout # test_cmp_bin utf16-text A && # test_cmp_bin utf8-text B # ) # 2. avar@gcc119:[/scratch/avar/git/t]perl -nle 'print unpack "H*"' trash\ directory.t0028-working-tree-encoding/test.utf8.raw 68616c6c6f20746865726521 63616e20796f752072656164206d653f avar@gcc119:[/scratch/avar/git/t]perl -nle 'print unpack "H*"' trash\ directory.t0028-working-tree-encoding/test.utf16.git efbbbf68616c6c6f20746865726521 63616e20796f752072656164206d653f