From: Thomas Rast <trast@student.ethz.ch>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH v2 1/3] rebase: learn to rebase root commit
Date: Fri, 2 Jan 2009 23:20:02 +0100 [thread overview]
Message-ID: <200901022320.14055.trast@student.ethz.ch> (raw)
In-Reply-To: <7v4p0iivwh.fsf@gitster.siamese.dyndns.org>
[-- Attachment #1: Type: text/plain, Size: 3524 bytes --]
Junio C Hamano wrote:
> Thomas Rast <trast@student.ethz.ch> writes:
> > The main use-case is with git-svn: [...]
>
> I like what this series tries to do. Using the --root option is probably
> a more natural way to do what people often do with the "add graft and
> filter-branch the whole history once" procedure.
Their uses are somewhat disjoint, as grafting only works if the
grafted parent has an empty tree. Otherwise the grafted child will
appear to revert the entire history leading to it. Rebase OTOH
changes the committers.
> But it somewhat feels sad if the "main" use-case for this is to start your
> project in git and then migrate away by feeding your history to subversion
> ;-).
You can remove that paragraph if you don't want to "support" SVN in
git.git ;-)
> > # Make sure the branch to rebase onto is valid.
> > onto_name=${newbase-"$upstream_name"}
> > onto=$(git rev-parse --verify "${onto_name}^0") || exit
> >
> > # If a hook exists, give it a chance to interrupt
> > -run_pre_rebase_hook ${1+"$@"}
> > +run_pre_rebase_hook ${upstream_name+"$upstream_name"} "$@"
>
> I do not think ${upstream_name+"$upstream_name"} is a good check to begin
> with, because presense of it does not necessarily mean the command was
> invoked without --root; it could have come from the environment of the
> invoker (hence the suggestion to unset the variable explicitly).
Good catch, thanks.
I'm still not sure what ${1+"$@"} was about by the way. The most
authoritative reference I can find is
http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_05_02
which says
If there are no positional parameters, the expansion of '@' shall
generate zero fields, even when '@' is double-quoted.
('man bash' agrees.)
> And I do not think this is a good way to extend the calling convention of
> the hook, either. pre-rebase-hook used to always take upstream and
> optionally the explicit branch name. When --root is given, your code will
> give the hook a single parameter which is the explicit branch name
> (i.e. "we will switch to this branch and rebase it, are you Ok with it?"),
> but the hook will mistakenly think you are feeding the fork-point commit.
>
> Because an old pre-rebase-hook cannot verify --root case correctly anyway
> and needs to be updated, how about doing 'run_pre_rebase_hook --root "$@"'
> when --root was given?
True. I noticed that I had to fix the positionals, but forgot about
the hook afterwards. v3 implements this as you suggested.
> > +if test ! -z "$rebase_root"; then
> > + revisions="$orig_head"
> > + fp_flag="--root"
> > +else
> > + revisions="$upstream..$orig_head"
> > + fp_flag="--ignore-if-in-upstream"
> > +fi
>
> Hmph, the reason why --ignore-if-in-upstream is irrelevant when --root is
> given is because...?
Well, originally because format-patch didn't like the argument.
Thanks for prodding however, $onto..$head makes sort of makes sense
here and I discovered that even $onto...$head works, which is used in
'rebase -i'.
However, it's still a change of semantics: With --root we now ignore
patches that are already contained in $onto, as opposed to patches
that were already in $upstream in normal operation. It seems sensible
to do it this way, and perhaps even normal rebase should do it the
same way... if only format-patch would support it.
Thanks for the review! v3 upcoming.
--
Thomas Rast
trast@{inf,student}.ethz.ch
[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 197 bytes --]
next prev parent reply other threads:[~2009-01-02 22:21 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-12-29 16:45 [PATCH 0/3] rebase --root Thomas Rast
[not found] ` <cover.1230569041.git.trast@student.ethz.ch>
2008-12-29 16:45 ` rebase: learn to rebase root commit Thomas Rast
2008-12-29 16:45 ` rebase -i: " Thomas Rast
2008-12-29 21:49 ` Thomas Rast
2008-12-29 22:21 ` Boyd Stephen Smith Jr.
2008-12-30 12:23 ` Thomas Rast
2008-12-30 12:29 ` [PATCH v2 1/3] rebase: " Thomas Rast
2008-12-30 12:29 ` [PATCH v2 2/3] rebase -i: " Thomas Rast
2008-12-30 12:29 ` [PATCH v2 3/3] rebase: update documentation for --root Thomas Rast
2009-01-01 21:00 ` [PATCH v2 1/3] rebase: learn to rebase root commit Junio C Hamano
2009-01-02 18:58 ` Johannes Schindelin
2009-01-02 22:20 ` Thomas Rast [this message]
2009-01-02 22:28 ` [PATCH v3 1/4] rebase -i: execute hook only after argument checking Thomas Rast
2009-01-02 22:28 ` [PATCH v3 2/4] rebase: learn to rebase root commit Thomas Rast
2009-01-02 22:28 ` [PATCH v3 3/4] rebase -i: " Thomas Rast
2009-01-02 22:28 ` [PATCH v3 4/4] rebase: update documentation for --root Thomas Rast
2009-01-02 22:41 ` [INTERDIFF v3 3/4] rebase -i: learn to rebase root commit Thomas Rast
2009-01-02 22:41 ` [INTERDIFF v3 2/4] rebase: " Thomas Rast
2009-01-02 23:06 ` [PATCH " Junio C Hamano
2009-01-02 23:45 ` [PATCH v3.1] " Thomas Rast
2009-01-05 17:35 ` [PATCH v3.2] " Thomas Rast
2009-01-06 8:19 ` Junio C Hamano
2009-01-02 22:49 ` [PATCH v2 1/3] " Junio C Hamano
2009-01-02 22:54 ` Thomas Rast
2009-01-02 23:07 ` Junio C Hamano
2008-12-30 8:22 ` rebase -i: " Junio C Hamano
2008-12-29 16:45 ` rebase: update documentation for --root Thomas Rast
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200901022320.14055.trast@student.ethz.ch \
--to=trast@student.ethz.ch \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).