Skip to content

Commit

Permalink
bisect: add support for bisecting bare repositories
Browse files Browse the repository at this point in the history
This enhances the support for bisecting history in bare repositories.

The "git bisect" command no longer needs to be run inside a repository
with a working tree; it defaults to --no-checkout when run in a bare
repository.

Two tests are included to demonstrate this behaviour.

Suggested-by: Junio C Hamano <gitster@pobox.com>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Jon Seymour <jon.seymour@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Jon Seymour authored and Junio C Hamano committed Aug 9, 2011
1 parent 43b8ff4 commit 24c5128
Showing 4 changed files with 40 additions and 3 deletions.
2 changes: 2 additions & 0 deletions Documentation/git-bisect.txt
Original file line number Diff line number Diff line change
@@ -273,6 +273,8 @@ it point to the commit that should be tested.
+
This option may be useful when the test you would perform in each step
does not require a checked out tree.
+
If the repository is bare, `--no-checkout` is assumed.

EXAMPLES
--------
8 changes: 6 additions & 2 deletions git-bisect.sh
Original file line number Diff line number Diff line change
@@ -29,7 +29,6 @@ Please use "git help bisect" to get the full man page.'
OPTIONS_SPEC=
. git-sh-setup
. git-sh-i18n
require_work_tree

_x40='[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]'
_x40="$_x40$_x40$_x40$_x40$_x40$_x40$_x40$_x40"
@@ -79,7 +78,12 @@ bisect_start() {
orig_args=$(git rev-parse --sq-quote "$@")
bad_seen=0
eval=''
mode=''
if test "z$(git rev-parse --is-bare-repository)" != zfalse
then
mode=--no-checkout
else
mode=''
fi
while [ $# -gt 0 ]; do
arg="$1"
case "$arg" in
2 changes: 1 addition & 1 deletion git.c
Original file line number Diff line number Diff line change
@@ -320,7 +320,7 @@ static void handle_internal_command(int argc, const char **argv)
{ "annotate", cmd_annotate, RUN_SETUP },
{ "apply", cmd_apply, RUN_SETUP_GENTLY },
{ "archive", cmd_archive },
{ "bisect--helper", cmd_bisect__helper, RUN_SETUP | NEED_WORK_TREE },
{ "bisect--helper", cmd_bisect__helper, RUN_SETUP },
{ "blame", cmd_blame, RUN_SETUP },
{ "branch", cmd_branch, RUN_SETUP },
{ "bundle", cmd_bundle, RUN_SETUP_GENTLY },
31 changes: 31 additions & 0 deletions t/t6030-bisect-porcelain.sh
Original file line number Diff line number Diff line change
@@ -592,6 +592,37 @@ test_expect_success 'erroring out when using bad path parameters' '
grep "bad path parameters" error.txt
'

test_expect_success 'test bisection on bare repo - --no-checkout specified' '
git clone --bare . bare.nocheckout &&
(
cd bare.nocheckout &&
git bisect start --no-checkout &&
git bisect good $HASH1 &&
git bisect bad $HASH4 &&
git bisect run eval \
"test \$(git rev-list BISECT_HEAD ^$HASH2 --max-count=1 | wc -l) = 0" \
>../nocheckout.log &&
git bisect reset
) &&
grep "$HASH3 is the first bad commit" nocheckout.log
'


test_expect_success 'test bisection on bare repo - --no-checkout defaulted' '
git clone --bare . bare.defaulted &&
(
cd bare.defaulted &&
git bisect start &&
git bisect good $HASH1 &&
git bisect bad $HASH4 &&
git bisect run eval \
"test \$(git rev-list BISECT_HEAD ^$HASH2 --max-count=1 | wc -l) = 0" \
>../defaulted.log &&
git bisect reset
) &&
grep "$HASH3 is the first bad commit" defaulted.log
'

#
# This creates a broken branch which cannot be checked out because
# the tree created has been deleted.

0 comments on commit 24c5128

Please sign in to comment.