"Sverre Hvammen Johansen" <hvammen@xxxxxxxxx> writes: > for preparation of new feature: Full sentence, please? > > Head reduction before selecting merge strategy > > Signed-off-by: Sverre Hvammen Johansen <hvammen@xxxxxxxxx> > --- > 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? > + 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 ;-). > - # 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. > +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? -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html