]> git.ipfire.org Git - thirdparty/git.git/commitdiff
stash: add tests to ensure reflog --rewrite --updatref behavior
authorJohn Cai <johncai86@gmail.com>
Wed, 2 Mar 2022 22:27:22 +0000 (22:27 +0000)
committerJunio C Hamano <gitster@pobox.com>
Wed, 2 Mar 2022 23:24:46 +0000 (15:24 -0800)
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>
t/t3903-stash.sh

index b149e2af44185d5a78ff7eff1e2c0efb67f35f4d..a2f8d0c52e79fd0f50f418b16ddabac82e8ea6c1 100755 (executable)
@@ -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 &&