When recording the revisions that it has merged, SVN sets the top revision to be the latest revision in the repository, which is not necessarily a revision on the branch that is being merged from. When it is not on the branch, git-svn fails to add the extra parent to represent the merge because it relies on finding the commit on the branch that corresponds to the top of the SVN merge range. In order to correctly handle this case, we look for the maximum revision less than or equal to the top of the SVN merge range that is actually on the branch being merged from. Signed-off-by: Toby Allsopp <toby.allsopp@xxxxxxxxxxxx> --- git-svn.perl | 7 +++++-- t/t9151-svn-mergeinfo.sh | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/git-svn.perl b/git-svn.perl index 6a3b501..27fbe30 100755 --- a/git-svn.perl +++ b/git-svn.perl @@ -2950,8 +2950,11 @@ sub find_extra_svn_parents { my $bottom_commit = $gs->rev_map_get($bottom, $self->ra_uuid) || $gs->rev_map_get($bottom+1, $self->ra_uuid); - my $top_commit = - $gs->rev_map_get($top, $self->ra_uuid); + my $top_commit; + for (; !$top_commit && $top >= $bottom; --$top) { + $top_commit = + $gs->rev_map_get($top, $self->ra_uuid); + } unless ($top_commit and $bottom_commit) { warn "W:unknown path/rev in svn:mergeinfo " diff --git a/t/t9151-svn-mergeinfo.sh b/t/t9151-svn-mergeinfo.sh index 0d42c84..f57daf4 100755 --- a/t/t9151-svn-mergeinfo.sh +++ b/t/t9151-svn-mergeinfo.sh @@ -19,7 +19,7 @@ test_expect_success 'represent svn merges without intervening commits' " [ `git cat-file commit HEAD^1 | grep parent | wc -l` -eq 2 ] " -test_expect_failure 'represent svn merges with intervening commits' " +test_expect_success 'represent svn merges with intervening commits' " [ `git cat-file commit HEAD | grep parent | wc -l` -eq 2 ] " -- 1.6.5.2.155.gbb47.dirty -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html