Code

gitignore: git-pack-refs is a generated file.
[git.git] / git-rebase.sh
index 2a4c8c8a897e1d7f8220601892fd92514e09c65a..20f74d416732e681d3b44ea610e428529af49235 100755 (executable)
@@ -35,7 +35,13 @@ If you would prefer to skip this patch, instead run \"git rebase --skip\".
 To restore the original branch and stop rebasing run \"git rebase --abort\".
 "
 unset newbase
 To restore the original branch and stop rebasing run \"git rebase --abort\".
 "
 unset newbase
-strategy=recur
+case "${GIT_USE_RECUR_FOR_RECURSIVE}" in
+'')
+       strategy=recursive ;;
+?*)
+       strategy=recur ;;
+esac
+
 do_merge=
 dotest=$GIT_DIR/.dotest-merge
 prec=4
 do_merge=
 dotest=$GIT_DIR/.dotest-merge
 prec=4
@@ -131,7 +137,8 @@ do
                        finish_rb_merge
                        exit
                fi
                        finish_rb_merge
                        exit
                fi
-               git am --resolved --3way --resolvemsg="$RESOLVEMSG"
+               git am --resolved --3way --resolvemsg="$RESOLVEMSG" \
+                       --reflog-action=rebase
                exit
                ;;
        --skip)
                exit
                ;;
        --skip)
@@ -150,7 +157,8 @@ do
                        finish_rb_merge
                        exit
                fi
                        finish_rb_merge
                        exit
                fi
-               git am -3 --skip --resolvemsg="$RESOLVEMSG"
+               git am -3 --skip --resolvemsg="$RESOLVEMSG" \
+                       --reflog-action=rebase
                exit
                ;;
        --abort)
                exit
                ;;
        --abort)
@@ -198,6 +206,11 @@ do
        shift
 done
 
        shift
 done
 
+case "$strategy,${GIT_USE_RECUR_FOR_RECURSIVE}" in
+recursive,?*)
+       strategy=recur ;;
+esac
+
 # Make sure we do not have .dotest
 if test -z "$do_merge"
 then
 # Make sure we do not have .dotest
 if test -z "$do_merge"
 then
@@ -264,14 +277,11 @@ onto=$(git-rev-parse --verify "${onto_name}^0") || exit
 
 # Check if we are already based on $onto, but this should be
 # done only when upstream and onto are the same.
 
 # Check if we are already based on $onto, but this should be
 # done only when upstream and onto are the same.
-if test "$upstream" = "$onto"
+mb=$(git-merge-base "$onto" "$branch")
+if test "$upstream" = "$onto" && test "$mb" = "$onto"
 then
 then
-       mb=$(git-merge-base "$onto" "$branch")
-       if test "$mb" = "$onto"
-       then
-               echo >&2 "Current branch $branch_name is up to date."
-               exit 0
-       fi
+       echo >&2 "Current branch $branch_name is up to date."
+       exit 0
 fi
 
 # Rewind the head to "$onto"; this saves our current head in ORIG_HEAD.
 fi
 
 # Rewind the head to "$onto"; this saves our current head in ORIG_HEAD.
@@ -279,20 +289,21 @@ git-reset --hard "$onto"
 
 # If the $onto is a proper descendant of the tip of the branch, then
 # we just fast forwarded.
 
 # If the $onto is a proper descendant of the tip of the branch, then
 # we just fast forwarded.
-if test "$mb" = "$onto"
+if test "$mb" = "$branch"
 then
 then
-       echo >&2 "Fast-forwarded $branch to $newbase."
+       echo >&2 "Fast-forwarded $branch_name to $onto_name."
        exit 0
 fi
 
 if test -z "$do_merge"
 then
        git-format-patch -k --stdout --full-index "$upstream"..ORIG_HEAD |
        exit 0
 fi
 
 if test -z "$do_merge"
 then
        git-format-patch -k --stdout --full-index "$upstream"..ORIG_HEAD |
-       git am --binary -3 -k --resolvemsg="$RESOLVEMSG"
+       git am --binary -3 -k --resolvemsg="$RESOLVEMSG" \
+               --reflog-action=rebase
        exit $?
 fi
 
        exit $?
 fi
 
-if test "@@NO_PYTHON@@" && test "$strategy" = "recur"
+if test "@@NO_PYTHON@@" && test "$strategy" = "recursive"
 then
        die 'The recursive merge strategy currently relies on Python,
 which this installation of git was not configured with.  Please consider
 then
        die 'The recursive merge strategy currently relies on Python,
 which this installation of git was not configured with.  Please consider