{"thread":{"id":"22108","subject":"[PATCH 1/2] git-svn: ignore changeless commits when checking for a cherry-pick","startedAt":"2010-01-06T20:08:48Z","lastAt":"2010-01-21T21:55:48Z","messageCount":11,"participants":["Andrew Myrick","Eric Wong","Sam Vilain"],"isPatch":true,"patchVersion":1,"patchTotal":2},"messages":[{"id":"130946","messageId":"1262808529-1575-1-git-send-email-amyrick@apple.com","threadId":"22108","inReplyTo":null,"subject":"[PATCH 1/2] git-svn: ignore changeless commits when checking for a cherry-pick","fromName":"Andrew Myrick","fromEmail":"amyrick@apple.com","sentAt":"2010-01-06T20:08:48Z","receivedAt":"2010-01-06T20:08:48Z","isPatch":true,"sender":{"key":"amyrick@apple.com","avatar":"https://avatars.githubusercontent.com/u/303045?v=4"},"body":"Update git-svn to ignore commits that do not change the tree when it is\ndeciding if an svn merge ticket represents a real branch merge or just a\ncherry-pick.\n\nConsider the following integration model in the svn repository:\n\n   F---G  branch1\n  /     \\\n D  tag1 \\   E  tag2\n/         \\ /\nA---B      C  trunk\n\nbranch1 is merged to trunk in commit C.\n\nWith this patch, git-svn will correctly identify branch1 as a proper merge\nparent, instead of incorrectly ignoring it as a cherry-pick.\n\nSigned-off-by: Andrew Myrick <amyrick@apple.com>\n---\n git-svn.perl |   24 ++++++++++++++++++++++++\n 1 files changed, 24 insertions(+), 0 deletions(-)\n\ndiff --git a/git-svn.perl b/git-svn.perl\nindex 650c9e5..8c7c034 100755\n--- a/git-svn.perl\n+++ b/git-svn.perl\n@@ -3052,12 +3052,36 @@ sub check_cherry_pick {\n \tfor my $range ( @ranges ) {\n \t\tdelete @commits{_rev_list($range)};\n \t}\n+        for my $commit (keys %commits) {\n+                if (has_no_changes($commit)) {\n+                        delete $commits{$commit};\n+                }\n+        }\n \treturn (keys %commits);\n }\n \n+sub has_no_changes {\n+        my $commit = shift;\n+\n+        my @revs = split / /, command_oneline(\n+                qw(rev-list --parents -1 -m), $commit);\n+\n+        # Commits with no parents, e.g. the start of a partial branch,\n+        # have changes by definition.\n+        return 1 if (@revs < 2);\n+    \n+        # Commits with multiple parents, e.g a merge, have no changes\n+        # by definition.\n+        return 0 if (@revs > 2);\n+       \n+        return (command_oneline(\"rev-parse\", \"$commit^{tree}\") eq\n+                command_oneline(\"rev-parse\", \"$commit~1^{tree}\"));\n+}\n+\n BEGIN {\n \tmemoize 'lookup_svn_merge';\n \tmemoize 'check_cherry_pick';\n+        memoize 'has_no_changes';\n }\n \n sub parents_exclude {\n-- \n1.6.6.2.g18c9a\n"},{"id":"130947","messageId":"1262808529-1575-2-git-send-email-amyrick@apple.com","threadId":"22108","inReplyTo":"1262808529-1575-1-git-send-email-amyrick@apple.com","subject":"[PATCH 2/2] git-svn: handle merge-base failures","fromName":"Andrew Myrick","fromEmail":"amyrick@apple.com","sentAt":"2010-01-06T20:08:49Z","receivedAt":"2010-01-06T20:08:49Z","isPatch":true,"sender":{"key":"amyrick@apple.com","avatar":"https://avatars.githubusercontent.com/u/303045?v=4"},"body":"Change git-svn to warn and continue when merge-base fails while processing svn\nmerge tickets.\n\nmerge-base can fail when a partial branch is created and merged back to trunk\nin svn, because it cannot find a common ancestor between the partial branch and\ntrunk.\n\nSigned-off-by: Andrew Myrick <amyrick@apple.com>\n---\n git-svn.perl |   19 +++++++++++++++----\n 1 files changed, 15 insertions(+), 4 deletions(-)\n\ndiff --git a/git-svn.perl b/git-svn.perl\nindex 8c7c034..d58982b 100755\n--- a/git-svn.perl\n+++ b/git-svn.perl\n@@ -3158,10 +3158,21 @@ sub find_extra_svn_parents {\n \t\tmy $ranges = $ranges{$merge_tip};\n \n \t\t# check out 'new' tips\n-\t\tmy $merge_base = command_oneline(\n-\t\t\t\"merge-base\",\n-\t\t\t@$parents, $merge_tip,\n-\t\t       );\n+                my $merge_base;\n+                eval {\n+                        $merge_base = command_oneline(\n+                                \"merge-base\",\n+                                @$parents, $merge_tip,\n+                               );\n+                };\n+                if ($@) {\n+                        die \"An error occurred during merge-base\"\n+                            unless $@->isa(\"Git::Error::Command\");\n+\n+                        warn \"W: Cannot find common ancestor between \".\n+                            \"@$parents and $merge_tip. Ignoring merge info.\\n\";\n+                        next;\n+                }\n \n \t\t# double check that there are no missing non-merge commits\n \t\tmy (@incomplete) = check_cherry_pick(\n-- \n1.6.6.2.g18c9a\n"},{"id":"130954","messageId":"20100106214338.GA5115@dcvr.yhbt.net","threadId":"22108","inReplyTo":"1262808529-1575-1-git-send-email-amyrick@apple.com","subject":"Re: [PATCH 1/2] git-svn: ignore changeless commits when checking for a cherry-pick","fromName":"Eric Wong","fromEmail":"normalperson@yhbt.net","sentAt":"2010-01-06T21:43:38Z","receivedAt":"2010-01-06T21:43:38Z","isPatch":true,"sender":{"key":"e@80x24.org","avatar":null},"body":"Andrew Myrick <amyrick@apple.com> wrote:\n> diff --git a/git-svn.perl b/git-svn.perl\n> index 650c9e5..8c7c034 100755\n> --- a/git-svn.perl\n> +++ b/git-svn.perl\n> @@ -3052,12 +3052,36 @@ sub check_cherry_pick {\n>  \tfor my $range ( @ranges ) {\n>  \t\tdelete @commits{_rev_list($range)};\n>  \t}\n> +        for my $commit (keys %commits) {\n\nHi Andrew,\n\nI'll again defer to Sam for Acks on these.  Test cases would be nice to\nhave, too.\n\nA few notes:\n\nThe prevailing standard for indentation in git is with hard tabs and\nthat's certainly the case with the rest of git-svn.perl.\n\n> +sub has_no_changes {\n> +        my $commit = shift;\n> +\n> +        my @revs = split / /, command_oneline(\n> +                qw(rev-list --parents -1 -m), $commit);\n> +\n> +        # Commits with no parents, e.g. the start of a partial branch,\n> +        # have changes by definition.\n> +        return 1 if (@revs < 2);\n> +    \n\nI've become very picky about trailing whitespace (from Junio :), too.\n\"git diff --check\" is helpful for this, especially in the pre-commit\nhook.\n\nThanks!\n\n-- \nEric Wong\n"},{"id":"130960","messageId":"4B4510EE.4090504@vilain.net","threadId":"22108","inReplyTo":"20100106214338.GA5115@dcvr.yhbt.net","subject":"Re: [spf:guess] Re: [PATCH 1/2] git-svn: ignore changeless commits when checking for a cherry-pick","fromName":"Sam Vilain","fromEmail":"sam@vilain.net","sentAt":"2010-01-06T22:38:38Z","receivedAt":"2010-01-06T22:38:38Z","isPatch":true,"sender":{"key":"sam@vilain.net","avatar":"https://gravatar.com/avatar/8fc840ca854dbf6f7065b4335e3b934951c1dca3b11db688e95e471901f8f4a8?d=mp&s=160"},"body":"Eric Wong wrote:\n> Andrew Myrick <amyrick@apple.com> wrote:\n>   \n>> diff --git a/git-svn.perl b/git-svn.perl\n>> index 650c9e5..8c7c034 100755\n>> --- a/git-svn.perl\n>> +++ b/git-svn.perl\n>> @@ -3052,12 +3052,36 @@ sub check_cherry_pick {\n>>  \tfor my $range ( @ranges ) {\n>>  \t\tdelete @commits{_rev_list($range)};\n>>  \t}\n>> +        for my $commit (keys %commits) {\n>>     \n>\n> Hi Andrew,\n>\n> I'll again defer to Sam for Acks on these.  Test cases would be nice to\n> have, too.\n>   \n\nThey look fine to me, agreed a test case would be nice and make sure the\nfeatures aren't lost later inadvertently.\n\nThanks Andrew,\nSam\n"},{"id":"130961","messageId":"E10FB265-0C47-44C7-9347-687A9F447603@apple.com","threadId":"22108","inReplyTo":"20100106214338.GA5115@dcvr.yhbt.net","subject":"Re: [PATCH 1/2] git-svn: ignore changeless commits when checking for a cherry-pick","fromName":"Andrew Myrick","fromEmail":"amyrick@apple.com","sentAt":"2010-01-06T22:52:03Z","receivedAt":"2010-01-06T22:52:03Z","isPatch":true,"sender":{"key":"amyrick@apple.com","avatar":"https://avatars.githubusercontent.com/u/303045?v=4"},"body":"\nOn Jan 6, 2010, at 1:43 PM, Eric Wong wrote:\n\n> Andrew Myrick <amyrick@apple.com> wrote:\n>> diff --git a/git-svn.perl b/git-svn.perl\n>> index 650c9e5..8c7c034 100755\n>> --- a/git-svn.perl\n>> +++ b/git-svn.perl\n>> @@ -3052,12 +3052,36 @@ sub check_cherry_pick {\n>> \tfor my $range ( @ranges ) {\n>> \t\tdelete @commits{_rev_list($range)};\n>> \t}\n>> +        for my $commit (keys %commits) {\n> \n> Hi Andrew,\n> \n> I'll again defer to Sam for Acks on these.  Test cases would be nice to\n> have, too.\n\nI'll see what I can do.  The test cases are conceptually simple (the svn dump I sent out the other day will exercise one of these patches), but it will take me some time to learn git's testing infrastructure, and I have impending deadlines on other work, so I can't promise anything immediate.\n\n> \n> A few notes:\n> \n> The prevailing standard for indentation in git is with hard tabs and\n> that's certainly the case with the rest of git-svn.perl.\n> \n>> +sub has_no_changes {\n>> +        my $commit = shift;\n>> +\n>> +        my @revs = split / /, command_oneline(\n>> +                qw(rev-list --parents -1 -m), $commit);\n>> +\n>> +        # Commits with no parents, e.g. the start of a partial branch,\n>> +        # have changes by definition.\n>> +        return 1 if (@revs < 2);\n>> +    \n> \n> I've become very picky about trailing whitespace (from Junio :), too.\n> \"git diff --check\" is helpful for this, especially in the pre-commit\n> hook.\n\nMy apologies for not noticing this.  I'll regenerate patches that conform to the style guidelines.  Thanks for pointing out `git diff --check`; it's quite helpful.\n\n-Andrew"},{"id":"130963","messageId":"1262823922-3415-1-git-send-email-amyrick@apple.com","threadId":"22108","inReplyTo":"E10FB265-0C47-44C7-9347-687A9F447603@apple.com","subject":"[PATCH 1/2] git-svn: ignore changeless commits when checking for a cherry-pick","fromName":"Andrew Myrick","fromEmail":"amyrick@apple.com","sentAt":"2010-01-07T00:25:21Z","receivedAt":"2010-01-07T00:25:21Z","isPatch":true,"sender":{"key":"amyrick@apple.com","avatar":"https://avatars.githubusercontent.com/u/303045?v=4"},"body":"Update git-svn to ignore commits that do not change the tree when it is\ndeciding if an svn merge ticket represents a real branch merge or just a\ncherry-pick.\n\nConsider the following integration model in the svn repository:\n\n   F---G  branch1\n  /     \\\n D  tag1 \\   E  tag2\n/         \\ /\nA---B      C  trunk\n\nbranch1 is merged to trunk in commit C.\n\nWith this patch, git-svn will correctly identify branch1 as a proper merge\nparent, instead of incorrectly ignoring it as a cherry-pick.\n\nSigned-off-by: Andrew Myrick <amyrick@apple.com>\n---\n git-svn.perl |   24 ++++++++++++++++++++++++\n 1 files changed, 24 insertions(+), 0 deletions(-)\n\ndiff --git a/git-svn.perl b/git-svn.perl\nindex 650c9e5..947184a 100755\n--- a/git-svn.perl\n+++ b/git-svn.perl\n@@ -3052,12 +3052,36 @@ sub check_cherry_pick {\n \tfor my $range ( @ranges ) {\n \t\tdelete @commits{_rev_list($range)};\n \t}\n+\tfor my $commit (keys %commits) {\n+\t\tif (has_no_changes($commit)) {\n+\t\t\tdelete $commits{$commit};\n+\t\t}\n+\t}\n \treturn (keys %commits);\n }\n \n+sub has_no_changes {\n+\tmy $commit = shift;\n+\n+\tmy @revs = split / /, command_oneline(\n+\t\tqw(rev-list --parents -1 -m), $commit);\n+\n+\t# Commits with no parents, e.g. the start of a partial branch,\n+\t# have changes by definition.\n+\treturn 1 if (@revs < 2);\n+\n+\t# Commits with multiple parents, e.g a merge, have no changes\n+\t# by definition.\n+\treturn 0 if (@revs > 2);\n+\n+\treturn (command_oneline(\"rev-parse\", \"$commit^{tree}\") eq\n+\t\tcommand_oneline(\"rev-parse\", \"$commit~1^{tree}\"));\n+}\n+\n BEGIN {\n \tmemoize 'lookup_svn_merge';\n \tmemoize 'check_cherry_pick';\n+\tmemoize 'has_no_changes';\n }\n \n sub parents_exclude {\n-- \n1.6.6.2.g18c9a\n"},{"id":"130964","messageId":"1262823922-3415-2-git-send-email-amyrick@apple.com","threadId":"22108","inReplyTo":"1262823922-3415-1-git-send-email-amyrick@apple.com","subject":"[PATCH 2/2] git-svn: handle merge-base failures","fromName":"Andrew Myrick","fromEmail":"amyrick@apple.com","sentAt":"2010-01-07T00:25:22Z","receivedAt":"2010-01-07T00:25:22Z","isPatch":true,"sender":{"key":"amyrick@apple.com","avatar":"https://avatars.githubusercontent.com/u/303045?v=4"},"body":"Change git-svn to warn and continue when merge-base fails while processing svn\nmerge tickets.\n\nmerge-base can fail when a partial branch is created and merged back to trunk\nin svn, because it cannot find a common ancestor between the partial branch and\ntrunk.\n\nSigned-off-by: Andrew Myrick <amyrick@apple.com>\n---\n git-svn.perl |   19 +++++++++++++++----\n 1 files changed, 15 insertions(+), 4 deletions(-)\n\ndiff --git a/git-svn.perl b/git-svn.perl\nindex 947184a..1f201e4 100755\n--- a/git-svn.perl\n+++ b/git-svn.perl\n@@ -3158,10 +3158,21 @@ sub find_extra_svn_parents {\n \t\tmy $ranges = $ranges{$merge_tip};\n \n \t\t# check out 'new' tips\n-\t\tmy $merge_base = command_oneline(\n-\t\t\t\"merge-base\",\n-\t\t\t@$parents, $merge_tip,\n-\t\t       );\n+\t\tmy $merge_base;\n+\t\teval {\n+\t\t\t$merge_base = command_oneline(\n+\t\t\t\t\"merge-base\",\n+\t\t\t\t@$parents, $merge_tip,\n+\t\t\t);\n+\t\t};\n+\t\tif ($@) {\n+\t\t\tdie \"An error occurred during merge-base\"\n+\t\t\t\tunless $@->isa(\"Git::Error::Command\");\n+\n+\t\t\twarn \"W: Cannot find common ancestor between \".\n+\t\t\t\t\"@$parents and $merge_tip. Ignoring merge info.\\n\";\n+\t\t\tnext;\n+\t\t}\n \n \t\t# double check that there are no missing non-merge commits\n \t\tmy (@incomplete) = check_cherry_pick(\n-- \n1.6.6.2.g18c9a\n"},{"id":"130979","messageId":"20100107064916.GA8557@dcvr.yhbt.net","threadId":"22108","inReplyTo":"4B4510EE.4090504@vilain.net","subject":"Re: [spf:guess] Re: [PATCH 1/2] git-svn: ignore changeless commits when checking for a cherry-pick","fromName":"Eric Wong","fromEmail":"normalperson@yhbt.net","sentAt":"2010-01-07T06:49:16Z","receivedAt":"2010-01-07T06:49:16Z","isPatch":true,"sender":{"key":"e@80x24.org","avatar":null},"body":"Sam Vilain <sam@vilain.net> wrote:\n> Eric Wong wrote:\n> > Andrew Myrick <amyrick@apple.com> wrote:\n> >   \n> >> diff --git a/git-svn.perl b/git-svn.perl\n> >\n> > Hi Andrew,\n> >\n> > I'll again defer to Sam for Acks on these.  Test cases would be nice to\n> > have, too.\n> >   \n> \n> They look fine to me, agreed a test case would be nice and make sure the\n> features aren't lost later inadvertently.\n\nThanks Sam,\n\nShall I consider this an Ack and push Andrew's new changes\nup while waiting for test cases?\n\n-- \nEric Wong\n"},{"id":"130987","messageId":"1262855107.4867.3.camel@denix","threadId":"22108","inReplyTo":"20100107064916.GA8557@dcvr.yhbt.net","subject":"Re: [spf:guess] Re: [spf:guess] Re: [PATCH 1/2] git-svn: ignore changeless commits when checking for a cherry-pick","fromName":"Sam Vilain","fromEmail":"sam@vilain.net","sentAt":"2010-01-07T09:05:07Z","receivedAt":"2010-01-07T09:05:07Z","isPatch":true,"sender":{"key":"sam@vilain.net","avatar":"https://gravatar.com/avatar/8fc840ca854dbf6f7065b4335e3b934951c1dca3b11db688e95e471901f8f4a8?d=mp&s=160"},"body":"On Wed, 2010-01-06 at 22:49 -0800, Eric Wong wrote:\n> Sam Vilain <sam@vilain.net> wrote:\n> > Eric Wong wrote:\n> > > Andrew Myrick <amyrick@apple.com> wrote:\n> > >   \n> > >> diff --git a/git-svn.perl b/git-svn.perl\n> > >\n> > > Hi Andrew,\n> > >\n> > > I'll again defer to Sam for Acks on these.  Test cases would be nice to\n> > > have, too.\n> > >   \n> > \n> > They look fine to me, agreed a test case would be nice and make sure the\n> > features aren't lost later inadvertently.\n> \n> Thanks Sam,\n> \n> Shall I consider this an Ack and push Andrew's new changes\n> up while waiting for test cases?\n\nSure, the intent looks fine and given that Andrew has likely been using\nit a lot it's probably right.  So yes, that's an ack.  Hopefully I'll\nfind time to push along some tests soon.\n\nCheers,\nSam\n"},{"id":"130988","messageId":"20100107095016.GA2647@dcvr.yhbt.net","threadId":"22108","inReplyTo":"1262823922-3415-1-git-send-email-amyrick@apple.com","subject":"Re: [PATCH 1/2] git-svn: ignore changeless commits when checking for a cherry-pick","fromName":"Eric Wong","fromEmail":"normalperson@yhbt.net","sentAt":"2010-01-07T09:50:17Z","receivedAt":"2010-01-07T09:50:17Z","isPatch":true,"sender":{"key":"e@80x24.org","avatar":null},"body":"Andrew Myrick <amyrick@apple.com> wrote:\n> Update git-svn to ignore commits that do not change the tree when it is\n> deciding if an svn merge ticket represents a real branch merge or just a\n> cherry-pick.\n> \n> Consider the following integration model in the svn repository:\n> \n>    F---G  branch1\n>   /     \\\n>  D  tag1 \\   E  tag2\n> /         \\ /\n> A---B      C  trunk\n> \n> branch1 is merged to trunk in commit C.\n> \n> With this patch, git-svn will correctly identify branch1 as a proper merge\n> parent, instead of incorrectly ignoring it as a cherry-pick.\n> \n> Signed-off-by: Andrew Myrick <amyrick@apple.com>\n> ---\n\nThanks Andrew,\n\nI've added Acks for Sam and myself for this series and pushed out to\ngit://git.bogomips.org/git-svn:\n\nAndrew Myrick (2):\n      git-svn: ignore changeless commits when checking for a cherry-pick\n      git-svn: handle merge-base failures\n\n-- \nEric Wong\n"},{"id":"132336","messageId":"1264110948-627-1-git-send-email-amyrick@apple.com","threadId":"22108","inReplyTo":"E10FB265-0C47-44C7-9347-687A9F447603@apple.com","subject":"[PATCH] git-svn: update svn mergeinfo test suite","fromName":"Andrew Myrick","fromEmail":"amyrick@apple.com","sentAt":"2010-01-21T21:55:48Z","receivedAt":"2010-01-21T21:55:48Z","isPatch":true,"sender":{"key":"amyrick@apple.com","avatar":"https://avatars.githubusercontent.com/u/303045?v=4"},"body":"Add a partial branch (e.g., a branch from a project subdirectory) to the\ngit-svn mergeinfo test repository.\n\nAdd a tag and a branch from that tag to the git-svn mergeinfo test repository.\n\nUpdate the test script to expect a known failure in git-svn exposed by these\nadditions where merge info for partial branches is not preserved.\n\nSigned-off-by: Andrew Myrick <amyrick@apple.com>\n---\n t/t9151-svn-mergeinfo.sh   |    2 +-\n t/t9151/make-svnmerge-dump |   65 +++++-\n t/t9151/svn-mergeinfo.dump |  545 ++++++++++++++++++++++++++++++++++----------\n 3 files changed, 485 insertions(+), 127 deletions(-)\n\ndiff --git a/t/t9151-svn-mergeinfo.sh b/t/t9151-svn-mergeinfo.sh\nindex 359eeaa..3569c62 100755\n--- a/t/t9151-svn-mergeinfo.sh\n+++ b/t/t9151-svn-mergeinfo.sh\n@@ -33,7 +33,7 @@ test_expect_success 'svn non-merge merge commits did not become git merge commit\n \t[ -z \"$bad_non_merges\" ]\n \t'\n \n-test_expect_success 'everything got merged in the end' '\n+test_expect_failure 'everything got merged in the end' '\n \tunmerged=$(git rev-list --all --not master)\n \t[ -z \"$unmerged\" ]\n \t'\ndiff --git a/t/t9151/make-svnmerge-dump b/t/t9151/make-svnmerge-dump\nindex d917717..3d73f14 100644\n--- a/t/t9151/make-svnmerge-dump\n+++ b/t/t9151/make-svnmerge-dump\n@@ -26,8 +26,9 @@ i=0\n cd foo\n mkdir trunk\n mkdir branches\n-svn add trunk branches\n-i=$(commit $i \"Setup trunk and branches\")\n+mkdir tags\n+svn add trunk branches tags\n+i=$(commit $i \"Setup trunk, branches, and tags\")\n \n git cat-file blob 6683463e:Makefile > trunk/Makefile\n svn add trunk/Makefile \n@@ -155,6 +156,66 @@ svn merge ../branches/right --accept postpone\n i=$(commit $i \"non-merge right to trunk 2\")\n cd ..\n \n+say \"Adding subdirectory to LEFT\"\n+svn update\n+cd branches/left\n+mkdir subdir\n+echo \"Yeehaw\" > subdir/cowboy\n+svn add subdir\n+i=$(commit $i \"add subdirectory to left branch\")\n+cd ../../\n+\n+say \"Merging LEFT to TRUNK\"\n+svn update\n+cd trunk\n+svn merge ../branches/left --accept postpone\n+i=$(commit $i \"merge left to trunk\")\n+cd ..\n+\n+say \"Make PARTIAL branch\"\n+svn update\n+i=$(commit $i \"make partial branch\")\n+svn cp trunk/subdir branches/partial\n+\n+say \"Make a commit to PARTIAL\"\n+svn update\n+cd branches/partial\n+echo \"racecar\" > palindromes\n+svn add palindromes\n+i=$(commit $i \"partial update\")\n+cd ../../\n+\n+say \"Merge PARTIAL to TRUNK\"\n+svn update\n+cd trunk/subdir\n+svn merge ../../branches/partial --accept postpone\n+i=$(commit $i \"merge partial to trunk\")\n+cd ../../\n+\n+say \"Tagging trunk\"\n+svn update\n+i=$(commit $i \"tagging v1.0\")\n+svn cp trunk tags/v1.0\n+\n+say \"Branching BUGFIX from v1.0\"\n+svn update\n+i=$(commit $i \"make bugfix branch from tag\")\n+svn cp tags/v1.0 branches/bugfix\n+\n+say \"Make a commit to BUGFIX\"\n+svn update\n+cd branches/bugfix/\n+echo \"kayak\" >> subdir/palindromes\n+i=$(commit $i \"commit to bugfix\")\n+cd ../../\n+\n+say \"Merge BUGFIX to TRUNK\"\n+svn update\n+cd trunk\n+svn merge ../branches/bugfix/ --accept postpone\n+i=$(commit $i \"Merge BUGFIX to TRUNK\")\n+cd ..\n+\n cd ..\n svnadmin dump foo.svn > svn-mergeinfo.dump\n \ndiff --git a/t/t9151/svn-mergeinfo.dump b/t/t9151/svn-mergeinfo.dump\nindex 9543e31..ebf386e 100644\n--- a/t/t9151/svn-mergeinfo.dump\n+++ b/t/t9151/svn-mergeinfo.dump\n@@ -1,6 +1,6 @@\n SVN-fs-dump-format-version: 2\n \n-UUID: 64142547-0943-4db2-836a-d1e1eb2f9924\n+UUID: d6191530-2693-4a8e-98e7-b194d4c3edd8\n \n Revision-number: 0\n Prop-content-length: 56\n@@ -9,25 +9,25 @@ Content-length: 56\n K 8\n svn:date\n V 27\n-2009-12-19T16:17:51.232640Z\n+2010-01-19T04:14:02.832406Z\n PROPS-END\n \n Revision-number: 1\n-Prop-content-length: 128\n-Content-length: 128\n+Prop-content-length: 134\n+Content-length: 134\n \n K 7\n svn:log\n-V 29\n-(r1) Setup trunk and branches\n+V 36\n+(r1) Setup trunk, branches, and tags\n K 10\n svn:author\n-V 4\n-samv\n+V 3\n+adm\n K 8\n svn:date\n V 27\n-2009-12-19T16:17:51.831965Z\n+2010-01-19T04:14:03.055172Z\n PROPS-END\n \n Node-path: branches\n@@ -39,6 +39,15 @@ Content-length: 10\n PROPS-END\n \n \n+Node-path: tags\n+Node-kind: dir\n+Node-action: add\n+Prop-content-length: 10\n+Content-length: 10\n+\n+PROPS-END\n+\n+\n Node-path: trunk\n Node-kind: dir\n Node-action: add\n@@ -49,8 +58,8 @@ PROPS-END\n \n \n Revision-number: 2\n-Prop-content-length: 112\n-Content-length: 112\n+Prop-content-length: 111\n+Content-length: 111\n \n K 7\n svn:log\n@@ -58,12 +67,12 @@ V 13\n (r2) ancestor\n K 10\n svn:author\n-V 4\n-samv\n+V 3\n+adm\n K 8\n svn:date\n V 27\n-2009-12-19T16:17:52.300075Z\n+2010-01-19T04:14:04.064506Z\n PROPS-END\n \n Node-path: trunk/Makefile\n@@ -156,8 +165,8 @@ backup: clean\n \n \n Revision-number: 3\n-Prop-content-length: 120\n-Content-length: 120\n+Prop-content-length: 119\n+Content-length: 119\n \n K 7\n svn:log\n@@ -165,12 +174,12 @@ V 21\n (r3) make left branch\n K 10\n svn:author\n-V 4\n-samv\n+V 3\n+adm\n K 8\n svn:date\n V 27\n-2009-12-19T16:17:52.768800Z\n+2010-01-19T04:14:06.040389Z\n PROPS-END\n \n Node-path: branches/left\n@@ -190,8 +199,8 @@ Text-copy-source-sha1: 103205ce331f7d64086dba497574734f78439590\n \n \n Revision-number: 4\n-Prop-content-length: 121\n-Content-length: 121\n+Prop-content-length: 120\n+Content-length: 120\n \n K 7\n svn:log\n@@ -199,12 +208,12 @@ V 22\n (r4) make right branch\n K 10\n svn:author\n-V 4\n-samv\n+V 3\n+adm\n K 8\n svn:date\n V 27\n-2009-12-19T16:17:53.177879Z\n+2010-01-19T04:14:08.040905Z\n PROPS-END\n \n Node-path: branches/right\n@@ -224,8 +233,8 @@ Text-copy-source-sha1: 103205ce331f7d64086dba497574734f78439590\n \n \n Revision-number: 5\n-Prop-content-length: 117\n-Content-length: 117\n+Prop-content-length: 116\n+Content-length: 116\n \n K 7\n svn:log\n@@ -233,12 +242,12 @@ V 18\n (r5) left update 1\n K 10\n svn:author\n-V 4\n-samv\n+V 3\n+adm\n K 8\n svn:date\n V 27\n-2009-12-19T16:17:53.604691Z\n+2010-01-19T04:14:09.049169Z\n PROPS-END\n \n Node-path: branches/left/Makefile\n@@ -329,8 +338,8 @@ backup: clean\n \n \n Revision-number: 6\n-Prop-content-length: 118\n-Content-length: 118\n+Prop-content-length: 117\n+Content-length: 117\n \n K 7\n svn:log\n@@ -338,12 +347,12 @@ V 19\n (r6) right update 1\n K 10\n svn:author\n-V 4\n-samv\n+V 3\n+adm\n K 8\n svn:date\n V 27\n-2009-12-19T16:17:54.063555Z\n+2010-01-19T04:14:10.049350Z\n PROPS-END\n \n Node-path: branches/right/Makefile\n@@ -437,8 +446,8 @@ backup: clean\n \n \n Revision-number: 7\n-Prop-content-length: 117\n-Content-length: 117\n+Prop-content-length: 116\n+Content-length: 116\n \n K 7\n svn:log\n@@ -446,12 +455,12 @@ V 18\n (r7) left update 2\n K 10\n svn:author\n-V 4\n-samv\n+V 3\n+adm\n K 8\n svn:date\n V 27\n-2009-12-19T16:17:54.523904Z\n+2010-01-19T04:14:11.049209Z\n PROPS-END\n \n Node-path: branches/left/Makefile\n@@ -542,8 +551,8 @@ backup: clean\n \n \n Revision-number: 8\n-Prop-content-length: 117\n-Content-length: 117\n+Prop-content-length: 116\n+Content-length: 116\n \n K 7\n svn:log\n@@ -551,12 +560,12 @@ V 18\n (r8) left update 3\n K 10\n svn:author\n-V 4\n-samv\n+V 3\n+adm\n K 8\n svn:date\n V 27\n-2009-12-19T16:17:54.975970Z\n+2010-01-19T04:14:12.049234Z\n PROPS-END\n \n Node-path: branches/left/Makefile\n@@ -647,8 +656,8 @@ backup: clean\n \n \n Revision-number: 9\n-Prop-content-length: 124\n-Content-length: 124\n+Prop-content-length: 123\n+Content-length: 123\n \n K 7\n svn:log\n@@ -656,12 +665,12 @@ V 25\n (r9) make left sub-branch\n K 10\n svn:author\n-V 4\n-samv\n+V 3\n+adm\n K 8\n svn:date\n V 27\n-2009-12-19T16:17:55.459904Z\n+2010-01-19T04:14:14.040894Z\n PROPS-END\n \n Node-path: branches/left-sub\n@@ -687,8 +696,8 @@ Text-copy-source-sha1: a13de8e23f1483efca3e57b2b64b0ae6f740ce10\n \n \n Revision-number: 10\n-Prop-content-length: 129\n-Content-length: 129\n+Prop-content-length: 128\n+Content-length: 128\n \n K 7\n svn:log\n@@ -696,12 +705,12 @@ V 30\n (r10) left sub-branch update 1\n K 10\n svn:author\n-V 4\n-samv\n+V 3\n+adm\n K 8\n svn:date\n V 27\n-2009-12-19T16:17:55.862113Z\n+2010-01-19T04:14:15.049935Z\n PROPS-END\n \n Node-path: branches/left-sub/README\n@@ -718,8 +727,8 @@ crunch\n \n \n Revision-number: 11\n-Prop-content-length: 126\n-Content-length: 126\n+Prop-content-length: 125\n+Content-length: 125\n \n K 7\n svn:log\n@@ -727,12 +736,12 @@ V 27\n (r11) Merge left to trunk 1\n K 10\n svn:author\n-V 4\n-samv\n+V 3\n+adm\n K 8\n svn:date\n V 27\n-2009-12-19T16:17:56.413416Z\n+2010-01-19T04:14:18.056594Z\n PROPS-END\n \n Node-path: trunk\n@@ -836,8 +845,8 @@ backup: clean\n \n \n Revision-number: 12\n-Prop-content-length: 118\n-Content-length: 118\n+Prop-content-length: 117\n+Content-length: 117\n \n K 7\n svn:log\n@@ -845,12 +854,12 @@ V 19\n (r12) left update 4\n K 10\n svn:author\n-V 4\n-samv\n+V 3\n+adm\n K 8\n svn:date\n V 27\n-2009-12-19T16:17:56.831014Z\n+2010-01-19T04:14:19.049620Z\n PROPS-END\n \n Node-path: branches/left/zlonk\n@@ -867,8 +876,8 @@ touche\n \n \n Revision-number: 13\n-Prop-content-length: 119\n-Content-length: 119\n+Prop-content-length: 118\n+Content-length: 118\n \n K 7\n svn:log\n@@ -876,12 +885,12 @@ V 20\n (r13) right update 2\n K 10\n svn:author\n-V 4\n-samv\n+V 3\n+adm\n K 8\n svn:date\n V 27\n-2009-12-19T16:17:57.341143Z\n+2010-01-19T04:14:20.049659Z\n PROPS-END\n \n Node-path: branches/right/bang\n@@ -898,8 +907,8 @@ thwacke\n \n \n Revision-number: 14\n-Prop-content-length: 141\n-Content-length: 141\n+Prop-content-length: 140\n+Content-length: 140\n \n K 7\n svn:log\n@@ -907,12 +916,12 @@ V 42\n (r14) Cherry-pick right 2 commits to trunk\n K 10\n svn:author\n-V 4\n-samv\n+V 3\n+adm\n K 8\n svn:date\n V 27\n-2009-12-19T16:17:57.841851Z\n+2010-01-19T04:14:23.041991Z\n PROPS-END\n \n Node-path: trunk\n@@ -1029,8 +1038,8 @@ Text-copy-source-sha1: 0bc5bb345c0e71d28f784f12e0bd2d384c283062\n \n \n Revision-number: 15\n-Prop-content-length: 127\n-Content-length: 127\n+Prop-content-length: 126\n+Content-length: 126\n \n K 7\n svn:log\n@@ -1038,12 +1047,12 @@ V 28\n (r15) Merge right to trunk 1\n K 10\n svn:author\n-V 4\n-samv\n+V 3\n+adm\n K 8\n svn:date\n V 27\n-2009-12-19T16:17:58.368520Z\n+2010-01-19T04:14:26.054456Z\n PROPS-END\n \n Node-path: trunk\n@@ -1061,8 +1070,8 @@ PROPS-END\n \n \n Revision-number: 16\n-Prop-content-length: 119\n-Content-length: 119\n+Prop-content-length: 118\n+Content-length: 118\n \n K 7\n svn:log\n@@ -1070,12 +1079,12 @@ V 20\n (r16) right update 3\n K 10\n svn:author\n-V 4\n-samv\n+V 3\n+adm\n K 8\n svn:date\n V 27\n-2009-12-19T16:17:58.779056Z\n+2010-01-19T04:14:27.049955Z\n PROPS-END\n \n Node-path: branches/right/urkkk\n@@ -1092,8 +1101,8 @@ whamm\n \n \n Revision-number: 17\n-Prop-content-length: 119\n-Content-length: 119\n+Prop-content-length: 118\n+Content-length: 118\n \n K 7\n svn:log\n@@ -1101,12 +1110,12 @@ V 20\n (r17) trunk update 1\n K 10\n svn:author\n-V 4\n-samv\n+V 3\n+adm\n K 8\n svn:date\n V 27\n-2009-12-19T16:17:59.221851Z\n+2010-01-19T04:14:28.049615Z\n PROPS-END\n \n Node-path: trunk/vronk\n@@ -1123,8 +1132,8 @@ pow\n \n \n Revision-number: 18\n-Prop-content-length: 135\n-Content-length: 135\n+Prop-content-length: 134\n+Content-length: 134\n \n K 7\n svn:log\n@@ -1132,12 +1141,12 @@ V 36\n (r18) Merge right to left sub-branch\n K 10\n svn:author\n-V 4\n-samv\n+V 3\n+adm\n K 8\n svn:date\n V 27\n-2009-12-19T16:17:59.781666Z\n+2010-01-19T04:14:31.061460Z\n PROPS-END\n \n Node-path: branches/left-sub\n@@ -1262,8 +1271,8 @@ Text-copy-source-sha1: 3934264d277a0cf886b6b1c7f2b9e56da2525302\n \n \n Revision-number: 19\n-Prop-content-length: 129\n-Content-length: 129\n+Prop-content-length: 128\n+Content-length: 128\n \n K 7\n svn:log\n@@ -1271,12 +1280,12 @@ V 30\n (r19) left sub-branch update 2\n K 10\n svn:author\n-V 4\n-samv\n+V 3\n+adm\n K 8\n svn:date\n V 27\n-2009-12-19T16:18:00.200531Z\n+2010-01-19T04:14:32.049244Z\n PROPS-END\n \n Node-path: branches/left-sub/wham_eth\n@@ -1293,8 +1302,8 @@ zowie\n \n \n Revision-number: 20\n-Prop-content-length: 118\n-Content-length: 118\n+Prop-content-length: 117\n+Content-length: 117\n \n K 7\n svn:log\n@@ -1302,12 +1311,12 @@ V 19\n (r20) left update 5\n K 10\n svn:author\n-V 4\n-samv\n+V 3\n+adm\n K 8\n svn:date\n V 27\n-2009-12-19T16:18:00.659636Z\n+2010-01-19T04:14:33.049332Z\n PROPS-END\n \n Node-path: branches/left/glurpp\n@@ -1324,8 +1333,8 @@ eee_yow\n \n \n Revision-number: 21\n-Prop-content-length: 147\n-Content-length: 147\n+Prop-content-length: 146\n+Content-length: 146\n \n K 7\n svn:log\n@@ -1333,12 +1342,12 @@ V 48\n (r21) Cherry-pick left sub-branch commit to left\n K 10\n svn:author\n-V 4\n-samv\n+V 3\n+adm\n K 8\n svn:date\n V 27\n-2009-12-19T16:18:01.194402Z\n+2010-01-19T04:14:36.041839Z\n PROPS-END\n \n Node-path: branches/left\n@@ -1364,8 +1373,8 @@ Text-copy-source-sha1: b165019b005c199237ba822c4404e771e93b654a\n \n \n Revision-number: 22\n-Prop-content-length: 134\n-Content-length: 134\n+Prop-content-length: 133\n+Content-length: 133\n \n K 7\n svn:log\n@@ -1373,12 +1382,12 @@ V 35\n (r22) Merge left sub-branch to left\n K 10\n svn:author\n-V 4\n-samv\n+V 3\n+adm\n K 8\n svn:date\n V 27\n-2009-12-19T16:18:01.679218Z\n+2010-01-19T04:14:39.045014Z\n PROPS-END\n \n Node-path: branches/left\n@@ -1513,8 +1522,8 @@ Text-copy-source-sha1: 3934264d277a0cf886b6b1c7f2b9e56da2525302\n \n \n Revision-number: 23\n-Prop-content-length: 126\n-Content-length: 126\n+Prop-content-length: 125\n+Content-length: 125\n \n K 7\n svn:log\n@@ -1522,12 +1531,12 @@ V 27\n (r23) Merge left to trunk 2\n K 10\n svn:author\n-V 4\n-samv\n+V 3\n+adm\n K 8\n svn:date\n V 27\n-2009-12-19T16:18:02.212349Z\n+2010-01-19T04:14:42.052798Z\n PROPS-END\n \n Node-path: trunk\n@@ -1591,8 +1600,8 @@ Text-copy-source-sha1: 9716527ebd70a75c27625cacbeb2d897c6e86178\n \n \n Revision-number: 24\n-Prop-content-length: 131\n-Content-length: 131\n+Prop-content-length: 130\n+Content-length: 130\n \n K 7\n svn:log\n@@ -1600,12 +1609,12 @@ V 32\n (r24) non-merge right to trunk 2\n K 10\n svn:author\n-V 4\n-samv\n+V 3\n+adm\n K 8\n svn:date\n V 27\n-2009-12-19T16:18:02.672148Z\n+2010-01-19T04:14:44.038434Z\n PROPS-END\n \n Node-path: trunk\n@@ -1623,3 +1632,291 @@ V 64\n PROPS-END\n \n \n+Revision-number: 25\n+Prop-content-length: 135\n+Content-length: 135\n+\n+K 7\n+svn:log\n+V 37\n+(r25) add subdirectory to left branch\n+K 10\n+svn:author\n+V 3\n+adm\n+K 8\n+svn:date\n+V 27\n+2010-01-19T04:14:46.052649Z\n+PROPS-END\n+\n+Node-path: branches/left/subdir\n+Node-kind: dir\n+Node-action: add\n+Prop-content-length: 10\n+Content-length: 10\n+\n+PROPS-END\n+\n+\n+Node-path: branches/left/subdir/cowboy\n+Node-kind: file\n+Node-action: add\n+Prop-content-length: 10\n+Text-content-length: 7\n+Text-content-md5: f1d6530278ad409e68cc675476ad995f\n+Text-content-sha1: 732d9e3e5c391ffd767a98b45ddcc848de778cea\n+Content-length: 17\n+\n+PROPS-END\n+Yeehaw\n+\n+\n+Revision-number: 26\n+Prop-content-length: 123\n+Content-length: 123\n+\n+K 7\n+svn:log\n+V 25\n+(r26) merge left to trunk\n+K 10\n+svn:author\n+V 3\n+adm\n+K 8\n+svn:date\n+V 27\n+2010-01-19T04:14:49.040783Z\n+PROPS-END\n+\n+Node-path: trunk\n+Node-kind: dir\n+Node-action: change\n+Prop-content-length: 99\n+Content-length: 99\n+\n+K 13\n+svn:mergeinfo\n+V 64\n+/branches/left:2-25\n+/branches/left-sub:4-19\n+/branches/right:2-22\n+PROPS-END\n+\n+\n+Node-path: trunk/subdir\n+Node-kind: dir\n+Node-action: add\n+Node-copyfrom-rev: 25\n+Node-copyfrom-path: branches/left/subdir\n+\n+\n+Revision-number: 27\n+Prop-content-length: 118\n+Content-length: 118\n+\n+K 7\n+svn:log\n+V 20\n+(r28) partial update\n+K 10\n+svn:author\n+V 3\n+adm\n+K 8\n+svn:date\n+V 27\n+2010-01-19T04:14:53.049037Z\n+PROPS-END\n+\n+Node-path: branches/partial\n+Node-kind: dir\n+Node-action: add\n+Node-copyfrom-rev: 26\n+Node-copyfrom-path: trunk/subdir\n+\n+\n+Node-path: branches/partial/palindromes\n+Node-kind: file\n+Node-action: add\n+Prop-content-length: 10\n+Text-content-length: 8\n+Text-content-md5: 5d1c2024fb5efc4eef812856df1b080c\n+Text-content-sha1: 5f8509ddd14c91a52864dd1447344e706f9bbc69\n+Content-length: 18\n+\n+PROPS-END\n+racecar\n+\n+\n+Revision-number: 28\n+Prop-content-length: 126\n+Content-length: 126\n+\n+K 7\n+svn:log\n+V 28\n+(r29) merge partial to trunk\n+K 10\n+svn:author\n+V 3\n+adm\n+K 8\n+svn:date\n+V 27\n+2010-01-19T04:14:56.041526Z\n+PROPS-END\n+\n+Node-path: trunk/subdir\n+Node-kind: dir\n+Node-action: change\n+Prop-content-length: 142\n+Content-length: 142\n+\n+K 13\n+svn:mergeinfo\n+V 106\n+/branches/left/subdir:2-25\n+/branches/left-sub/subdir:4-19\n+/branches/partial:27\n+/branches/right/subdir:2-22\n+PROPS-END\n+\n+\n+Node-path: trunk/subdir/palindromes\n+Node-kind: file\n+Node-action: add\n+Node-copyfrom-rev: 27\n+Node-copyfrom-path: branches/partial/palindromes\n+Text-copy-source-md5: 5d1c2024fb5efc4eef812856df1b080c\n+Text-copy-source-sha1: 5f8509ddd14c91a52864dd1447344e706f9bbc69\n+\n+\n+Revision-number: 29\n+Prop-content-length: 131\n+Content-length: 131\n+\n+K 7\n+svn:log\n+V 33\n+(r31) make bugfix branch from tag\n+K 10\n+svn:author\n+V 3\n+adm\n+K 8\n+svn:date\n+V 27\n+2010-01-19T04:15:00.039761Z\n+PROPS-END\n+\n+Node-path: tags/v1.0\n+Node-kind: dir\n+Node-action: add\n+Node-copyfrom-rev: 28\n+Node-copyfrom-path: trunk\n+\n+\n+Revision-number: 30\n+Prop-content-length: 120\n+Content-length: 120\n+\n+K 7\n+svn:log\n+V 22\n+(r32) commit to bugfix\n+K 10\n+svn:author\n+V 3\n+adm\n+K 8\n+svn:date\n+V 27\n+2010-01-19T04:15:03.043218Z\n+PROPS-END\n+\n+Node-path: branches/bugfix\n+Node-kind: dir\n+Node-action: add\n+Node-copyfrom-rev: 29\n+Node-copyfrom-path: tags/v1.0\n+\n+\n+Node-path: branches/bugfix/subdir/palindromes\n+Node-kind: file\n+Node-action: change\n+Text-content-length: 14\n+Text-content-md5: 3b12d98578a3f4320ba97e66da54fe5f\n+Text-content-sha1: 672931c9e8ac2c408209efab2f015638b6d64042\n+Content-length: 14\n+\n+racecar\n+kayak\n+\n+\n+Revision-number: 31\n+Prop-content-length: 125\n+Content-length: 125\n+\n+K 7\n+svn:log\n+V 27\n+(r33) Merge BUGFIX to TRUNK\n+K 10\n+svn:author\n+V 3\n+adm\n+K 8\n+svn:date\n+V 27\n+2010-01-19T04:15:06.043723Z\n+PROPS-END\n+\n+Node-path: trunk\n+Node-kind: dir\n+Node-action: change\n+Prop-content-length: 133\n+Content-length: 133\n+\n+K 13\n+svn:mergeinfo\n+V 98\n+/branches/bugfix:30\n+/branches/left:2-25\n+/branches/left-sub:4-19\n+/branches/right:2-22\n+/tags/v1.0:29\n+PROPS-END\n+\n+\n+Node-path: trunk/subdir\n+Node-kind: dir\n+Node-action: change\n+Prop-content-length: 190\n+Content-length: 190\n+\n+K 13\n+svn:mergeinfo\n+V 154\n+/branches/bugfix/subdir:30\n+/branches/left/subdir:2-25\n+/branches/left-sub/subdir:4-19\n+/branches/partial:27\n+/branches/right/subdir:2-22\n+/tags/v1.0/subdir:29\n+PROPS-END\n+\n+\n+Node-path: trunk/subdir/palindromes\n+Node-kind: file\n+Node-action: change\n+Text-content-length: 14\n+Text-content-md5: 3b12d98578a3f4320ba97e66da54fe5f\n+Text-content-sha1: 672931c9e8ac2c408209efab2f015638b6d64042\n+Content-length: 14\n+\n+racecar\n+kayak\n+\n+\n-- \n1.6.6.2.g1fc48.dirty\n"}]}