Re: [RFC/PATCH 2/4] Restructuring git-merge.sh
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Mar 26, 2008, 16:17 UTC
- Message-ID
- <7vr6dxe9xx.fsf@gitster.siamese.dyndns.org>
- In-Reply-To
- <402c10cd0803252056n122cae6cv1a6f4e46a5fb5096@mail.gmail.com>
"Sverre Hvammen Johansen" <hvammen@gmail.com> writes:
> for preparation of new feature:
Full sentence, please?
Show 21 quoted lines
>
> Head reduction before selecting merge strategy
>
> Signed-off-by: Sverre Hvammen Johansen <hvammen@gmail.com>
> ---
> git-merge.sh | 166 ++++++++++++++++++++++++++++++----------------------------
> 1 files changed, 85 insertions(+), 81 deletions(-)
>
> diff --git a/git-merge.sh b/git-merge.sh
> index 17f40f2..2acd2cc 100755
> --- a/git-merge.sh
> +++ b/git-merge.sh
> @@ -207,6 +207,29 @@ parse_config () {
> args_left=$#
> }
>
> +# Find real parents
> +# Set the following variables as followd:
> +# real_parents: The parents specified on the command line
> +# common: All common ancestors or not_queried
> +# ff_head: Fast forward of head"Fast forward of head"? Puzzled, and sorry I cannot offer a better rewrite for this one as I do not quite get what you are trying to say here.
> +find_real_parents () {
> + real_parents=$(git rev-parse "$@")
> + real_parents=${real_parents#$LF}What is this "#$LF" for? rev-parse begins its output with an empty line and you want to strip it?
Show 9 quoted lines
> + if test $# = 1 > + then > + common=$(git merge-base --all $head "$@") > + if test "$common" = $head > + then > + ff_head=$1 > + else > + ff_head=$head > + fi
So for a single-remote merge, merge-base is run and common is set.
> @@ -339,87 +364,66 @@ do > +if true > +then
This caught my attention before looking at 3/4 ;-).
Show 16 quoted lines
> - # An octopus. If we can reach all the remote we are up to date. > - up_to_date=t > - for remote > - do > - common_one=$(git merge-base --all $head $remote) > - if test "$common_one" != "$remote" > then > - up_to_date=f > - break > fi > - done > - if test "$up_to_date" = t > - then > - finish_up_to_date "Already up-to-date. Yeeah!" > exit 0 > fi
This optimization seems to have been lost, even though it was supposed to be just code restructuring.
Show 11 quoted lines
> +fi > + > +case "$real_parents" in > +?*"$LF"?*) > + # We have more than one parent > + common=$(git show-branch --merge-base $head $real_parents) > ;; > +*) > + # We have exactly one parent > + test "$common" != not_queried || common=$(git merge-base --all > $head $real_parents)
How can "not_queried" be possible here?