git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] git svn dcommit: avoid self-referential mergeinfo lines when svn.pushmergeinfo is configured
@ 2012-03-14 16:09 Avishay Lavie
  2012-03-14 16:15 ` Bryan Jacobs
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Avishay Lavie @ 2012-03-14 16:09 UTC (permalink / raw)
  To: git; +Cc: Eric Wong, Bryan Jacobs

[PATCH] git svn dcommit: avoid self-referential mergeinfo lines when
svn.pushmergeinfo flag is configured

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

Signed-off-by: Avishay Lavie <avishay.lavie@gmail.com>
---
This is my first time sending a patch to the group, so if I'm doing
something wrong, please let me know.

 git-svn.perl |   15 +++++++++++++++
 1 files changed, 15 insertions(+), 0 deletions(-)

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.8.msysgit.0

^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2012-03-15 22:29 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-03-14 16:09 [PATCH] git svn dcommit: avoid self-referential mergeinfo lines when svn.pushmergeinfo is configured Avishay Lavie
2012-03-14 16:15 ` Bryan Jacobs
2012-03-14 16:23 ` Thomas Rast
2012-03-15 22:02 ` Eric Wong
2012-03-15 22:07   ` Bryan Jacobs
2012-03-15 22:28   ` [spf:guess] " Sam Vilain

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).