# [PATCH] git-svn: allow the mergeinfo property to be set

7 messages from 2010-09-24 to 2010-10-04. Participants: Steven Walter, Eric Wong, Mathias Lafeldt, Junio C Hamano.
Thread: https://gitlist.dev/t/25217

## Steven Walter, 2010-09-24 00:52

Subject: [PATCH] git-svn: allow the mergeinfo property to be set
Message-ID: <1285289553-17998-1-git-send-email-stevenrwalter@gmail.com>
URL: https://gitlist.dev/e/1285289553-17998-1-git-send-email-stevenrwalter%40gmail.com

```
As a first step towards preserving merges across dcommit, we need a
mechanism to update the svn:mergeinfo property.
---
 git-svn.perl |   15 ++++++++++++++-
 1 files changed, 14 insertions(+), 1 deletions(-)

diff --git a/git-svn.perl b/git-svn.perl
index c7c4dcd..1612fd7 100755
--- a/git-svn.perl
+++ b/git-svn.perl
@@ -83,7 +83,7 @@ my ($_stdin, $_help, $_edit,
 	$_version, $_fetch_all, $_no_rebase, $_fetch_parent,
 	$_merge, $_strategy, $_dry_run, $_local,
 	$_prefix, $_no_checkout, $_url, $_verbose,
-	$_git_format, $_commit_url, $_tag);
+	$_git_format, $_commit_url, $_tag, $_merge_info);
 $Git::SVN::_follow_parent = 1;
 $_q ||= 0;
 my %remote_opts = ( 'username=s' => \$Git::SVN::Prompt::_username,
@@ -153,6 +153,7 @@ my %cmd = (
 			  'commit-url=s' => \$_commit_url,
 			  'revision|r=i' => \$_revision,
 			  'no-rebase' => \$_no_rebase,
+			  'mergeinfo=s' => \$_merge_info,
 			%cmt_opts, %fc_opts } ],
 	branch => [ \&cmd_branch,
 	            'Create a branch in the SVN repository',
@@ -568,6 +569,7 @@ sub cmd_dcommit {
 			                       print "Committed r$_[0]\n";
 			                       $cmt_rev = $_[0];
 			                },
+					mergeinfo => $_merge_info,
 			                svn_path => '');
 			if (!SVN::Git::Editor->new(\%ed_opts)->apply_diff) {
 				print "No changes\n$d~1 == $d\n";
@@ -4449,6 +4451,7 @@ sub new {
 	$self->{path_prefix} = length $self->{svn_path} ?
 	                       "$self->{svn_path}/" : '';
 	$self->{config} = $opts->{config};
+	$self->{mergeinfo} = $opts->{mergeinfo};
 	return $self;
 }
 
@@ -4758,6 +4761,11 @@ sub change_file_prop {
 	$self->SUPER::change_file_prop($fbat, $pname, $pval, $self->{pool});
 }
 
+sub change_dir_prop {
+	my ($self, $pbat, $pname, $pval) = @_;
+	$self->SUPER::change_dir_prop($pbat, $pname, $pval, $self->{pool});
+}
+
 sub _chg_file_get_blob ($$$$) {
 	my ($self, $fbat, $m, $which) = @_;
 	my $fh = $::_repository->temp_acquire("git_blob_$which");
@@ -4851,6 +4859,11 @@ sub apply_diff {
 			fatal("Invalid change type: $f");
 		}
 	}
+
+	if (defined($self->{mergeinfo})) {
+		$self->change_dir_prop($self->{bat}{''}, "svn:mergeinfo",
+			               $self->{mergeinfo});
+	}
 	$self->rmdirs if $_rmdir;
 	if (@$mods == 0) {
 		$self->abort_edit;
-- 
1.7.3.4.g4d78d

```

## Eric Wong, 2010-09-24 16:27

Subject: Re: [PATCH] git-svn: allow the mergeinfo property to be set
Message-ID: <20100924162704.GA4513@dcvr.yhbt.net>
URL: https://gitlist.dev/e/20100924162704.GA4513%40dcvr.yhbt.net
In-Reply-To: <1285289553-17998-1-git-send-email-stevenrwalter@gmail.com>

```
Steven Walter <stevenrwalter@gmail.com> wrote:
> As a first step towards preserving merges across dcommit, we need a
> mechanism to update the svn:mergeinfo property.
> ---

Hi Steven, this looks reasonable.  Sign-off?  A test would be nice, too.

-- 
Eric Wong

```

## Steven Walter, 2010-09-25 03:51

Subject: [PATCH] git-svn: allow the mergeinfo property to be set
Message-ID: <1285386710-27905-1-git-send-email-stevenrwalter@gmail.com>
URL: https://gitlist.dev/e/1285386710-27905-1-git-send-email-stevenrwalter%40gmail.com
In-Reply-To: <20100924162704.GA4513@dcvr.yhbt.net>

```
As a first step towards preserving merges across dcommit, we need a
mechanism to update the svn:mergeinfo property.

Signed-off-by: Steven Walter <stevenrwalter@gmail.com>
---
 git-svn.perl                 |   15 ++++++++++++++-
 t/t9157-git-svn-mergeinfo.sh |   39 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 53 insertions(+), 1 deletions(-)
 create mode 100644 t/t9157-git-svn-mergeinfo.sh

diff --git a/git-svn.perl b/git-svn.perl
index c7c4dcd..1612fd7 100755
--- a/git-svn.perl
+++ b/git-svn.perl
@@ -83,7 +83,7 @@ my ($_stdin, $_help, $_edit,
 	$_version, $_fetch_all, $_no_rebase, $_fetch_parent,
 	$_merge, $_strategy, $_dry_run, $_local,
 	$_prefix, $_no_checkout, $_url, $_verbose,
-	$_git_format, $_commit_url, $_tag);
+	$_git_format, $_commit_url, $_tag, $_merge_info);
 $Git::SVN::_follow_parent = 1;
 $_q ||= 0;
 my %remote_opts = ( 'username=s' => \$Git::SVN::Prompt::_username,
@@ -153,6 +153,7 @@ my %cmd = (
 			  'commit-url=s' => \$_commit_url,
 			  'revision|r=i' => \$_revision,
 			  'no-rebase' => \$_no_rebase,
+			  'mergeinfo=s' => \$_merge_info,
 			%cmt_opts, %fc_opts } ],
 	branch => [ \&cmd_branch,
 	            'Create a branch in the SVN repository',
@@ -568,6 +569,7 @@ sub cmd_dcommit {
 			                       print "Committed r$_[0]\n";
 			                       $cmt_rev = $_[0];
 			                },
+					mergeinfo => $_merge_info,
 			                svn_path => '');
 			if (!SVN::Git::Editor->new(\%ed_opts)->apply_diff) {
 				print "No changes\n$d~1 == $d\n";
@@ -4449,6 +4451,7 @@ sub new {
 	$self->{path_prefix} = length $self->{svn_path} ?
 	                       "$self->{svn_path}/" : '';
 	$self->{config} = $opts->{config};
+	$self->{mergeinfo} = $opts->{mergeinfo};
 	return $self;
 }
 
@@ -4758,6 +4761,11 @@ sub change_file_prop {
 	$self->SUPER::change_file_prop($fbat, $pname, $pval, $self->{pool});
 }
 
+sub change_dir_prop {
+	my ($self, $pbat, $pname, $pval) = @_;
+	$self->SUPER::change_dir_prop($pbat, $pname, $pval, $self->{pool});
+}
+
 sub _chg_file_get_blob ($$$$) {
 	my ($self, $fbat, $m, $which) = @_;
 	my $fh = $::_repository->temp_acquire("git_blob_$which");
@@ -4851,6 +4859,11 @@ sub apply_diff {
 			fatal("Invalid change type: $f");
 		}
 	}
+
+	if (defined($self->{mergeinfo})) {
+		$self->change_dir_prop($self->{bat}{''}, "svn:mergeinfo",
+			               $self->{mergeinfo});
+	}
 	$self->rmdirs if $_rmdir;
 	if (@$mods == 0) {
 		$self->abort_edit;
diff --git a/t/t9157-git-svn-mergeinfo.sh b/t/t9157-git-svn-mergeinfo.sh
new file mode 100644
index 0000000..8337e44
--- /dev/null
+++ b/t/t9157-git-svn-mergeinfo.sh
@@ -0,0 +1,39 @@
+#!/bin/sh
+#
+# Copyright (c) 2010 Steven Walter
+#
+
+test_description='git svn mergeinfo propagation'
+
+. ./lib-git-svn.sh
+
+say 'define NO_SVN_TESTS to skip git svn tests'
+
+test_expect_success \
+    'initialize source svn repo' '
+        svn_cmd mkdir -m x "$svnrepo"/trunk &&
+        svn_cmd co "$svnrepo"/trunk "$SVN_TREE" &&
+        cd "$SVN_TREE" &&
+        touch foo &&
+        svn_cmd add foo &&
+        svn_cmd commit -m "initial commit" &&
+        cd .. &&
+        rm -rf "$SVN_TREE"'
+
+test_expect_success \
+    'clone svn repo' '
+        git svn init "$svnrepo"/trunk &&
+        git svn fetch'
+
+test_expect_success \
+    'change svn:mergeinfo' '
+        touch bar &&
+        git add bar &&
+        git commit -m "bar" &&
+        git svn dcommit --mergeinfo="/branches/foo:1-10"'
+
+test_expect_success \
+    'verify svn:mergeinfo' '
+        [ `svn_cmd propget svn:mergeinfo "$svnrepo"/trunk` == "/branches/foo:1-10" ]'
+
+test_done
-- 
1.6.3.3

```

## Eric Wong, 2010-09-25 04:24

Subject: Re: [PATCH] git-svn: allow the mergeinfo property to be set
Message-ID: <20100925042457.GA28899@dcvr.yhbt.net>
URL: https://gitlist.dev/e/20100925042457.GA28899%40dcvr.yhbt.net
In-Reply-To: <1285386710-27905-1-git-send-email-stevenrwalter@gmail.com>

```
Steven Walter <stevenrwalter@gmail.com> wrote:
> As a first step towards preserving merges across dcommit, we need a
> mechanism to update the svn:mergeinfo property.
> 
> Signed-off-by: Steven Walter <stevenrwalter@gmail.com>

Thanks Steven,

I fixed a bashism and style issues in test case, but nonetheless acked
and pushed it out to git://git.bogomips.org/git-svn along with a few
others I had forgotten to tell Junio about while I was on vacation:

Eric Wong (1):
      Documentation/git-svn: discourage "noMetadata"

Mathias Lafeldt (1):
      git-svn: fix processing of decorated commit hashes

Steven Walter (2):
      git-svn: check_cherry_pick should exclude commits already in our history
      git-svn: allow the mergeinfo property to be set

-- 
Eric Wong

```

## Mathias Lafeldt, 2010-10-04 07:56

Subject: Re: [PATCH] git-svn: allow the mergeinfo property to be set
Message-ID: <4CA9889E.1020604@debugon.org>
URL: https://gitlist.dev/e/4CA9889E.1020604%40debugon.org
In-Reply-To: <20100925042457.GA28899@dcvr.yhbt.net>

```
Eric Wong wrote:
> Steven Walter <stevenrwalter@gmail.com> wrote:
>> As a first step towards preserving merges across dcommit, we need a
>> mechanism to update the svn:mergeinfo property.
>>
>> Signed-off-by: Steven Walter <stevenrwalter@gmail.com>
> 
> Thanks Steven,
> 
> I fixed a bashism and style issues in test case, but nonetheless acked
> and pushed it out to git://git.bogomips.org/git-svn along with a few
> others I had forgotten to tell Junio about while I was on vacation:
> 
> Eric Wong (1):
>       Documentation/git-svn: discourage "noMetadata"
> 
> Mathias Lafeldt (1):
>       git-svn: fix processing of decorated commit hashes
> 
> Steven Walter (2):
>       git-svn: check_cherry_pick should exclude commits already in our history
>       git-svn: allow the mergeinfo property to be set
> 

So, is Junio aware of those patches? Or is it better to resubmit my fix
separately?

-Mathias

```

## Junio C Hamano, 2010-10-04 17:38

Subject: Re: [PATCH] git-svn: allow the mergeinfo property to be set
Message-ID: <7vhbh197ut.fsf@alter.siamese.dyndns.org>
URL: https://gitlist.dev/e/7vhbh197ut.fsf%40alter.siamese.dyndns.org
In-Reply-To: <4CA9889E.1020604@debugon.org>

```
Mathias Lafeldt <misfire@debugon.org> writes:

>> I fixed a bashism and style issues in test case, but nonetheless acked
>> and pushed it out to git://git.bogomips.org/git-svn along with a few
>> others I had forgotten to tell Junio about while I was on vacation:
>> 
>> Eric Wong (1):
>>       Documentation/git-svn: discourage "noMetadata"
>> 
>> Mathias Lafeldt (1):
>>       git-svn: fix processing of decorated commit hashes
>> 
>> Steven Walter (2):
>>       git-svn: check_cherry_pick should exclude commits already in our history
>>       git-svn: allow the mergeinfo property to be set
>> 
>
> So, is Junio aware of those patches? Or is it better to resubmit my fix
> separately?

Now I am ;-)  Thanks for reminding me.

I found these four near Eric's 'master':

  833fde5 git-svn: allow the mergeinfo property to be set
  8565a56 git-svn: fix processing of decorated commit hashes
  a3c7505 git-svn: check_cherry_pick should exclude commits already in our history
  c9be27f Documentation/git-svn: discourage "noMetadata"

They all (perhaps except the very tip one) look fixes not enhancements, so
I'll merge it to 'maint', so it can appear in 'master' and also in 1.7.3.2
in due course.

If 833fde5 needs to be excluded from 'maint', please advise.

```

## Eric Wong, 2010-10-04 22:05

Subject: Re: [PATCH] git-svn: allow the mergeinfo property to be set
Message-ID: <20101004220558.GA29932@dcvr.yhbt.net>
URL: https://gitlist.dev/e/20101004220558.GA29932%40dcvr.yhbt.net
In-Reply-To: <7vhbh197ut.fsf@alter.siamese.dyndns.org>

```
Junio C Hamano <gitster@pobox.com> wrote:
> I found these four near Eric's 'master':
> 
>   833fde5 git-svn: allow the mergeinfo property to be set
>   8565a56 git-svn: fix processing of decorated commit hashes
>   a3c7505 git-svn: check_cherry_pick should exclude commits already in our history
>   c9be27f Documentation/git-svn: discourage "noMetadata"
> 
> They all (perhaps except the very tip one) look fixes not enhancements, so
> I'll merge it to 'maint', so it can appear in 'master' and also in 1.7.3.2
> in due course.
> 
> If 833fde5 needs to be excluded from 'maint', please advise.

Yes, 833fde5 is an enhancement so it should be left out of 'maint'.

In the future, I suppose I could maintain my own 'maint' branch to make
your life easier.

-- 
Eric Wong

```
