Opened 4 years ago
Last modified 4 years ago
#62231 assigned defect
git 2.30.0_0 [+credential_osxkeychain+diff_highlight+doc+pcre+perl5_28]: port test fails
Reported by: | Aloisius (Jordan Mendelson) | Owned by: | ci42 |
---|---|---|---|
Priority: | Normal | Milestone: | |
Component: | ports | Version: | 2.6.4 |
Keywords: | Cc: | ||
Port: | git |
Description (last modified by mf2k (Frank Schima))
With a clean installation of MacPorts on an m1 macbook pro, port test git fails on macOS 11.2 20D64 with Xcode 12.4 12D4e.
- Installed brand new macports (nothing in /opt)
- sudo port selfupdate
- sudo port install git
- sudo port test git <- this fails
From the port log:
:info:test *** t3305-notes-fanout.sh *** :info:test ok 1 - tweak test environment :info:test ok 2 - creating many notes with git-notes :info:test ok 3 - many notes created correctly with git-notes :info:test not ok 4 - stable fanout 0 is followed by stable fanout 1 :info:test # :info:test # i=$num_notes && :info:test # fanout=0 && :info:test # while test $i -gt 0 :info:test # do :info:test # i=$(($i - 1)) && :info:test # if touched_one_note_with_fanout refs/notes/commits~$i A $fanout :info:test # then :info:test # continue :info:test # elif test $fanout -eq 0 :info:test # then :info:test # fanout=1 && :info:test # if all_notes_have_fanout refs/notes/commits~$i $fanout :info:test # then :info:test # echo "Fanout 0 -> 1 at refs/notes/commits~$i" && :info:test # continue :info:test # fi :info:test # fi && :info:test # echo "Failed fanout=$fanout check at refs/notes/commits~$i" && :info:test # git ls-tree -r --name-only refs/notes/commits~$i && :info:test # return 1 :info:test # done && :info:test # all_notes_have_fanout refs/notes/commits 1 :info:test # :info:test ok 5 - deleting most notes with git-notes :info:test ok 6 - most notes deleted correctly with git-notes :info:test ok 7 - stable fanout 1 is followed by stable fanout 0 :info:test # failed 1 among 7 test(s) :info:test 1..7 :info:test make[2]: *** [t3305-notes-fanout.sh] Error 1 :info:test make[1]: *** [test] Error 2 :info:test make: *** [test] Error 2 :info:test Command failed: cd "/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_devel_git/git/work/git-2.30.0" && make test CFLAGS="-I. -Wall -O2 -I/opt/local/include -arch arm64" LDFLAGS="-L/opt/local/lib -arch arm64" CC=/usr/bin/clang prefix=/opt/local CURLDIR=/opt/local OPENSSLDIR=/opt/local ICONVDIR=/opt/local PERL_PATH="/opt/local/bin/perl5.28" PYTHON_PATH="/opt/local/bin/python3.8" NO_FINK=1 NO_DARWIN_PORTS=1 NO_R_TO_GCC_LINKER=1 NO_PERL_CPAN_FALLBACK=1 V=1 LIBPCREDIR=/opt/local USE_LIBPCRE2=1 :info:test Exit code: 2 :error:test Failed to test git: command execution failed
Building directly from source using the system toolchain using this works fine:
$ make V=1 PYTHON_PATH=/usr/bin/python3 PERL_PATH=/usr/bin/perl NO_GETTEXT=1 NO_DARWIN_PORTS=1 NO_FINK=1 test
Attachments (2)
Change History (5)
comment:1 Changed 4 years ago by mf2k (Frank Schima)
Cc: | ci42 removed |
---|---|
Owner: | set to ci42 |
Status: | new → assigned |
comment:2 Changed 4 years ago by mf2k (Frank Schima)
Description: | modified (diff) |
---|
Changed 4 years ago by Aloisius (Jordan Mendelson)
Changed 4 years ago by Aloisius (Jordan Mendelson)
Log file of port test git failing on a test
comment:3 Changed 4 years ago by Aloisius (Jordan Mendelson)
This appears to be some issue that only seems to only happen when running tests via port test. port test fails if I force it to use /usr/bin/git instead of the one being built to run the tests against. Running the tests manually from the build dir outside of port test works fine however.
Attached is a stripped down Portfile that is only useful for running port test git that uses the version in /usr/bin/git. It runs a single test: t/t7063-status-untracked-cache.sh. The main.log from the run is also attached.
:info:test not ok 6 - status second time (fully populated cache) :info:test # :info:test # avoid_racy && :info:test # : >../trace && :info:test # GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \ :info:test # git status --porcelain >../actual && :info:test # iuc status --porcelain >../status.iuc && :info:test # test_cmp ../status.expect ../status.iuc && :info:test # test_cmp ../status.expect ../actual && :info:test # cat >../trace.expect <<EOF && :info:test # node creation: 0 :info:test # gitignore invalidation: 0 :info:test # directory invalidation: 0 :info:test # opendir: 0 :info:test # EOF :info:test # test_cmp ../trace.expect ../trace :info:test # :info:test make: *** [t7063-status-untracked-cache.sh] Error 1
The 6th test fails because the modification time of the test worktree directory is changed sometime during/after the 5th test runs which causes git to report that a directory had changed when it was not expected to. This only happens when running under port test.
$ cd git-2.30.0/t/trash\ directory.t7063-status-untracked-cache&& find worktree -exec ~/bin/mtime '{}' \; |sort -n |tail -15 1612669617.401108161: worktree/one 1612669617.401156160: worktree/two 1612669617.401196368: worktree/three 1612669617.401238368: worktree/done/one 1612669617.401241368: worktree/done 1612669617.401275117: worktree/dtwo/two 1612669617.401277951: worktree/dtwo 1612669617.401319617: worktree/dthree/three 1612669617.401322492: worktree/dthree 1612669617.409509364: worktree/.git/objects 1612669617.409997150: worktree/.git/objects/e6 1612669617.410382563: worktree/.git/info/exclude 1612669619.881632275: worktree/.git/index 1612669619.938537713: worktree/.git 1612669619.941513265: worktree
That last entry's mtime should be two seconds prior which is what happens if you run the test manually from the port's build dir:
$ sudo -u macports make t7063-status-untracked-cache.sh -C t GIT_TEST_OPTS="-v -d -x -i -r 1,2,3,4,5" GIT_TEST_INSTALLED="/usr/bin" $ cd t/trash\ directory.t7063-status-untracked-cache&& find worktree -exec ~/bin/mtime '{}' \; |sort -n |tail -15 1612670454.530433683: worktree/one 1612670454.530481932: worktree/two 1612670454.530524431: worktree/three 1612670454.530528931: worktree 1612670454.530562764: worktree/done/one 1612670454.530565931: worktree/done 1612670454.530598305: worktree/dtwo/two 1612670454.530601472: worktree/dtwo 1612670454.530634680: worktree/dthree/three 1612670454.530637680: worktree/dthree 1612670454.538098303: worktree/.git/objects 1612670454.538595169: worktree/.git/objects/e6 1612670454.538964538: worktree/.git/info/exclude 1612670455.612867296: worktree/.git/index 1612670455.670378567: worktree/.git
Conceivably, this could cause corruption if git is called from port. Strangely, there is a function in git specifically to detect this kind of behavior, but it did not detect it (builtin/update-index.c:test_if_untracked_cache_is_supported()).
Stripped down portfile for port test git, uses /usr/bin/git to test