Merge branch 'ns/rebase-noverify'

* ns/rebase-noverify:
  rebase: Document --no-verify option to bypass pre-rebase hook
  rebase --no-verify
maint
Junio C Hamano 2008-10-19 16:05:58 -07:00
commit ce6e5ff435
4 changed files with 35 additions and 3 deletions

View File

@ -9,7 +9,7 @@ SYNOPSIS
-------- --------
[verse] [verse]
'git rebase' [-i | --interactive] [-v | --verbose] [-m | --merge] 'git rebase' [-i | --interactive] [-v | --verbose] [-m | --merge]
[-s <strategy> | --strategy=<strategy>] [-s <strategy> | --strategy=<strategy>] [--no-verify]
[-C<n>] [ --whitespace=<option>] [-p | --preserve-merges] [-C<n>] [ --whitespace=<option>] [-p | --preserve-merges]
[--onto <newbase>] <upstream> [<branch>] [--onto <newbase>] <upstream> [<branch>]
'git rebase' --continue | --skip | --abort 'git rebase' --continue | --skip | --abort
@ -232,6 +232,9 @@ OPTIONS
--verbose:: --verbose::
Display a diffstat of what changed upstream since the last rebase. Display a diffstat of what changed upstream since the last rebase.


--no-verify::
This option bypasses the pre-rebase hook. See also linkgit:githooks[5].

-C<n>:: -C<n>::
Ensure at least <n> lines of surrounding context match before Ensure at least <n> lines of surrounding context match before
and after each change. When fewer lines of surrounding and after each change. When fewer lines of surrounding

View File

@ -26,6 +26,7 @@ i,interactive always used (no-op)
continue continue rebasing process continue continue rebasing process
abort abort rebasing process and restore original branch abort abort rebasing process and restore original branch
skip skip current patch and continue rebasing process skip skip current patch and continue rebasing process
no-verify override pre-rebase hook from stopping the operation
" "


. git-sh-setup . git-sh-setup
@ -41,6 +42,7 @@ PRESERVE_MERGES=
STRATEGY= STRATEGY=
ONTO= ONTO=
VERBOSE= VERBOSE=
OK_TO_SKIP_PRE_REBASE=


GIT_CHERRY_PICK_HELP=" After resolving the conflicts, GIT_CHERRY_PICK_HELP=" After resolving the conflicts,
mark the corrected paths with 'git add <paths>', and mark the corrected paths with 'git add <paths>', and
@ -66,7 +68,8 @@ output () {
} }


run_pre_rebase_hook () { 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 then
"$GIT_DIR/hooks/pre-rebase" ${1+"$@"} || { "$GIT_DIR/hooks/pre-rebase" ${1+"$@"} || {
echo >&2 "The pre-rebase hook refused to rebase." echo >&2 "The pre-rebase hook refused to rebase."
@ -421,6 +424,11 @@ get_saved_options () {
while test $# != 0 while test $# != 0
do do
case "$1" in case "$1" in
--no-verify)
OK_TO_SKIP_PRE_REBASE=yes
;;
--verify)
;;
--continue) --continue)
is_standalone "$@" || usage is_standalone "$@" || usage
get_saved_options get_saved_options

View File

@ -34,6 +34,7 @@ set_reflog_action rebase
require_work_tree require_work_tree
cd_to_toplevel cd_to_toplevel


OK_TO_SKIP_PRE_REBASE=
RESOLVEMSG=" RESOLVEMSG="
When you have resolved this problem run \"git rebase --continue\". When you have resolved this problem run \"git rebase --continue\".
If you would prefer to skip this patch, instead run \"git rebase --skip\". If you would prefer to skip this patch, instead run \"git rebase --skip\".
@ -145,7 +146,8 @@ is_interactive () {
} }


run_pre_rebase_hook () { 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 then
"$GIT_DIR/hooks/pre-rebase" ${1+"$@"} || { "$GIT_DIR/hooks/pre-rebase" ${1+"$@"} || {
echo >&2 "The pre-rebase hook refused to rebase." echo >&2 "The pre-rebase hook refused to rebase."
@ -170,6 +172,9 @@ fi
while test $# != 0 while test $# != 0
do do
case "$1" in case "$1" in
--no-verify)
OK_TO_SKIP_PRE_REBASE=yes
;;
--continue) --continue)
test -d "$dotest" -o -d "$GIT_DIR"/rebase-apply || test -d "$dotest" -o -d "$GIT_DIR"/rebase-apply ||
die "No rebase in progress?" die "No rebase in progress?"

View File

@ -123,4 +123,20 @@ test_expect_success 'pre-rebase hook stops rebase (2)' '
test 0 = $(git rev-list HEAD...side | wc -l) test 0 = $(git rev-list HEAD...side | wc -l)
' '


test_expect_success 'rebase --no-verify overrides pre-rebase (1)' '
git checkout test &&
git reset --hard side &&
git rebase --no-verify master &&
test "z$(git symbolic-ref HEAD)" = zrefs/heads/test &&
test "z$(cat git)" = zworld
'

test_expect_success 'rebase --no-verify overrides pre-rebase (2)' '
git checkout test &&
git reset --hard side &&
EDITOR=true git rebase --no-verify -i master &&
test "z$(git symbolic-ref HEAD)" = zrefs/heads/test &&
test "z$(cat git)" = zworld
'

test_done test_done