Skip to content

Commit e234ac9

Browse files
contremEric Wong
authored andcommitted
git-svn: avoid self-referencing mergeinfo
When svn.pushmergeinfo is set, the target branch is included in the mergeinfo if it was previously merged into one of the source branches. SVN does not do this. Remove merge target branch path from resulting mergeinfo when svn.pushmergeinfo is set to better match the behavior of SVN. Update the svn-mergeinfo-push test. [ew: 80 columns] Signed-off-by: Michael Contreras <[email protected]> Reported-by: Avishay Lavie <[email protected]> Acked-by: Eric Wong <[email protected]>
1 parent 9b79519 commit e234ac9

File tree

2 files changed

+8
-4
lines changed

2 files changed

+8
-4
lines changed

git-svn.perl

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -669,12 +669,14 @@ sub merge_revs_into_hash {
669669
}
670670

671671
sub merge_merge_info {
672-
my ($mergeinfo_one, $mergeinfo_two) = @_;
672+
my ($mergeinfo_one, $mergeinfo_two, $ignore_branch) = @_;
673673
my %result_hash = ();
674674

675675
merge_revs_into_hash(\%result_hash, $mergeinfo_one);
676676
merge_revs_into_hash(\%result_hash, $mergeinfo_two);
677677

678+
delete $result_hash{$ignore_branch} if $ignore_branch;
679+
678680
my $result = '';
679681
# Sort below is for consistency's sake
680682
for my $branchname (sort keys(%result_hash)) {
@@ -695,6 +697,7 @@ sub populate_merge_info {
695697
my $all_parents_ok = 1;
696698
my $aggregate_mergeinfo = '';
697699
my $rooturl = $gs->repos_root;
700+
my ($target_branch) = $gs->full_pushurl =~ /^\Q$rooturl\E(.*)/;
698701

699702
if (defined($rewritten_parent)) {
700703
# Replace first parent with newly-rewritten version
@@ -726,7 +729,8 @@ sub populate_merge_info {
726729
# Merge previous mergeinfo values
727730
$aggregate_mergeinfo =
728731
merge_merge_info($aggregate_mergeinfo,
729-
$par_mergeinfo, 0);
732+
$par_mergeinfo,
733+
$target_branch);
730734

731735
next if $parent eq $parents[0]; # Skip first parent
732736
# Add new changes being placed in tree by merge
@@ -769,7 +773,8 @@ sub populate_merge_info {
769773
my $newmergeinfo = "$branchpath:" . join(',', @revsin);
770774
$aggregate_mergeinfo =
771775
merge_merge_info($aggregate_mergeinfo,
772-
$newmergeinfo, 1);
776+
$newmergeinfo,
777+
$target_branch);
773778
}
774779
if ($all_parents_ok and $aggregate_mergeinfo) {
775780
return $aggregate_mergeinfo;

t/t9161-git-svn-mergeinfo-push.sh

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,6 @@ test_expect_success 'check reintegration mergeinfo' '
8888
test "$mergeinfo" = "/branches/svnb1:2-4,7-9,13-18
8989
/branches/svnb2:3,8,16-17
9090
/branches/svnb3:4,9
91-
/branches/svnb4:5-6,10-12
9291
/branches/svnb5:6,11"
9392
'
9493

0 commit comments

Comments
 (0)