Skip to content

Commit 5a9f039

Browse files
j6tgitster
authored andcommitted
Make 'rerere forget' work from a subdirectory.
It forgot to apply the prefix to the paths given on the command line. [jc: added test] Signed-off-by: Johannes Sixt <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 28414b6 commit 5a9f039

File tree

2 files changed

+53
-24
lines changed

2 files changed

+53
-24
lines changed

builtin-rerere.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,10 @@ int cmd_rerere(int argc, const char **argv, const char *prefix)
120120
if (argc < 2)
121121
return rerere(flags);
122122

123-
if (!strcmp(argv[1], "forget"))
124-
return rerere_forget(argv + 2);
123+
if (!strcmp(argv[1], "forget")) {
124+
const char **pathspec = get_pathspec(prefix, argv + 2);
125+
return rerere_forget(pathspec);
126+
}
125127

126128
fd = setup_rerere(&merge_rr, flags);
127129
if (fd < 0)

t/t2030-unresolve-info.sh

Lines changed: 49 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -36,21 +36,22 @@ prime_resolve_undo () {
3636
test_must_fail git merge third^0 &&
3737
echo merge does not leave anything &&
3838
check_resolve_undo empty &&
39-
echo different >file &&
40-
git add file &&
39+
echo different >fi/le &&
40+
git add fi/le &&
4141
echo resolving records &&
42-
check_resolve_undo recorded file initial:file second:file third:file
42+
check_resolve_undo recorded fi/le initial:fi/le second:fi/le third:fi/le
4343
}
4444

4545
test_expect_success setup '
46-
test_commit initial file first &&
46+
mkdir fi &&
47+
test_commit initial fi/le first &&
4748
git branch side &&
4849
git branch another &&
49-
test_commit second file second &&
50+
test_commit second fi/le second &&
5051
git checkout side &&
51-
test_commit third file third &&
52+
test_commit third fi/le third &&
5253
git checkout another &&
53-
test_commit fourth file fourth &&
54+
test_commit fourth fi/le fourth &&
5455
git checkout master
5556
'
5657

@@ -59,7 +60,7 @@ test_expect_success 'add records switch clears' '
5960
test_tick &&
6061
git commit -m merged &&
6162
echo committing keeps &&
62-
check_resolve_undo kept file initial:file second:file third:file &&
63+
check_resolve_undo kept fi/le initial:fi/le second:fi/le third:fi/le &&
6364
git checkout second^0 &&
6465
echo switching clears &&
6566
check_resolve_undo cleared
@@ -70,15 +71,15 @@ test_expect_success 'rm records reset clears' '
7071
test_tick &&
7172
git commit -m merged &&
7273
echo committing keeps &&
73-
check_resolve_undo kept file initial:file second:file third:file &&
74+
check_resolve_undo kept fi/le initial:fi/le second:fi/le third:fi/le &&
7475
7576
echo merge clears upfront &&
7677
test_must_fail git merge fourth^0 &&
7778
check_resolve_undo nuked &&
7879
79-
git rm -f file &&
80+
git rm -f fi/le &&
8081
echo resolving records &&
81-
check_resolve_undo recorded file initial:file HEAD:file fourth:file &&
82+
check_resolve_undo recorded fi/le initial:fi/le HEAD:fi/le fourth:fi/le &&
8283
8384
git reset --hard &&
8485
echo resetting discards &&
@@ -90,7 +91,7 @@ test_expect_success 'plumbing clears' '
9091
test_tick &&
9192
git commit -m merged &&
9293
echo committing keeps &&
93-
check_resolve_undo kept file initial:file second:file third:file &&
94+
check_resolve_undo kept fi/le initial:fi/le second:fi/le third:fi/le &&
9495
9596
echo plumbing clear &&
9697
git update-index --clear-resolve-undo &&
@@ -100,7 +101,7 @@ test_expect_success 'plumbing clears' '
100101
test_expect_success 'add records checkout -m undoes' '
101102
prime_resolve_undo &&
102103
git diff HEAD &&
103-
git checkout --conflict=merge file &&
104+
git checkout --conflict=merge fi/le &&
104105
echo checkout used the record and removed it &&
105106
check_resolve_undo removed &&
106107
echo the index and the work tree is unmerged again &&
@@ -110,33 +111,59 @@ test_expect_success 'add records checkout -m undoes' '
110111

111112
test_expect_success 'unmerge with plumbing' '
112113
prime_resolve_undo &&
113-
git update-index --unresolve file &&
114+
git update-index --unresolve fi/le &&
114115
git ls-files -u >actual &&
115116
test $(wc -l <actual) = 3
116117
'
117118

118-
test_expect_success 'rerere and rerere --forget' '
119+
test_expect_success 'rerere and rerere forget' '
119120
mkdir .git/rr-cache &&
120121
prime_resolve_undo &&
121122
echo record the resolution &&
122123
git rerere &&
123124
rerere_id=$(cd .git/rr-cache && echo */postimage) &&
124125
rerere_id=${rerere_id%/postimage} &&
125126
test -f .git/rr-cache/$rerere_id/postimage &&
126-
git checkout -m file &&
127+
git checkout -m fi/le &&
127128
echo resurrect the conflict &&
128-
grep "^=======" file &&
129+
grep "^=======" fi/le &&
129130
echo reresolve the conflict &&
130131
git rerere &&
131-
test "z$(cat file)" = zdifferent &&
132+
test "z$(cat fi/le)" = zdifferent &&
132133
echo register the resolution again &&
133-
git add file &&
134-
check_resolve_undo kept file initial:file second:file third:file &&
134+
git add fi/le &&
135+
check_resolve_undo kept fi/le initial:fi/le second:fi/le third:fi/le &&
135136
test -z "$(git ls-files -u)" &&
136-
git rerere forget file &&
137+
git rerere forget fi/le &&
137138
! test -f .git/rr-cache/$rerere_id/postimage &&
138139
tr "\0" "\n" <.git/MERGE_RR >actual &&
139-
echo "$rerere_id file" >expect &&
140+
echo "$rerere_id fi/le" >expect &&
141+
test_cmp expect actual
142+
'
143+
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 &&
140167
test_cmp expect actual
141168
'
142169

0 commit comments

Comments
 (0)