1#!/bin/sh 2 3test_description='Test reflog display routines' 4GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main 5export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME 6 7. ./test-lib.sh 8 9test_expect_success 'setup' ' 10 echo content >file && 11 git add file && 12 test_tick && 13 git commit -m one 14' 15 16commit=$(git rev-parse --short HEAD) 17cat >expect <<'EOF' 18Reflog: HEAD@{0} (C O Mitter <committer@example.com>) 19Reflog message: commit (initial): one 20EOF 21test_expect_success 'log -g shows reflog headers' ' 22 git log -g -1 >tmp && 23 grep ^Reflog <tmp >actual && 24 test_cmp expect actual 25' 26 27cat >expect <<EOF 28$commit HEAD@{0}: commit (initial): one 29EOF 30test_expect_success 'oneline reflog format' ' 31 git log -g -1 --oneline >actual && 32 test_cmp expect actual 33' 34 35test_expect_success 'reflog default format' ' 36 git reflog -1 >actual && 37 test_cmp expect actual 38' 39 40cat >expect <<EOF 41commit $commit 42Reflog: HEAD@{0} (C O Mitter <committer@example.com>) 43Reflog message: commit (initial): one 44Author: A U Thor <author@example.com> 45 46 one 47EOF 48test_expect_success 'override reflog default format' ' 49 git reflog --format=short -1 >actual && 50 test_cmp expect actual 51' 52 53cat >expect <<'EOF' 54Reflog: HEAD@{Thu Apr 7 15:13:13 2005 -0700} (C O Mitter <committer@example.com>) 55Reflog message: commit (initial): one 56EOF 57test_expect_success 'using @{now} syntax shows reflog date (multiline)' ' 58 git log -g -1 HEAD@{now} >tmp && 59 grep ^Reflog <tmp >actual && 60 test_cmp expect actual 61' 62 63cat >expect <<EOF 64$commit HEAD@{Thu Apr 7 15:13:13 2005 -0700}: commit (initial): one 65EOF 66test_expect_success 'using @{now} syntax shows reflog date (oneline)' ' 67 git log -g -1 --oneline HEAD@{now} >actual && 68 test_cmp expect actual 69' 70 71cat >expect <<'EOF' 72HEAD@{Thu Apr 7 15:13:13 2005 -0700} 73EOF 74test_expect_success 'using @{now} syntax shows reflog date (format=%gd)' ' 75 git log -g -1 --format=%gd HEAD@{now} >actual && 76 test_cmp expect actual 77' 78 79cat >expect <<'EOF' 80Reflog: HEAD@{Thu Apr 7 15:13:13 2005 -0700} (C O Mitter <committer@example.com>) 81Reflog message: commit (initial): one 82EOF 83test_expect_success 'using --date= shows reflog date (multiline)' ' 84 git log -g -1 --date=default >tmp && 85 grep ^Reflog <tmp >actual && 86 test_cmp expect actual 87' 88 89cat >expect <<EOF 90$commit HEAD@{Thu Apr 7 15:13:13 2005 -0700}: commit (initial): one 91EOF 92test_expect_success 'using --date= shows reflog date (oneline)' ' 93 git log -g -1 --oneline --date=default >actual && 94 test_cmp expect actual 95' 96 97cat >expect <<'EOF' 98HEAD@{1112911993 -0700} 99EOF 100test_expect_success 'using --date= shows reflog date (format=%gd)' ' 101 git log -g -1 --format=%gd --date=raw >actual && 102 test_cmp expect actual 103' 104 105cat >expect <<'EOF' 106Reflog: HEAD@{0} (C O Mitter <committer@example.com>) 107Reflog message: commit (initial): one 108EOF 109test_expect_success 'log.date does not invoke "--date" magic (multiline)' ' 110 test_config log.date raw && 111 git log -g -1 >tmp && 112 grep ^Reflog <tmp >actual && 113 test_cmp expect actual 114' 115 116cat >expect <<EOF 117$commit HEAD@{0}: commit (initial): one 118EOF 119test_expect_success 'log.date does not invoke "--date" magic (oneline)' ' 120 test_config log.date raw && 121 git log -g -1 --oneline >actual && 122 test_cmp expect actual 123' 124 125cat >expect <<'EOF' 126HEAD@{0} 127EOF 128test_expect_success 'log.date does not invoke "--date" magic (format=%gd)' ' 129 test_config log.date raw && 130 git log -g -1 --format=%gd >actual && 131 test_cmp expect actual 132' 133 134cat >expect <<'EOF' 135HEAD@{0} 136EOF 137test_expect_success '--date magic does not override explicit @{0} syntax' ' 138 git log -g -1 --format=%gd --date=raw HEAD@{0} >actual && 139 test_cmp expect actual 140' 141 142test_expect_success 'empty reflog file' ' 143 git branch empty && 144 git reflog expire --expire=all refs/heads/empty && 145 146 git log -g empty >actual && 147 test_must_be_empty actual 148' 149 150# This guards against the alternative of showing the diffs vs. the 151# reflog ancestor. The reflog used is designed to list the commits 152# more than once, so as to exercise the corresponding logic. 153test_expect_success 'git log -g -p shows diffs vs. parents' ' 154 test_commit two && 155 git branch flipflop && 156 git update-ref refs/heads/flipflop -m flip1 HEAD^ && 157 git update-ref refs/heads/flipflop -m flop1 HEAD && 158 git update-ref refs/heads/flipflop -m flip2 HEAD^ && 159 git log -g -p flipflop >reflog && 160 grep -v ^Reflog reflog >actual && 161 git log -1 -p HEAD^ >log.one && 162 git log -1 -p HEAD >log.two && 163 ( 164 cat log.one && echo && 165 cat log.two && echo && 166 cat log.one && echo && 167 cat log.two 168 ) >expect && 169 test_cmp expect actual 170' 171 172test_expect_success 'reflog exists works' ' 173 git reflog exists refs/heads/main && 174 ! git reflog exists refs/heads/nonexistent 175' 176 177test_done 178