Re: [PATCH] t2080: fix cp invocation to copy symlinks instead of following them
- From
Đoàn Trần Công Danh <congdanhqx@gmail.com>
- Date
- Jun 2, 2021, 01:36 UTC
- Message-ID
- <YLbgi0jQn8BJ1ue2@danh.dev>
- In-Reply-To
- <871r9n2dlu.fsf@evledraar.gmail.com>
On 2021-05-31 16:01:01+0200, Ævar Arnfjörð Bjarmason <avarab@gmail.com> wrote:
Show 56 quoted lines
> > 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@gmail.com> > >> Signed-off-by: Matheus Tavares <matheus.bernardino@usp.br> > >> --- > >> 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.
The 0xefbbbf looks interesting, it's BOM for utf-8.
> I tried compiling with both NO_ICONV=Y and ICONV_OMITS_BOM=Y, both have > the same failure.
I didn't check the code-path for NO_ICONV=Y but ICONV_OMITS_BOM=Y only affects output of converting *to* utf-16 and utf-32.
So, I think AIX iconv implementation automatically add BOM to utf-8?
Perhap we need to call skip_utf8_bom somewhere?
-- Danh
Show 81 quoted lines
> 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@example.com> > 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
-- Danh