git-svn: fix dcommit clobbering upstream when committing multiple changes
Although dcommit could detect if the first commit in the series would conflict with the HEAD revision in SVN, it could not detect conflicts in further commits it made. Now we rebase each uncommitted change after each revision is committed to SVN to ensure that we are up-to-date. git-rebase will bail out on conflict errors if our next change cannot be applied and committed to SVN cleanly, preventing accidental clobbering of changes on the SVN-side. --no-rebase users will have trouble with this, and are thus warned if they are committing more than one commit. Fixing this for (hopefully uncommon) --no-rebase users would be more complex and will probably happen at a later date. Thanks to David Watson for finding this and the original test. Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
eeebd8d8c5
commit
751eb39590
@ -66,4 +66,34 @@ test_expect_success 'dcommit does the svn equivalent of an index merge' "
|
||||
git-svn dcommit
|
||||
"
|
||||
|
||||
test_expect_success 'commit another change from svn side' "
|
||||
svn co $svnrepo t.svn &&
|
||||
cd t.svn &&
|
||||
echo third line from svn >> file &&
|
||||
poke file &&
|
||||
svn commit -m 'third line from svn' &&
|
||||
cd .. &&
|
||||
rm -rf t.svn
|
||||
"
|
||||
|
||||
test_expect_failure 'multiple dcommit from git-svn will not clobber svn' "
|
||||
git reset --hard refs/remotes/git-svn &&
|
||||
echo new file >> new-file &&
|
||||
git update-index --add new-file &&
|
||||
git commit -a -m 'new file' &&
|
||||
echo clobber > file &&
|
||||
git commit -a -m 'clobber' &&
|
||||
git svn dcommit
|
||||
" || true
|
||||
|
||||
|
||||
test_expect_success 'check that rebase really failed' 'test -d .dotest'
|
||||
|
||||
test_expect_success 'resolve, continue the rebase and dcommit' "
|
||||
echo clobber and I really mean it > file &&
|
||||
git update-index file &&
|
||||
git rebase --continue &&
|
||||
git svn dcommit
|
||||
"
|
||||
|
||||
test_done
|
||||
|
||||
Reference in New Issue
Block a user