Re: [PATCH (v2) 2/2] rebase -i: teach --onto A...B syntax
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jan 7, 2010, 20:19 UTC
- Message-ID
- <7vtyux3bx1.fsf@alter.siamese.dyndns.org>
- In-Reply-To
- <20100107200509.6117@nanako3.lavabit.com>
Nanako Shiraishi <nanako3@lavabit.com> writes:
Show 43 quoted lines
> When rewriting commits on a topic branch, sometimes it is easier to
> compare the version of commits before and after the rewrite if they are
> based on the same commit that forked from the upstream. An earlier commit
> by Junio (fixed up by the previous commit) gives "--onto A...B" syntax to
> rebase command, and rebases on top of the merge base between A and B;
> teach the same to the interactive version, too.
>
> Signed-off-by: しらいし ななこ <nanako3@lavabit.com>
> ---
> git-rebase--interactive.sh | 21 ++++++++++++++++++++-
> t/t3415-rebase-onto-threedots.sh | 30 ++++++++++++++++++++++++++++++
> 2 files changed, 50 insertions(+), 1 deletions(-)
>
> diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
> index 23ded48..f7ae02c 100755
> --- a/git-rebase--interactive.sh
> +++ b/git-rebase--interactive.sh
> @@ -482,6 +482,25 @@ get_saved_options () {
> test -f "$DOTEST"/rebase-root && REBASE_ROOT=t
> }
>
> +LF='
> +'
> +parse_onto () {
> + case "$1" in
> + *...*)
> + if left=${1%...*} right=${1#*...} &&
> + onto=$(git merge-base --all ${left:-HEAD} ${right:-HEAD})
> + then
> + case "$onto" in
> + ?*"$LF"?* | '')
> + exit 1 ;;
> + esac
> + echo "$onto"
> + exit 0
> + fi
> + esac
> + git rev-parse --verify "$1^0"
> +}
> +
> while test $# != 0
> do
> case "$1" inI am a bit unhappy about the duplication. The text of this function is different from the one in "rebase" proper, but they implement essentially the same logic. I was tempted to suggest having a common helper function, but as Dscho mentioned "rebase -i" implementation does not share much with "rebase" (even though it shares the external command line interface from the end user's point of view), and I don't see a readily available place (other than in git-sh-setup) to do so.
Ideas?