git-am: propagate -C<n>, -p<n> options as well
[gitweb.git] / git-rebase--interactive.sh
index 848fbe7d5913a009c75da2486b7cea3563617b10..1172e47571dfe1d6dd088381d63045fd5eae3db3 100755 (executable)
@@ -26,6 +26,7 @@ i,interactive      always used (no-op)
 continue           continue rebasing process
 abort              abort rebasing process and restore original branch
 skip               skip current patch and continue rebasing process
+no-verify          override pre-rebase hook from stopping the operation
 "
 
 . git-sh-setup
@@ -42,6 +43,7 @@ PRESERVE_MERGES=
 STRATEGY=
 ONTO=
 VERBOSE=
+OK_TO_SKIP_PRE_REBASE=
 
 GIT_CHERRY_PICK_HELP="  After resolving the conflicts,
 mark the corrected paths with 'git add <paths>', and
@@ -67,7 +69,8 @@ output () {
 }
 
 run_pre_rebase_hook () {
-       if test -x "$GIT_DIR/hooks/pre-rebase"
+       if test -z "$OK_TO_SKIP_PRE_REBASE" &&
+          test -x "$GIT_DIR/hooks/pre-rebase"
        then
                "$GIT_DIR/hooks/pre-rebase" ${1+"$@"} || {
                        echo >&2 "The pre-rebase hook refused to rebase."
@@ -170,7 +173,7 @@ pick_one_preserving_merges () {
 
        if test -f "$DOTEST"/current-commit
        then
-               if [ "$fast_forward" == "t" ]
+               if test "$fast_forward" = t
                then
                        cat "$DOTEST"/current-commit | while read current_commit
                        do
@@ -437,6 +440,11 @@ get_saved_options () {
 while test $# != 0
 do
        case "$1" in
+       --no-verify)
+               OK_TO_SKIP_PRE_REBASE=yes
+               ;;
+       --verify)
+               ;;
        --continue)
                is_standalone "$@" || usage
                get_saved_options
@@ -635,8 +643,8 @@ first and then run 'git rebase --continue' again."
                                sed -n "s/^>//p" > "$DOTEST"/not-cherry-picks
                        # Now all commits and note which ones are missing in
                        # not-cherry-picks and hence being dropped
-                       git rev-list $UPSTREAM...$HEAD --left-right | \
-                               sed -n "s/^>//p" | while read rev
+                       git rev-list $UPSTREAM..$HEAD |
+                       while read rev
                        do
                                if test -f "$REWRITTEN"/$rev -a "$(grep "$rev" "$DOTEST"/not-cherry-picks)" = ""
                                then
@@ -645,7 +653,8 @@ first and then run 'git rebase --continue' again."
                                        # just the history of its first-parent for others that will
                                        # be rebasing on top of it
                                        git rev-list --parents -1 $rev | cut -d' ' -f2 > "$DROPPED"/$rev
-                                       cat "$TODO" | grep -v "${rev:0:7}" > "${TODO}2" ; mv "${TODO}2" "$TODO"
+                                       short=$(git rev-list -1 --abbrev-commit --abbrev=7 $rev)
+                                       grep -v "^[a-z][a-z]* $short" <"$TODO" > "${TODO}2" ; mv "${TODO}2" "$TODO"
                                        rm "$REWRITTEN"/$rev
                                fi
                        done