-
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: allow dcommit to retain local merge information
dcommit will still rewrite the HEAD commit and the history of the first parents of each HEAD~1, HEAD~2, HEAD~3 as it always has. However, any merge parents (HEAD^2, HEAD^^2, HEAD~2^2) will now be preserved when the new HEAD and HEAD~[0-9]+ commits are rewritten to SVN with dcommit. Commits written to SVN will still not have any merge information besides anything in the commit message. Thanks to Joakim Tjernlund, Junio C Hamano and Steven Grimm for explanations, feedback, examples and test case. Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
- Loading branch information
Eric Wong
authored and
Junio C Hamano
committed
Jun 13, 2007
1 parent
38570a4
commit 733a65a
Showing
2 changed files
with
152 additions
and
9 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
#!/bin/sh | ||
# | ||
# Copyright (c) 2007 Eric Wong | ||
# Based on a script by Joakim Tjernlund <joakim.tjernlund@transmode.se> | ||
|
||
test_description='git-svn dcommit handles merges' | ||
|
||
. ./lib-git-svn.sh | ||
|
||
big_text_block () { | ||
cat << EOF | ||
# | ||
# (C) Copyright 2000 - 2005 | ||
# Wolfgang Denk, DENX Software Engineering, wd@denx.de. | ||
# | ||
# See file CREDITS for list of people who contributed to this | ||
# project. | ||
# | ||
# This program is free software; you can redistribute it and/or | ||
# modify it under the terms of the GNU General Public License as | ||
# published by the Free Software Foundation; either version 2 of | ||
# the License, or (at your option) any later version. | ||
# | ||
# This program is distributed in the hope that it will be useful, | ||
# but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
# GNU General Public License for more details. | ||
# | ||
# You should have received a copy of the GNU General Public License | ||
# along with this program; if not, write to the Free Software | ||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, | ||
# MA 02111-1307 USA | ||
# | ||
EOF | ||
} | ||
|
||
test_expect_success 'setup svn repository' " | ||
svn co $svnrepo mysvnwork && | ||
mkdir -p mysvnwork/trunk && | ||
cd mysvnwork && | ||
big_text_block >> trunk/README && | ||
svn add trunk && | ||
svn ci -m 'first commit' trunk && | ||
cd .. | ||
" | ||
|
||
test_expect_success 'setup git mirror and merge' " | ||
git svn init $svnrepo -t tags -T trunk -b branches && | ||
git svn fetch && | ||
git checkout --track -b svn remotes/trunk && | ||
git checkout -b merge && | ||
echo new file > new_file && | ||
git add new_file && | ||
git commit -a -m 'New file' && | ||
echo hello >> README && | ||
git commit -a -m 'hello' && | ||
echo add some stuff >> new_file && | ||
git commit -a -m 'add some stuff' && | ||
git checkout svn && | ||
mv -f README tmp && | ||
echo friend > README && | ||
cat tmp >> README && | ||
git commit -a -m 'friend' && | ||
git pull . merge | ||
" | ||
|
||
test_debug 'gitk --all & sleep 1' | ||
|
||
test_expect_success 'verify pre-merge ancestry' " | ||
test x\`git rev-parse --verify refs/heads/svn^2\` = \ | ||
x\`git rev-parse --verify refs/heads/merge\` && | ||
git cat-file commit refs/heads/svn^ | grep '^friend$' | ||
" | ||
|
||
test_expect_success 'git svn dcommit merges' " | ||
git svn dcommit | ||
" | ||
|
||
test_debug 'gitk --all & sleep 1' | ||
|
||
test_expect_success 'verify post-merge ancestry' " | ||
test x\`git rev-parse --verify refs/heads/svn\` = \ | ||
x\`git rev-parse --verify refs/remotes/trunk \` && | ||
test x\`git rev-parse --verify refs/heads/svn^2\` = \ | ||
x\`git rev-parse --verify refs/heads/merge\` && | ||
git cat-file commit refs/heads/svn^ | grep '^friend$' | ||
" | ||
|
||
test_done |