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