Created
June 20, 2012 15:14
-
-
Save avish/2960407 to your computer and use it in GitHub Desktop.
[PATCH] git svn dcommit: avoid self-referential mergeinfo
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Date: Wed, 14 Mar 2012 17:45:05 +0200 | |
Subject: [PATCH] git svn dcommit: avoid self-referential mergeinfo | |
When svn.pushmergeinfo is configured, git svn dcommit tries to automatically populate svn:mergeinfo properties by merging the parent branch's mergeinfo into the committed one on each merge commit. This process can add self-referential mergeinfo lines, i.e. ones that reference the same branch being committed into (e.g. when reintegrating a branch to trunk after previously having merged trunk into it), which are then mishandled by SVN and cause errors in mixed SVN/Git environments. | |
For more details, see my original report on the issue at [1]. | |
This commit adds a step to git svn dcommit that filters out any mergeinfo lines referencing the target branch from the mergeinfo, thus avoiding the problem. | |
[1] http://thread.gmane.org/gmane.comp.version-control.git/191932 | |
--- | |
git-svn.perl | 15 +++++++++++++++ | |
1 file changed, 15 insertions(+) | |
diff --git a/git-svn.perl b/git-svn.perl | |
index eeb83d3..1ed409d 100755 | |
--- a/git-svn.perl | |
+++ b/git-svn.perl | |
@@ -752,6 +752,19 @@ sub populate_merge_info { | |
return undef; | |
} | |
+sub remove_self_referential_merge_info { | |
+ return $_merge_info unless defined $_merge_info; | |
+ | |
+ my ($_merge_info, $branchurl, $gs) = @_; | |
+ my $rooturl = $gs->repos_root; | |
+ | |
+ unless ($branchurl =~ /^\Q$rooturl\E(.*)/) { | |
+ fatal "URL to commit to is not under SVN root $rooturl!"; | |
+ } | |
+ my $branchpath = $1; | |
+ return join("\n", grep { $_ !~ m/^$branchpath\:/ } split(/\n/, $_merge_info)); | |
+} | |
+ | |
sub cmd_dcommit { | |
my $head = shift; | |
command_noisy(qw/update-index --refresh/); | |
@@ -902,6 +915,8 @@ sub cmd_dcommit { | |
$uuid, | |
$linear_refs, | |
$rewritten_parent); | |
+ | |
+ $_merge_info = remove_self_referential_merge_info($_merge_info, $url, $gs); | |
} | |
my %ed_opts = ( r => $last_rev, | |
-- | |
1.7.10.msysgit.1 |
Just a reference to the mail thread for the sake of completeness: http://thread.gmane.org/gmane.comp.version-control.git/193123
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thanks for posting it.