Re: [RFC/PATCH 2/4] Restructuring git-merge.sh
From: Junio C Hamano <hidden>
Date: 2016-06-15 22:44:26
"Sverre Hvammen Johansen" [off-list ref] writes:
for preparation of new feature:
Full sentence, please?
quoted hunk ↗ jump to hunk
Head reduction before selecting merge strategy Signed-off-by: Sverre Hvammen Johansen <redacted> --- 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.
quoted hunk ↗ jump to hunk
@@ -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
fiThis 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?