mirror of
https://github.com/git/git.git
synced 2024-11-27 03:53:55 +08:00
03930f93c4
A quick test tells us that t0612 does not trigger any leak: $ make SANITIZE=leak test GIT_TEST_PASSING_SANITIZE_LEAK=check GIT_TEST_SANITIZE_LEAK_LOG=true GIT_TEST_OPTS=-i T=t0612-reftable-jgit-compatibility.sh [...] *** t0612-reftable-jgit-compatibility.sh *** in GIT_TEST_PASSING_SANITIZE_LEAK=check mode, setting --invert-exit-code for TEST_PASSES_SANITIZE_LEAK != true ok 1 - CGit repository can be read by JGit ok 2 - JGit repository can be read by CGit ok 3 - mixed writes from JGit and CGit ok 4 - JGit can read multi-level index # passed all 4 test(s) 1..4 # faking up non-zero exit with --invert-exit-code make[2]: *** [Makefile:75: t0612-reftable-jgit-compatibility.sh] Error 1 Let's mark it as leak-free to silence the machinery activated by `GIT_TEST_PASSING_SANITIZE_LEAK=check`. Reported-by: Jeff King <peff@peff.net> Signed-off-by: Rubén Justo <rjusto@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
134 lines
2.8 KiB
Bash
Executable File
134 lines
2.8 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
test_description='reftables are compatible with JGit'
|
|
|
|
GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
|
|
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
|
|
GIT_TEST_DEFAULT_REF_FORMAT=reftable
|
|
export GIT_TEST_DEFAULT_REF_FORMAT
|
|
|
|
# JGit does not support the 'link' DIRC extension.
|
|
GIT_TEST_SPLIT_INDEX=0
|
|
export GIT_TEST_SPLIT_INDEX
|
|
|
|
TEST_PASSES_SANITIZE_LEAK=true
|
|
. ./test-lib.sh
|
|
|
|
if ! test_have_prereq JGIT
|
|
then
|
|
skip_all='skipping reftable JGit tests; JGit is not present in PATH'
|
|
test_done
|
|
fi
|
|
|
|
if ! test_have_prereq SHA1
|
|
then
|
|
skip_all='skipping reftable JGit tests; JGit does not support SHA256 reftables'
|
|
test_done
|
|
fi
|
|
|
|
test_commit_jgit () {
|
|
touch "$1" &&
|
|
jgit add "$1" &&
|
|
jgit commit -m "$1"
|
|
}
|
|
|
|
test_same_refs () {
|
|
git show-ref --head >cgit.actual &&
|
|
jgit show-ref >jgit-tabs.actual &&
|
|
tr "\t" " " <jgit-tabs.actual >jgit.actual &&
|
|
test_cmp cgit.actual jgit.actual
|
|
}
|
|
|
|
test_same_ref () {
|
|
git rev-parse "$1" >cgit.actual &&
|
|
jgit rev-parse "$1" >jgit.actual &&
|
|
test_cmp cgit.actual jgit.actual
|
|
}
|
|
|
|
test_same_reflog () {
|
|
git reflog "$*" >cgit.actual &&
|
|
jgit reflog "$*" >jgit-newline.actual &&
|
|
sed '/^$/d' <jgit-newline.actual >jgit.actual &&
|
|
test_cmp cgit.actual jgit.actual
|
|
}
|
|
|
|
test_expect_success 'CGit repository can be read by JGit' '
|
|
test_when_finished "rm -rf repo" &&
|
|
git init repo &&
|
|
(
|
|
cd repo &&
|
|
test_commit A &&
|
|
test_same_refs &&
|
|
test_same_ref HEAD &&
|
|
test_same_reflog HEAD
|
|
)
|
|
'
|
|
|
|
test_expect_success 'JGit repository can be read by CGit' '
|
|
test_when_finished "rm -rf repo" &&
|
|
jgit init repo &&
|
|
(
|
|
cd repo &&
|
|
|
|
touch file &&
|
|
jgit add file &&
|
|
jgit commit -m "initial commit" &&
|
|
|
|
# Note that we must convert the ref storage after we have
|
|
# written the default branch. Otherwise JGit will end up with
|
|
# no HEAD at all.
|
|
jgit convert-ref-storage --format=reftable &&
|
|
|
|
test_same_refs &&
|
|
test_same_ref HEAD &&
|
|
# Interestingly, JGit cannot read its own reflog here. CGit can
|
|
# though.
|
|
printf "%s HEAD@{0}: commit (initial): initial commit" "$(git rev-parse --short HEAD)" >expect &&
|
|
git reflog HEAD >actual &&
|
|
test_cmp expect actual
|
|
)
|
|
'
|
|
|
|
test_expect_success 'mixed writes from JGit and CGit' '
|
|
test_when_finished "rm -rf repo" &&
|
|
git init repo &&
|
|
(
|
|
cd repo &&
|
|
|
|
test_commit A &&
|
|
test_commit_jgit B &&
|
|
test_commit C &&
|
|
test_commit_jgit D &&
|
|
|
|
test_same_refs &&
|
|
test_same_ref HEAD &&
|
|
test_same_reflog HEAD
|
|
)
|
|
'
|
|
|
|
test_expect_success 'JGit can read multi-level index' '
|
|
test_when_finished "rm -rf repo" &&
|
|
git init repo &&
|
|
(
|
|
cd repo &&
|
|
|
|
test_commit A &&
|
|
awk "
|
|
BEGIN {
|
|
print \"start\";
|
|
for (i = 0; i < 10000; i++)
|
|
printf \"create refs/heads/branch-%d HEAD\n\", i;
|
|
print \"commit\";
|
|
}
|
|
" >input &&
|
|
git update-ref --stdin <input &&
|
|
|
|
test_same_refs &&
|
|
test_same_ref refs/heads/branch-1 &&
|
|
test_same_ref refs/heads/branch-5738 &&
|
|
test_same_ref refs/heads/branch-9999
|
|
)
|
|
'
|
|
|
|
test_done
|