aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Vilain <sam@vilain.net>2009-12-20 05:22:42 +1300
committerEric Wong <normalperson@yhbt.net>2009-12-21 02:32:50 -0800
commit33973a5b179278c563624fcb45c223f03031b242 (patch)
tree5359e45455d6b0a943c22114e85facaba9792999
parent7d944c3399c4145293d599e1ddc76d1ac0c1e118 (diff)
downloadgit-33973a5b179278c563624fcb45c223f03031b242.tar.gz
git-33973a5b179278c563624fcb45c223f03031b242.tar.xz
git-svn: fix some mistakes with interpreting SVN mergeinfo commit ranges
SVN's list of commit ranges in mergeinfo tickets is inclusive, whereas git commit ranges are exclusive on the left hand side. Also, the end points of the commit ranges may not exist; they simply delineate ranges of commits which may or may not exist. Fix these two mistakes. Signed-off-by: Sam Vilain <sam@vilain.net> Acked-by: Eric Wong <normalperson@yhbt.net>
-rwxr-xr-xgit-svn.perl12
-rwxr-xr-xt/t9151-svn-mergeinfo.sh2
2 files changed, 4 insertions, 10 deletions
diff --git a/git-svn.perl b/git-svn.perl
index 1e106f064..a4a45ef39 100755
--- a/git-svn.perl
+++ b/git-svn.perl
@@ -3015,14 +3015,8 @@ sub lookup_svn_merge {
for my $range ( @ranges ) {
my ($bottom, $top) = split "-", $range;
$top ||= $bottom;
- my $bottom_commit =
- $gs->rev_map_get($bottom, $uuid) ||
- $gs->rev_map_get($bottom+1, $uuid);
- my $top_commit;
- for (; !$top_commit && $top >= $bottom; --$top) {
- $top_commit =
- $gs->rev_map_get($top, $uuid);
- }
+ my $bottom_commit = $gs->find_rev_after( $bottom, 1, $top );
+ my $top_commit = $gs->find_rev_before( $top, 1, $bottom );
unless ($top_commit and $bottom_commit) {
warn "W:unknown path/rev in svn:mergeinfo "
@@ -3031,7 +3025,7 @@ sub lookup_svn_merge {
}
push @merged_commit_ranges,
- "$bottom_commit..$top_commit";
+ "$bottom_commit^..$top_commit";
if ( !defined $tip or $top > $tip ) {
$tip = $top;
diff --git a/t/t9151-svn-mergeinfo.sh b/t/t9151-svn-mergeinfo.sh
index dc3478fbb..f6e00ea30 100755
--- a/t/t9151-svn-mergeinfo.sh
+++ b/t/t9151-svn-mergeinfo.sh
@@ -33,7 +33,7 @@ test_expect_success 'svn non-merge merge commits did not become git merge commit
[ -z "$bad_non_merges" ]
'
-test_expect_failure 'everything got merged in the end' '
+test_expect_success 'everything got merged in the end' '
unmerged=$(git rev-list --all --not master)
[ -z "$unmerged" ]
'