]>
Commit | Line | Data |
---|---|---|
6de08ae6 SP |
1 | #!/bin/sh |
2 | # | |
3 | # Copyright (c) 2006 Shawn Pearce | |
4 | # | |
5 | ||
5be60078 | 6 | test_description='Test git update-ref and basic ref logging' |
6de08ae6 SP |
7 | . ./test-lib.sh |
8 | ||
9 | Z=0000000000000000000000000000000000000000 | |
10 | A=1111111111111111111111111111111111111111 | |
11 | B=2222222222222222222222222222222222222222 | |
e5229042 SP |
12 | C=3333333333333333333333333333333333333333 |
13 | D=4444444444444444444444444444444444444444 | |
14 | E=5555555555555555555555555555555555555555 | |
15 | F=6666666666666666666666666666666666666666 | |
6de08ae6 | 16 | m=refs/heads/master |
818f477c SP |
17 | n_dir=refs/heads/gu |
18 | n=$n_dir/fixes | |
6de08ae6 SP |
19 | |
20 | test_expect_success \ | |
21 | "create $m" \ | |
5be60078 | 22 | "git update-ref $m $A && |
8aac4b45 | 23 | test $A"' = $(cat .git/'"$m"')' |
6de08ae6 SP |
24 | test_expect_success \ |
25 | "create $m" \ | |
5be60078 | 26 | "git update-ref $m $B $A && |
8aac4b45 | 27 | test $B"' = $(cat .git/'"$m"')' |
6de08ae6 SP |
28 | rm -f .git/$m |
29 | ||
818f477c SP |
30 | test_expect_success \ |
31 | "fail to create $n" \ | |
8aac4b45 | 32 | "touch .git/$n_dir |
5be60078 | 33 | git update-ref $n $A >out 2>err"' |
ef176ad0 | 34 | test $? != 0' |
818f477c SP |
35 | rm -f .git/$n_dir out err |
36 | ||
6de08ae6 SP |
37 | test_expect_success \ |
38 | "create $m (by HEAD)" \ | |
5be60078 | 39 | "git update-ref HEAD $A && |
8aac4b45 | 40 | test $A"' = $(cat .git/'"$m"')' |
6de08ae6 SP |
41 | test_expect_success \ |
42 | "create $m (by HEAD)" \ | |
5be60078 | 43 | "git update-ref HEAD $B $A && |
8aac4b45 | 44 | test $B"' = $(cat .git/'"$m"')' |
6de08ae6 SP |
45 | rm -f .git/$m |
46 | ||
47 | test_expect_failure \ | |
48 | '(not) create HEAD with old sha1' \ | |
5be60078 | 49 | "git update-ref HEAD $A $B" |
6de08ae6 SP |
50 | test_expect_failure \ |
51 | "(not) prior created .git/$m" \ | |
8aac4b45 | 52 | "test -f .git/$m" |
6de08ae6 SP |
53 | rm -f .git/$m |
54 | ||
55 | test_expect_success \ | |
56 | "create HEAD" \ | |
5be60078 | 57 | "git update-ref HEAD $A" |
6de08ae6 SP |
58 | test_expect_failure \ |
59 | '(not) change HEAD with wrong SHA1' \ | |
5be60078 | 60 | "git update-ref HEAD $B $Z" |
6de08ae6 SP |
61 | test_expect_failure \ |
62 | "(not) changed .git/$m" \ | |
8aac4b45 | 63 | "test $B"' = $(cat .git/'"$m"')' |
6de08ae6 SP |
64 | rm -f .git/$m |
65 | ||
0bee5918 SP |
66 | : a repository with working tree always has reflog these days... |
67 | : >.git/logs/refs/heads/master | |
6de08ae6 SP |
68 | test_expect_success \ |
69 | "create $m (logged by touch)" \ | |
70 | 'GIT_COMMITTER_DATE="2005-05-26 23:30" \ | |
5be60078 | 71 | git update-ref HEAD '"$A"' -m "Initial Creation" && |
8aac4b45 | 72 | test '"$A"' = $(cat .git/'"$m"')' |
6de08ae6 SP |
73 | test_expect_success \ |
74 | "update $m (logged by touch)" \ | |
75 | 'GIT_COMMITTER_DATE="2005-05-26 23:31" \ | |
5be60078 | 76 | git update-ref HEAD'" $B $A "'-m "Switch" && |
8aac4b45 | 77 | test '"$B"' = $(cat .git/'"$m"')' |
6de08ae6 SP |
78 | test_expect_success \ |
79 | "set $m (logged by touch)" \ | |
80 | 'GIT_COMMITTER_DATE="2005-05-26 23:41" \ | |
5be60078 | 81 | git update-ref HEAD'" $A && |
8aac4b45 | 82 | test $A"' = $(cat .git/'"$m"')' |
6de08ae6 SP |
83 | |
84 | cat >expect <<EOF | |
85 | $Z $A $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150200 +0000 Initial Creation | |
86 | $A $B $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150260 +0000 Switch | |
87 | $B $A $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150860 +0000 | |
88 | EOF | |
89 | test_expect_success \ | |
90 | "verifying $m's log" \ | |
8aac4b45 | 91 | "diff expect .git/logs/$m" |
6de08ae6 SP |
92 | rm -rf .git/$m .git/logs expect |
93 | ||
94 | test_expect_success \ | |
95 | 'enable core.logAllRefUpdates' \ | |
5be60078 JH |
96 | 'git config core.logAllRefUpdates true && |
97 | test true = $(git config --bool --get core.logAllRefUpdates)' | |
6de08ae6 SP |
98 | |
99 | test_expect_success \ | |
100 | "create $m (logged by config)" \ | |
101 | 'GIT_COMMITTER_DATE="2005-05-26 23:32" \ | |
5be60078 | 102 | git update-ref HEAD'" $A "'-m "Initial Creation" && |
8aac4b45 | 103 | test '"$A"' = $(cat .git/'"$m"')' |
6de08ae6 SP |
104 | test_expect_success \ |
105 | "update $m (logged by config)" \ | |
106 | 'GIT_COMMITTER_DATE="2005-05-26 23:33" \ | |
5be60078 | 107 | git update-ref HEAD'" $B $A "'-m "Switch" && |
8aac4b45 | 108 | test '"$B"' = $(cat .git/'"$m"')' |
6de08ae6 SP |
109 | test_expect_success \ |
110 | "set $m (logged by config)" \ | |
111 | 'GIT_COMMITTER_DATE="2005-05-26 23:43" \ | |
5be60078 | 112 | git update-ref HEAD '"$A && |
8aac4b45 | 113 | test $A"' = $(cat .git/'"$m"')' |
6de08ae6 SP |
114 | |
115 | cat >expect <<EOF | |
116 | $Z $A $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150320 +0000 Initial Creation | |
117 | $A $B $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150380 +0000 Switch | |
118 | $B $A $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150980 +0000 | |
119 | EOF | |
120 | test_expect_success \ | |
121 | "verifying $m's log" \ | |
122 | 'diff expect .git/logs/$m' | |
123 | rm -f .git/$m .git/logs/$m expect | |
124 | ||
5be60078 | 125 | git update-ref $m $D |
e5229042 SP |
126 | cat >.git/logs/$m <<EOF |
127 | $C $A $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150320 -0500 | |
128 | $A $B $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150380 -0500 | |
129 | $F $Z $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150680 -0500 | |
130 | $Z $E $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150980 -0500 | |
131 | EOF | |
132 | ||
133 | ed="Thu, 26 May 2005 18:32:00 -0500" | |
134 | gd="Thu, 26 May 2005 18:33:00 -0500" | |
135 | ld="Thu, 26 May 2005 18:43:00 -0500" | |
136 | test_expect_success \ | |
cce91a2c | 137 | 'Query "master@{May 25 2005}" (before history)' \ |
e5229042 | 138 | 'rm -f o e |
5be60078 | 139 | git rev-parse --verify "master@{May 25 2005}" >o 2>e && |
8aac4b45 | 140 | test '"$C"' = $(cat o) && |
16d7cc90 | 141 | test "warning: Log for '\'master\'' only goes back to $ed." = "$(cat e)"' |
e5229042 | 142 | test_expect_success \ |
cce91a2c | 143 | "Query master@{2005-05-25} (before history)" \ |
e5229042 | 144 | 'rm -f o e |
5be60078 | 145 | git rev-parse --verify master@{2005-05-25} >o 2>e && |
8aac4b45 | 146 | test '"$C"' = $(cat o) && |
16d7cc90 | 147 | echo test "warning: Log for '\'master\'' only goes back to $ed." = "$(cat e)"' |
e5229042 | 148 | test_expect_success \ |
cce91a2c | 149 | 'Query "master@{May 26 2005 23:31:59}" (1 second before history)' \ |
e5229042 | 150 | 'rm -f o e |
5be60078 | 151 | git rev-parse --verify "master@{May 26 2005 23:31:59}" >o 2>e && |
8aac4b45 | 152 | test '"$C"' = $(cat o) && |
16d7cc90 | 153 | test "warning: Log for '\''master'\'' only goes back to $ed." = "$(cat e)"' |
e5229042 | 154 | test_expect_success \ |
cce91a2c | 155 | 'Query "master@{May 26 2005 23:32:00}" (exactly history start)' \ |
e5229042 | 156 | 'rm -f o e |
5be60078 | 157 | git rev-parse --verify "master@{May 26 2005 23:32:00}" >o 2>e && |
8aac4b45 | 158 | test '"$A"' = $(cat o) && |
e5229042 SP |
159 | test "" = "$(cat e)"' |
160 | test_expect_success \ | |
cce91a2c | 161 | 'Query "master@{2005-05-26 23:33:01}" (middle of history with gap)' \ |
e5229042 | 162 | 'rm -f o e |
5be60078 | 163 | git rev-parse --verify "master@{2005-05-26 23:33:01}" >o 2>e && |
8aac4b45 JH |
164 | test '"$B"' = $(cat o) && |
165 | test "warning: Log .git/logs/'"$m has gap after $gd"'." = "$(cat e)"' | |
e5229042 | 166 | test_expect_success \ |
cce91a2c | 167 | 'Query "master@{2005-05-26 23:38:00}" (middle of history)' \ |
e5229042 | 168 | 'rm -f o e |
5be60078 | 169 | git rev-parse --verify "master@{2005-05-26 23:38:00}" >o 2>e && |
8aac4b45 | 170 | test '"$Z"' = $(cat o) && |
e5229042 SP |
171 | test "" = "$(cat e)"' |
172 | test_expect_success \ | |
cce91a2c | 173 | 'Query "master@{2005-05-26 23:43:00}" (exact end of history)' \ |
e5229042 | 174 | 'rm -f o e |
5be60078 | 175 | git rev-parse --verify "master@{2005-05-26 23:43:00}" >o 2>e && |
8aac4b45 | 176 | test '"$E"' = $(cat o) && |
e5229042 SP |
177 | test "" = "$(cat e)"' |
178 | test_expect_success \ | |
cce91a2c | 179 | 'Query "master@{2005-05-28}" (past end of history)' \ |
e5229042 | 180 | 'rm -f o e |
5be60078 | 181 | git rev-parse --verify "master@{2005-05-28}" >o 2>e && |
8aac4b45 JH |
182 | test '"$D"' = $(cat o) && |
183 | test "warning: Log .git/logs/'"$m unexpectedly ended on $ld"'." = "$(cat e)"' | |
e5229042 | 184 | |
cce91a2c SP |
185 | |
186 | rm -f .git/$m .git/logs/$m expect | |
187 | ||
188 | test_expect_success \ | |
189 | 'creating initial files' \ | |
9c7466fa | 190 | 'echo TEST >F && |
5be60078 | 191 | git add F && |
9c7466fa | 192 | GIT_AUTHOR_DATE="2005-05-26 23:30" \ |
cce91a2c | 193 | GIT_COMMITTER_DATE="2005-05-26 23:30" git-commit -m add -a && |
5be60078 | 194 | h_TEST=$(git rev-parse --verify HEAD) |
9c7466fa SP |
195 | echo The other day this did not work. >M && |
196 | echo And then Bob told me how to fix it. >>M && | |
197 | echo OTHER >F && | |
198 | GIT_AUTHOR_DATE="2005-05-26 23:41" \ | |
199 | GIT_COMMITTER_DATE="2005-05-26 23:41" git-commit -F M -a && | |
5be60078 | 200 | h_OTHER=$(git rev-parse --verify HEAD) && |
a3a733e6 SP |
201 | GIT_AUTHOR_DATE="2005-05-26 23:44" \ |
202 | GIT_COMMITTER_DATE="2005-05-26 23:44" git-commit --amend && | |
5be60078 | 203 | h_FIXED=$(git rev-parse --verify HEAD) && |
a3a733e6 SP |
204 | echo Merged initial commit and a later commit. >M && |
205 | echo $h_TEST >.git/MERGE_HEAD && | |
206 | GIT_AUTHOR_DATE="2005-05-26 23:45" \ | |
207 | GIT_COMMITTER_DATE="2005-05-26 23:45" git-commit -F M && | |
d9c8344b | 208 | h_MERGED=$(git rev-parse --verify HEAD) && |
9c7466fa SP |
209 | rm -f M' |
210 | ||
211 | cat >expect <<EOF | |
a3a733e6 | 212 | $Z $h_TEST $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150200 +0000 commit (initial): add |
9c7466fa | 213 | $h_TEST $h_OTHER $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150860 +0000 commit: The other day this did not work. |
a3a733e6 SP |
214 | $h_OTHER $h_FIXED $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117151040 +0000 commit (amend): The other day this did not work. |
215 | $h_FIXED $h_MERGED $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117151100 +0000 commit (merge): Merged initial commit and a later commit. | |
9c7466fa SP |
216 | EOF |
217 | test_expect_success \ | |
218 | 'git-commit logged updates' \ | |
8aac4b45 | 219 | "diff expect .git/logs/$m" |
a3a733e6 | 220 | unset h_TEST h_OTHER h_FIXED h_MERGED |
cce91a2c SP |
221 | |
222 | test_expect_success \ | |
5be60078 JH |
223 | 'git cat-file blob master:F (expect OTHER)' \ |
224 | 'test OTHER = $(git cat-file blob master:F)' | |
cce91a2c | 225 | test_expect_success \ |
5be60078 JH |
226 | 'git cat-file blob master@{2005-05-26 23:30}:F (expect TEST)' \ |
227 | 'test TEST = $(git cat-file blob "master@{2005-05-26 23:30}:F")' | |
cce91a2c | 228 | test_expect_success \ |
5be60078 JH |
229 | 'git cat-file blob master@{2005-05-26 23:42}:F (expect OTHER)' \ |
230 | 'test OTHER = $(git cat-file blob "master@{2005-05-26 23:42}:F")' | |
cce91a2c | 231 | |
6de08ae6 | 232 | test_done |