-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
git-svn: fix dcommit losing changes when out-of-date from svn
There was a bug in dcommit (and commit-diff) which caused deltas to be generated against the latest version of the changed file in a repository, and not the revision we are diffing (the tree) against locally. This bug can cause recent changes to the svn repository to be silently clobbered by git-svn if our repository is out-of-date. Thanks to Steven Grimm for noticing the bug. The (few) people using the commit-diff command are now required to use the -r/--revision argument. dcommit usage is unchanged. Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
- Loading branch information
Eric Wong
authored and
Junio C Hamano
committed
Nov 9, 2006
1 parent
a35a045
commit 45bf473
Showing
4 changed files
with
102 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
#!/bin/sh | ||
# | ||
# Copyright (c) 2006 Eric Wong | ||
test_description='git-svn commit-diff clobber' | ||
. ./lib-git-svn.sh | ||
|
||
if test -n "$GIT_SVN_NO_LIB" && test "$GIT_SVN_NO_LIB" -ne 0 | ||
then | ||
echo 'Skipping: commit-diff clobber needs SVN libraries' | ||
test_done | ||
exit 0 | ||
fi | ||
|
||
test_expect_success 'initialize repo' " | ||
mkdir import && | ||
cd import && | ||
echo initial > file && | ||
svn import -m 'initial' . $svnrepo && | ||
cd .. && | ||
echo initial > file && | ||
git update-index --add file && | ||
git commit -a -m 'initial' | ||
" | ||
test_expect_success 'commit change from svn side' " | ||
svn co $svnrepo t.svn && | ||
cd t.svn && | ||
echo second line from svn >> file && | ||
svn commit -m 'second line from svn' && | ||
cd .. && | ||
rm -rf t.svn | ||
" | ||
|
||
test_expect_failure 'commit conflicting change from git' " | ||
echo second line from git >> file && | ||
git commit -a -m 'second line from git' && | ||
git-svn commit-diff -r1 HEAD~1 HEAD $svnrepo | ||
" || true | ||
|
||
test_expect_success 'commit complementing change from git' " | ||
git reset --hard HEAD~1 && | ||
echo second line from svn >> file && | ||
git commit -a -m 'second line from svn' && | ||
echo third line from git >> file && | ||
git commit -a -m 'third line from git' && | ||
git-svn commit-diff -r2 HEAD~1 HEAD $svnrepo | ||
" | ||
|
||
test_expect_failure 'dcommit fails to commit because of conflict' " | ||
git-svn init $svnrepo && | ||
git-svn fetch && | ||
git reset --hard refs/remotes/git-svn && | ||
svn co $svnrepo t.svn && | ||
cd t.svn && | ||
echo fourth line from svn >> file && | ||
svn commit -m 'fourth line from svn' && | ||
cd .. && | ||
rm -rf t.svn && | ||
echo 'fourth line from git' >> file && | ||
git commit -a -m 'fourth line from git' && | ||
git-svn dcommit | ||
" || true | ||
|
||
test_expect_success 'dcommit does the svn equivalent of an index merge' " | ||
git reset --hard refs/remotes/git-svn && | ||
echo 'index merge' > file2 && | ||
git update-index --add file2 && | ||
git commit -a -m 'index merge' && | ||
echo 'more changes' >> file2 && | ||
git update-index file2 && | ||
git commit -a -m 'more changes' && | ||
git-svn dcommit | ||
" | ||
|
||
test_done |