3 test_description
='undoing resolution'
7 check_resolve_undo
() {
12 1|
2|
3) die
"Bug in check-resolve-undo test" ;;
24 sha1
=$
(git rev-parse
--verify "$sha1")
25 printf "100644 %s %s\t%s\n" $sha1 $stage $path
27 done >"$msg.expect" &&
28 git ls-files
--resolve-undo >"$msg.actual" &&
29 test_cmp
"$msg.expect" "$msg.actual"
32 prime_resolve_undo
() {
34 git checkout second^
0 &&
36 test_must_fail git merge third^
0 &&
37 echo merge does not leave anything
&&
38 check_resolve_undo empty
&&
39 echo different
>fi
/le
&&
41 echo resolving records
&&
42 check_resolve_undo recorded fi
/le initial
:fi
/le second
:fi
/le third
:fi
/le
45 test_expect_success setup
'
47 test_commit initial fi/le first &&
50 test_commit second fi/le second &&
52 test_commit third fi/le third &&
53 git checkout another &&
54 test_commit fourth fi/le fourth &&
58 test_expect_success
'add records switch clears' '
61 git commit -m merged &&
62 echo committing keeps &&
63 check_resolve_undo kept fi/le initial:fi/le second:fi/le third:fi/le &&
64 git checkout second^0 &&
65 echo switching clears &&
66 check_resolve_undo cleared
69 test_expect_success
'rm records reset clears' '
72 git commit -m merged &&
73 echo committing keeps &&
74 check_resolve_undo kept fi/le initial:fi/le second:fi/le third:fi/le &&
76 echo merge clears upfront &&
77 test_must_fail git merge fourth^0 &&
78 check_resolve_undo nuked &&
81 echo resolving records &&
82 check_resolve_undo recorded fi/le initial:fi/le HEAD:fi/le fourth:fi/le &&
85 echo resetting discards &&
86 check_resolve_undo discarded
89 test_expect_success
'plumbing clears' '
92 git commit -m merged &&
93 echo committing keeps &&
94 check_resolve_undo kept fi/le initial:fi/le second:fi/le third:fi/le &&
96 echo plumbing clear &&
97 git update-index --clear-resolve-undo &&
98 check_resolve_undo cleared
101 test_expect_success
'add records checkout -m undoes' '
102 prime_resolve_undo &&
104 git checkout --conflict=merge fi/le &&
105 echo checkout used the record and removed it &&
106 check_resolve_undo removed &&
107 echo the index and the work tree is unmerged again &&
109 grep "^++<<<<<<<" actual
112 test_expect_success
'unmerge with plumbing' '
113 prime_resolve_undo &&
114 git update-index --unresolve fi/le &&
115 git ls-files -u >actual &&
116 test_line_count = 3 actual
119 test_expect_success
'rerere and rerere forget' '
120 mkdir .git/rr-cache &&
121 prime_resolve_undo &&
122 echo record the resolution &&
124 rerere_id=$(cd .git/rr-cache && echo */postimage) &&
125 rerere_id=${rerere_id%/postimage} &&
126 test -f .git/rr-cache/$rerere_id/postimage &&
127 git checkout -m fi/le &&
128 echo resurrect the conflict &&
129 grep "^=======" fi/le &&
130 echo reresolve the conflict &&
132 test "z$(cat fi/le)" = zdifferent &&
133 echo register the resolution again &&
135 check_resolve_undo kept fi/le initial:fi/le second:fi/le third:fi/le &&
136 test -z "$(git ls-files -u)" &&
137 git rerere forget fi/le &&
138 ! test -f .git/rr-cache/$rerere_id/postimage &&
139 tr "\0" "\n" <.git/MERGE_RR >actual &&
140 echo "$rerere_id fi/le" >expect &&
141 test_cmp expect actual
144 test_expect_success
'rerere and rerere forget (subdirectory)' '
145 rm -fr .git/rr-cache &&
146 mkdir .git/rr-cache &&
147 prime_resolve_undo &&
148 echo record the resolution &&
149 (cd fi && git rerere) &&
150 rerere_id=$(cd .git/rr-cache && echo */postimage) &&
151 rerere_id=${rerere_id%/postimage} &&
152 test -f .git/rr-cache/$rerere_id/postimage &&
153 (cd fi && git checkout -m le) &&
154 echo resurrect the conflict &&
155 grep "^=======" fi/le &&
156 echo reresolve the conflict &&
157 (cd fi && git rerere) &&
158 test "z$(cat fi/le)" = zdifferent &&
159 echo register the resolution again &&
160 (cd fi && git add le) &&
161 check_resolve_undo kept fi/le initial:fi/le second:fi/le third:fi/le &&
162 test -z "$(git ls-files -u)" &&
163 (cd fi && git rerere forget le) &&
164 ! test -f .git/rr-cache/$rerere_id/postimage &&
165 tr "\0" "\n" <.git/MERGE_RR >actual &&
166 echo "$rerere_id fi/le" >expect &&
167 test_cmp expect actual