X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=git-rebase.sh;h=1583402a060793c25e49c3446c2a35fe27101883;hb=2af89f12c666634e92cd79a6c1af6acc34104c34;hp=388752661fd5439633f9d2c140d058a8772382ee;hpb=b941ffac506d3f57246e46a8913da614e62a1d48;p=git.git diff --git a/git-rebase.sh b/git-rebase.sh index 388752661..1583402a0 100755 --- a/git-rebase.sh +++ b/git-rebase.sh @@ -51,7 +51,7 @@ continue_merge () { test -n "$prev_head" || die "prev_head must be defined" test -d "$dotest" || die "$dotest directory does not exist" - unmerged=$(git-ls-files -u) + unmerged=$(git ls-files -u) if test -n "$unmerged" then echo "You still have unmerged paths in your index" @@ -59,22 +59,22 @@ continue_merge () { die "$RESOLVEMSG" fi - if ! git-diff-index --quiet HEAD + cmt=`cat $dotest/current` + if ! git diff-index --quiet HEAD then - if ! git-commit -C "`cat $dotest/current`" + if ! git-commit -C "$cmt" then echo "Commit failed, please do not call \"git commit\"" echo "directly, but instead do one of the following: " die "$RESOLVEMSG" fi - printf "Committed: %0${prec}d" $msgnum + printf "Committed: %0${prec}d " $msgnum else - printf "Already applied: %0${prec}d" $msgnum + printf "Already applied: %0${prec}d " $msgnum fi - echo ' '`git-rev-list --pretty=oneline -1 HEAD | \ - sed 's/^[a-f0-9]\+ //'` + git rev-list --pretty=oneline -1 "$cmt" | sed -e 's/^[^ ]* //' - prev_head=`git-rev-parse HEAD^0` + prev_head=`git rev-parse HEAD^0` # save the resulting commit so we can read-tree on it later echo "$prev_head" > "$dotest/prev_head" @@ -86,8 +86,8 @@ continue_merge () { call_merge () { cmt="$(cat $dotest/cmt.$1)" echo "$cmt" > "$dotest/current" - hd=$(git-rev-parse --verify HEAD) - cmt_name=$(git-symbolic-ref HEAD) + hd=$(git rev-parse --verify HEAD) + cmt_name=$(git symbolic-ref HEAD) msgnum=$(cat $dotest/msgnum) end=$(cat $dotest/end) eval GITHEAD_$cmt='"${cmt_name##refs/heads/}~$(($end - $msgnum))"' @@ -101,7 +101,7 @@ call_merge () { return ;; 1) - test -d "$GIT_DIR/rr-cache" && git-rerere + git rerere die "$RESOLVEMSG" ;; 2) @@ -122,19 +122,18 @@ finish_rb_merge () { is_interactive () { test -f "$dotest"/interactive || - while case $#,"$1" in 0,|*,-i|*,--interactive) break ;; esac - do + while :; do case $#,"$1" in 0,|*,-i|*,--interactive) break ;; esac shift done && test -n "$1" } is_interactive "$@" && exec git-rebase--interactive "$@" -while case "$#" in 0) break ;; esac +while test $# != 0 do case "$1" in --continue) - git-diff-files --quiet || { + git diff-files --quiet || { echo "You must edit all merge conflicts and then" echo "mark them as resolved using git add" exit 1 @@ -160,10 +159,7 @@ do --skip) if test -d "$dotest" then - if test -d "$GIT_DIR/rr-cache" - then - git-rerere clear - fi + git rerere clear prev_head="`cat $dotest/prev_head`" end="`cat $dotest/end`" msgnum="`cat $dotest/msgnum`" @@ -181,10 +177,7 @@ do exit ;; --abort) - if test -d "$GIT_DIR/rr-cache" - then - git-rerere clear - fi + git rerere clear if test -d "$dotest" then rm -r "$dotest" @@ -222,9 +215,11 @@ do -v|--verbose) verbose=t ;; + --whitespace=*) + git_am_opt="$git_am_opt $1" + ;; -C*) - git_am_opt=$1 - shift + git_am_opt="$git_am_opt $1" ;; -*) usage @@ -259,8 +254,8 @@ else fi # The tree must be really really clean. -git-update-index --refresh || exit -diff=$(git-diff-index --cached --name-status -r HEAD) +git update-index --refresh || exit +diff=$(git diff-index --cached --name-status -r HEAD) case "$diff" in ?*) echo "cannot rebase: your index is not up-to-date" echo "$diff" @@ -275,7 +270,7 @@ upstream=`git rev-parse --verify "${upstream_name}^0"` || # Make sure the branch to rebase onto is valid. onto_name=${newbase-"$upstream_name"} -onto=$(git-rev-parse --verify "${onto_name}^0") || exit +onto=$(git rev-parse --verify "${onto_name}^0") || exit # If a hook exists, give it a chance to interrupt if test -x "$GIT_DIR/hooks/pre-rebase" @@ -301,14 +296,16 @@ case "$#" in fi ;; esac -branch=$(git-rev-parse --verify "${branch_name}^0") || exit +branch=$(git rev-parse --verify "${branch_name}^0") || exit # Now we are rebasing commits $upstream..$branch on top of $onto -# Check if we are already based on $onto, but this should be -# done only when upstream and onto are the same. -mb=$(git-merge-base "$onto" "$branch") -if test "$upstream" = "$onto" && test "$mb" = "$onto" +# Check if we are already based on $onto with linear history, +# but this should be done only when upstream and onto are the same. +mb=$(git merge-base "$onto" "$branch") +if test "$upstream" = "$onto" && test "$mb" = "$onto" && + # linear history? + ! git rev-list --parents "$onto".."$branch" | grep " .* " > /dev/null then echo >&2 "Current branch $branch_name is up to date." exit 0 @@ -318,7 +315,7 @@ if test -n "$verbose" then echo "Changes from $mb to $onto:" # We want color (if set), but no pager - GIT_PAGER='' git-diff --stat --summary "$mb" "$onto" + GIT_PAGER='' git diff --stat --summary "$mb" "$onto" fi # Rewind the head to "$onto"; this saves our current head in ORIG_HEAD. @@ -335,7 +332,7 @@ fi if test -z "$do_merge" then - git-format-patch -k --stdout --full-index --ignore-if-in-upstream "$upstream"..ORIG_HEAD | + git format-patch -k --stdout --full-index --ignore-if-in-upstream "$upstream"..ORIG_HEAD | git am $git_am_opt --binary -3 -k --resolvemsg="$RESOLVEMSG" exit $? fi @@ -346,11 +343,11 @@ fi mkdir -p "$dotest" echo "$onto" > "$dotest/onto" echo "$onto_name" > "$dotest/onto_name" -prev_head=`git-rev-parse HEAD^0` +prev_head=`git rev-parse HEAD^0` echo "$prev_head" > "$dotest/prev_head" msgnum=0 -for cmt in `git-rev-list --reverse --no-merges "$upstream"..ORIG_HEAD` +for cmt in `git rev-list --reverse --no-merges "$upstream"..ORIG_HEAD` do msgnum=$(($msgnum + 1)) echo "$cmt" > "$dotest/cmt.$msgnum"