Move MERGE_RR from .git/rr-cache/ into .git/

If you want to reuse the rerere cache in another repository, and set
a symbolic link to it, you do not want to have the two repositories
interfer with each other by accessing the _same_ MERGE_RR.

For example, if you use contrib/git-new-workdir to set up a second
working directory, and you have a conflict in one working directory,
but commit in the other working directory first, the wrong "resolution"
will be recorded.

The easy solution is to move MERGE_RR out of the rr-cache/ directory,
which also corresponds with the notion that rr-cache/ contains cached
resolutions, not some intermediate temporary states.

Noticed by Kalle Olavi Niemitalo.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Johannes Schindelin 2008-07-12 15:56:19 +01:00 committed by Junio C Hamano
parent 99d698f1e7
commit 0af0ac7ebb
3 changed files with 5 additions and 5 deletions

View file

@ -166,7 +166,7 @@ void create_branch(const char *head,
void remove_branch_state(void) void remove_branch_state(void)
{ {
unlink(git_path("MERGE_HEAD")); unlink(git_path("MERGE_HEAD"));
unlink(git_path("rr-cache/MERGE_RR")); unlink(git_path("MERGE_RR"));
unlink(git_path("MERGE_MSG")); unlink(git_path("MERGE_MSG"));
unlink(git_path("SQUASH_MSG")); unlink(git_path("SQUASH_MSG"));
} }

View file

@ -429,7 +429,7 @@ static int setup_rerere(struct path_list *merge_rr)
if (!is_rerere_enabled()) if (!is_rerere_enabled())
return -1; return -1;
merge_rr_path = xstrdup(git_path("rr-cache/MERGE_RR")); merge_rr_path = xstrdup(git_path("MERGE_RR"));
fd = hold_lock_file_for_update(&write_lock, merge_rr_path, 1); fd = hold_lock_file_for_update(&write_lock, merge_rr_path, 1);
read_rr(merge_rr); read_rr(merge_rr);
return fd; return fd;

View file

@ -57,7 +57,7 @@ test_expect_success 'conflicting merge' '
! git merge first ! git merge first
' '
sha1=$(sed -e 's/ .*//' .git/rr-cache/MERGE_RR) sha1=$(sed -e 's/ .*//' .git/MERGE_RR)
rr=.git/rr-cache/$sha1 rr=.git/rr-cache/$sha1
test_expect_success 'recorded preimage' "grep ^=======$ $rr/preimage" test_expect_success 'recorded preimage' "grep ^=======$ $rr/preimage"
@ -143,7 +143,7 @@ test_expect_success 'rerere kicked in' "! grep ^=======$ a1"
test_expect_success 'rerere prefers first change' 'test_cmp a1 expect' test_expect_success 'rerere prefers first change' 'test_cmp a1 expect'
rm $rr/postimage rm $rr/postimage
echo "$sha1 a1" | perl -pe 'y/\012/\000/' > .git/rr-cache/MERGE_RR echo "$sha1 a1" | perl -pe 'y/\012/\000/' > .git/MERGE_RR
test_expect_success 'rerere clear' 'git rerere clear' test_expect_success 'rerere clear' 'git rerere clear'
@ -190,7 +190,7 @@ test_expect_success 'file2 added differently in two branches' '
git add file2 && git add file2 &&
git commit -m version2 && git commit -m version2 &&
! git merge fourth && ! git merge fourth &&
sha1=$(sed -e "s/ .*//" .git/rr-cache/MERGE_RR) && sha1=$(sed -e "s/ .*//" .git/MERGE_RR) &&
rr=.git/rr-cache/$sha1 && rr=.git/rr-cache/$sha1 &&
echo Cello > file2 && echo Cello > file2 &&
git add file2 && git add file2 &&