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 <michael@inetric.com> Reported-by: Avishay Lavie <avishay.lavie@gmail.com> Acked-by: Eric Wong <normalperson@yhbt.net>

Michael Contreras committed Mar 30, 2013 at 18:06 UTC e234ac9d47b6618f7b7338f95f34d0b70782e4cb
2 files changed +8 -4
git-svn.perl
+8 -3
@@ -669,12 +669,14 @@ sub merge_revs_into_hash {
669 }
670
671 sub merge_merge_info {
672 - my ($mergeinfo_one, $mergeinfo_two) = @_;
672 + my ($mergeinfo_one, $mergeinfo_two, $ignore_branch) = @_;
673 my %result_hash = ();
674
675 merge_revs_into_hash(\%result_hash, $mergeinfo_one);
676 merge_revs_into_hash(\%result_hash, $mergeinfo_two);
677
678 + delete $result_hash{$ignore_branch} if $ignore_branch;
679 +
680 my $result = '';
681 # Sort below is for consistency's sake
682 for my $branchname (sort keys(%result_hash)) {
@@ -695,6 +697,7 @@ sub populate_merge_info {
697 my $all_parents_ok = 1;
698 my $aggregate_mergeinfo = '';
699 my $rooturl = $gs->repos_root;
700 + my ($target_branch) = $gs->full_pushurl =~ /^\Q$rooturl\E(.*)/;
701
702 if (defined($rewritten_parent)) {
703 # Replace first parent with newly-rewritten version
@@ -726,7 +729,8 @@ sub populate_merge_info {
729 # Merge previous mergeinfo values
730 $aggregate_mergeinfo =
731 merge_merge_info($aggregate_mergeinfo,
729 - $par_mergeinfo, 0);
732 + $par_mergeinfo,
733 + $target_branch);
734
735 next if $parent eq $parents[0]; # Skip first parent
736 # Add new changes being placed in tree by merge
@@ -769,7 +773,8 @@ sub populate_merge_info {
773 my $newmergeinfo = "$branchpath:" . join(',', @revsin);
774 $aggregate_mergeinfo =
775 merge_merge_info($aggregate_mergeinfo,
772 - $newmergeinfo, 1);
776 + $newmergeinfo,
777 + $target_branch);
778 }
779 if ($all_parents_ok and $aggregate_mergeinfo) {
780 return $aggregate_mergeinfo;
t/t9161-git-svn-mergeinfo-push.sh
-1
@@ -88,7 +88,6 @@ test_expect_success 'check reintegration mergeinfo' '
88 test "$mergeinfo" = "/branches/svnb1:2-4,7-9,13-18
89 /branches/svnb2:3,8,16-17
90 /branches/svnb3:4,9
91 -/branches/svnb4:5-6,10-12
91 /branches/svnb5:6,11"
92 '
93