These tests cover the basic functionality of retaining
reflogs for deleted refs.

Signed-off-by: Jeff King <p...@peff.net>
---
 t/t1413-reflog-deletion.sh | 74 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 74 insertions(+)
 create mode 100755 t/t1413-reflog-deletion.sh

diff --git a/t/t1413-reflog-deletion.sh b/t/t1413-reflog-deletion.sh
new file mode 100755
index 0000000..e00d038
--- /dev/null
+++ b/t/t1413-reflog-deletion.sh
@@ -0,0 +1,74 @@
+#!/bin/sh
+
+test_description='test retention of reflog after ref deletion'
+. ./test-lib.sh
+
+test_expect_success 'setup deleted branch' '
+       test_tick && echo one >file && git add file && git commit -m one &&
+       test_tick && echo two >file && git add file && git commit -m two &&
+       git checkout -b foo/bar &&
+       test_tick && echo three >file && git add file && git commit -m three &&
+       git checkout master &&
+       git branch -D foo/bar &&
+       rm -f .git/logs/HEAD
+'
+
+test_expect_success 'branch is no longer accessible' '
+       test_must_fail git rev-parse --verify foo/bar
+'
+
+test_expect_success 'final reflog is null sha1' '
+       echo $_z40 >expect &&
+       git rev-parse --verify foo/bar@{0} >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success 'deleted reflog entries are accessible' '
+       cat >expect <<-\EOF &&
+       three
+       two
+       EOF
+       {
+               git log -1 --format=%s foo/bar@{1}
+               git log -1 --format=%s foo/bar@{2}
+       } >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success 'reflog walker can find deleted entries' '
+       cat >expect <<-\EOF &&
+       three
+       two
+       EOF
+       git log -g --format=%s foo/bar@{1} >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success 'can still create/delete same ref' '
+       git branch foo/bar &&
+       git branch -D foo/bar
+'
+
+test_expect_success 'can still create/delete parent ref' '
+       git branch foo &&
+       git branch -D foo
+'
+
+test_expect_success 'can still create/delete child ref' '
+       git branch foo/bar/baz &&
+       git branch -D foo/bar/baz
+'
+
+test_expect_success 'deleted reflog entries are still reachable' '
+       >expect &&
+       git fsck --unreachable >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success 'deleted reflog entries are expired normally' '
+       git reflog expire --all --expire=now &&
+       git fsck --unreachable >actual &&
+       test_line_count = 3 actual
+'
+
+test_done
-- 
1.7.10.5.40.g059818d
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to