git-svn: support rebase --preserve-merges
authorAvishay Lavie <avishay.lavie@gmail.com>
Tue, 15 May 2012 08:45:50 +0000 (11:45 +0300)
committerEric Wong <normalperson@yhbt.net>
Thu, 17 May 2012 02:21:43 +0000 (19:21 -0700)
When git svn rebase is performed after an unpushed merge, the
rebase operation follows both parents and replays both the user's
local commits and those from the merged branch. This is usually
not the intended behavior.
This patch adds support for the --preserve-merges/-p flag which
allows for a better workflow by re-applying merge commits as merges.

[ew: fixed a minor syntax error]

Signed-off-by: Avishay Lavie <avishay.lavie@gmail.com>
Signed-off-by: Eric Wong <normalperson@yhbt.net>
Documentation/git-svn.txt
git-svn.perl

index 34ee785064128bce0feb2cfc86d3040b42a8f428..0d52997b8d3389ff88973b910185b2484309aaab 100644 (file)
@@ -572,6 +572,8 @@ config key: svn.repackflags
 --merge::
 -s<strategy>::
 --strategy=<strategy>::
+-p::
+--preserve-merges::
        These are only used with the 'dcommit' and 'rebase' commands.
 +
 Passed directly to 'git rebase' when using 'dcommit' if a
index 31d02b5f70f553e27e0bdc760355909cb535f813..c84842ff0383c6929d8169834944ec1ad2bb7346 100755 (executable)
@@ -106,7 +106,7 @@ my ($_stdin, $_help, $_edit,
        $_message, $_file, $_branch_dest,
        $_template, $_shared,
        $_version, $_fetch_all, $_no_rebase, $_fetch_parent,
-       $_merge, $_strategy, $_dry_run, $_local,
+       $_merge, $_strategy, $_preserve_merges, $_dry_run, $_local,
        $_prefix, $_no_checkout, $_url, $_verbose,
        $_git_format, $_commit_url, $_tag, $_merge_info, $_interactive);
 $Git::SVN::_follow_parent = 1;
@@ -255,6 +255,7 @@ my %cmd = (
                          'local|l' => \$_local,
                          'fetch-all|all' => \$_fetch_all,
                          'dry-run|n' => \$_dry_run,
+                         'preserve-merges|p' => \$_preserve_merges,
                          %fc_opts } ],
        'commit-diff' => [ \&cmd_commit_diff,
                           'Commit a diff between two trees',
@@ -1592,6 +1593,7 @@ sub rebase_cmd {
        push @cmd, '-v' if $_verbose;
        push @cmd, qw/--merge/ if $_merge;
        push @cmd, "--strategy=$_strategy" if $_strategy;
+       push @cmd, "--preserve-merges" if $_preserve_merges;
        @cmd;
 }