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>
This commit is contained in:
parent
7d944c3399
commit
33973a5b17
12
git-svn.perl
12
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;
|
||||
|
@ -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" ]
|
||||
'
|
||||
|
Loading…
Reference in New Issue
Block a user