зеркало из https://github.com/microsoft/git.git
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>
This commit is contained in:
Родитель
9b795193a6
Коммит
e234ac9d47
11
git-svn.perl
11
git-svn.perl
|
@ -669,12 +669,14 @@ sub merge_revs_into_hash {
|
||||||
}
|
}
|
||||||
|
|
||||||
sub merge_merge_info {
|
sub merge_merge_info {
|
||||||
my ($mergeinfo_one, $mergeinfo_two) = @_;
|
my ($mergeinfo_one, $mergeinfo_two, $ignore_branch) = @_;
|
||||||
my %result_hash = ();
|
my %result_hash = ();
|
||||||
|
|
||||||
merge_revs_into_hash(\%result_hash, $mergeinfo_one);
|
merge_revs_into_hash(\%result_hash, $mergeinfo_one);
|
||||||
merge_revs_into_hash(\%result_hash, $mergeinfo_two);
|
merge_revs_into_hash(\%result_hash, $mergeinfo_two);
|
||||||
|
|
||||||
|
delete $result_hash{$ignore_branch} if $ignore_branch;
|
||||||
|
|
||||||
my $result = '';
|
my $result = '';
|
||||||
# Sort below is for consistency's sake
|
# Sort below is for consistency's sake
|
||||||
for my $branchname (sort keys(%result_hash)) {
|
for my $branchname (sort keys(%result_hash)) {
|
||||||
|
@ -695,6 +697,7 @@ sub populate_merge_info {
|
||||||
my $all_parents_ok = 1;
|
my $all_parents_ok = 1;
|
||||||
my $aggregate_mergeinfo = '';
|
my $aggregate_mergeinfo = '';
|
||||||
my $rooturl = $gs->repos_root;
|
my $rooturl = $gs->repos_root;
|
||||||
|
my ($target_branch) = $gs->full_pushurl =~ /^\Q$rooturl\E(.*)/;
|
||||||
|
|
||||||
if (defined($rewritten_parent)) {
|
if (defined($rewritten_parent)) {
|
||||||
# Replace first parent with newly-rewritten version
|
# Replace first parent with newly-rewritten version
|
||||||
|
@ -726,7 +729,8 @@ sub populate_merge_info {
|
||||||
# Merge previous mergeinfo values
|
# Merge previous mergeinfo values
|
||||||
$aggregate_mergeinfo =
|
$aggregate_mergeinfo =
|
||||||
merge_merge_info($aggregate_mergeinfo,
|
merge_merge_info($aggregate_mergeinfo,
|
||||||
$par_mergeinfo, 0);
|
$par_mergeinfo,
|
||||||
|
$target_branch);
|
||||||
|
|
||||||
next if $parent eq $parents[0]; # Skip first parent
|
next if $parent eq $parents[0]; # Skip first parent
|
||||||
# Add new changes being placed in tree by merge
|
# Add new changes being placed in tree by merge
|
||||||
|
@ -769,7 +773,8 @@ sub populate_merge_info {
|
||||||
my $newmergeinfo = "$branchpath:" . join(',', @revsin);
|
my $newmergeinfo = "$branchpath:" . join(',', @revsin);
|
||||||
$aggregate_mergeinfo =
|
$aggregate_mergeinfo =
|
||||||
merge_merge_info($aggregate_mergeinfo,
|
merge_merge_info($aggregate_mergeinfo,
|
||||||
$newmergeinfo, 1);
|
$newmergeinfo,
|
||||||
|
$target_branch);
|
||||||
}
|
}
|
||||||
if ($all_parents_ok and $aggregate_mergeinfo) {
|
if ($all_parents_ok and $aggregate_mergeinfo) {
|
||||||
return $aggregate_mergeinfo;
|
return $aggregate_mergeinfo;
|
||||||
|
|
|
@ -88,7 +88,6 @@ test_expect_success 'check reintegration mergeinfo' '
|
||||||
test "$mergeinfo" = "/branches/svnb1:2-4,7-9,13-18
|
test "$mergeinfo" = "/branches/svnb1:2-4,7-9,13-18
|
||||||
/branches/svnb2:3,8,16-17
|
/branches/svnb2:3,8,16-17
|
||||||
/branches/svnb3:4,9
|
/branches/svnb3:4,9
|
||||||
/branches/svnb4:5-6,10-12
|
|
||||||
/branches/svnb5:6,11"
|
/branches/svnb5:6,11"
|
||||||
'
|
'
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче