Re: [git-svn PATCH] Add --no-rebase option to git-svn dcommit
- From
- Eric Wong <normalperson@yhbt.net>
- Date
- May 4, 2007, 08:04 UTC
- Message-ID
- <20070504080424.GA30555@muzzle>
- In-Reply-To
- <20070504075908.GB17526@muzzle>
Eric Wong <normalperson@yhbt.net> wrote:
Show 19 quoted lines
> Karl Hasselström <kha@treskal.com> wrote: > > git-svn dcommit exports commits to Subversion, then imports them back > > to git again, and last but not least rebases or resets HEAD to the > > last of the new commits. I guess this rebasing is convenient when > > using just git, but when the commits to be exported are managed by > > StGIT, it's really annoying. So add an option to disable this > > behavior. And document it, too! > > Cool, I've been planning to add this myself, too. > > Acked-by: Eric Wong <normalperson@yhbt.net> > > > Signed-off-by: Karl Hasselström <kha@treskal.com> > > --- > > > > Arguably, the switch should be --rebase instead, and default to not > > rebase. But that would change the existing behavior, and possibly make > > dcommit less convenient to use for at least the person who implemented > > the existing behavior. Opinions?
Erm, sorry, I skipped over this part. No. I like rebase being the default behavior.
Show 77 quoted lines
> > Documentation/git-svn.txt | 3 +++
> > git-svn.perl | 33 ++++++++++++++++++---------------
> > 2 files changed, 21 insertions(+), 15 deletions(-)
> >
> > diff --git a/Documentation/git-svn.txt b/Documentation/git-svn.txt
> > index 62d7ef8..fcdeeaa 100644
> > --- a/Documentation/git-svn.txt
> > +++ b/Documentation/git-svn.txt
> > @@ -125,6 +125,9 @@ and have no uncommitted changes.
> > alternative to HEAD.
> > This is advantageous over 'set-tree' (below) because it produces
> > cleaner, more linear history.
> > ++
> > +--no-rebase;;
> > + After committing, do not rebase or reset.
> > --
> >
> > 'log'::
> > diff --git a/git-svn.perl b/git-svn.perl
> > index 6657e10..3c4f490 100755
> > --- a/git-svn.perl
> > +++ b/git-svn.perl
> > @@ -55,7 +55,7 @@ $sha1_short = qr/[a-f\d]{4,40}/;
> > my ($_stdin, $_help, $_edit,
> > $_message, $_file,
> > $_template, $_shared,
> > - $_version, $_fetch_all,
> > + $_version, $_fetch_all, $_no_rebase,
> > $_merge, $_strategy, $_dry_run, $_local,
> > $_prefix, $_no_checkout, $_verbose);
> > $Git::SVN::_follow_parent = 1;
> > @@ -114,6 +114,7 @@ my %cmd = (
> > 'verbose|v' => \$_verbose,
> > 'dry-run|n' => \$_dry_run,
> > 'fetch-all|all' => \$_fetch_all,
> > + 'no-rebase' => \$_no_rebase,
> > %cmt_opts, %fc_opts } ],
> > 'set-tree' => [ \&cmd_set_tree,
> > "Set an SVN repository to a git tree-ish",
> > @@ -413,21 +414,23 @@ sub cmd_dcommit {
> > return;
> > }
> > $_fetch_all ? $gs->fetch_all : $gs->fetch;
> > - # we always want to rebase against the current HEAD, not any
> > - # head that was passed to us
> > - my @diff = command('diff-tree', 'HEAD', $gs->refname, '--');
> > - my @finish;
> > - if (@diff) {
> > - @finish = rebase_cmd();
> > - print STDERR "W: HEAD and ", $gs->refname, " differ, ",
> > - "using @finish:\n", "@diff";
> > - } else {
> > - print "No changes between current HEAD and ",
> > - $gs->refname, "\nResetting to the latest ",
> > - $gs->refname, "\n";
> > - @finish = qw/reset --mixed/;
> > + unless ($_no_rebase) {
> > + # we always want to rebase against the current HEAD, not any
> > + # head that was passed to us
> > + my @diff = command('diff-tree', 'HEAD', $gs->refname, '--');
> > + my @finish;
> > + if (@diff) {
> > + @finish = rebase_cmd();
> > + print STDERR "W: HEAD and ", $gs->refname, " differ, ",
> > + "using @finish:\n", "@diff";
> > + } else {
> > + print "No changes between current HEAD and ",
> > + $gs->refname, "\nResetting to the latest ",
> > + $gs->refname, "\n";
> > + @finish = qw/reset --mixed/;
> > + }
> > + command_noisy(@finish, $gs->refname);
> > }
> > - command_noisy(@finish, $gs->refname);
> > }
> >
> > sub cmd_find_rev {-- Eric Wong