stash: add tests to ensure reflog --rewrite --updatref behavior

There is missing test coverage to ensure that the resulting reflogs
after a git stash drop has had its old oid rewritten if applicable, and
if the refs/stash has been updated if applicable.

Add two tests that verify both of these happen.

Helped-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: John Cai <johncai86@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
John Cai 2022-03-02 22:27:22 +00:00 committed by Junio C Hamano
parent 715d08a9e5
commit 76bccbcfe2

View File

@ -41,7 +41,7 @@ diff_cmp () {
rm -f "$1.compare" "$2.compare"
}
test_expect_success 'stash some dirty working directory' '
setup_stash() {
echo 1 >file &&
git add file &&
echo unrelated >other-file &&
@ -55,6 +55,10 @@ test_expect_success 'stash some dirty working directory' '
git stash &&
git diff-files --quiet &&
git diff-index --cached --quiet HEAD
}
test_expect_success 'stash some dirty working directory' '
setup_stash
'
cat >expect <<EOF
@ -185,6 +189,43 @@ test_expect_success 'drop middle stash by index' '
test 1 = $(git show HEAD:file)
'
test_expect_success 'drop stash reflog updates refs/stash' '
git reset --hard &&
git rev-parse refs/stash >expect &&
echo 9 >file &&
git stash &&
git stash drop stash@{0} &&
git rev-parse refs/stash >actual &&
test_cmp expect actual
'
test_expect_success REFFILES 'drop stash reflog updates refs/stash with rewrite' '
git init repo &&
(
cd repo &&
setup_stash
) &&
echo 9 >repo/file &&
old_oid="$(git -C repo rev-parse stash@{0})" &&
git -C repo stash &&
new_oid="$(git -C repo rev-parse stash@{0})" &&
cat >expect <<-EOF &&
$(test_oid zero) $old_oid
$old_oid $new_oid
EOF
cut -d" " -f1-2 repo/.git/logs/refs/stash >actual &&
test_cmp expect actual &&
git -C repo stash drop stash@{1} &&
cut -d" " -f1-2 repo/.git/logs/refs/stash >actual &&
cat >expect <<-EOF &&
$(test_oid zero) $new_oid
EOF
test_cmp expect actual
'
test_expect_success 'stash pop' '
git reset --hard &&
git stash pop &&