提交 109440c1 编写于 作者: J Junio C Hamano

Merge branch 'gp/bisect-fix' into maint

* gp/bisect-fix:
  bisect: print an error message when "git rev-list --bisect-vars" fails
  git-bisect.sh: don't accidentally override existing branch "bisect"
...@@ -78,7 +78,7 @@ Oh, and then after you want to reset to the original head, do a ...@@ -78,7 +78,7 @@ Oh, and then after you want to reset to the original head, do a
$ git bisect reset $ git bisect reset
------------------------------------------------ ------------------------------------------------
to get back to the master branch, instead of being in one of the to get back to the original branch, instead of being in one of the
bisection branches ("git bisect start" will do that for you too, bisection branches ("git bisect start" will do that for you too,
actually: it will reset the bisection state, and before it does that actually: it will reset the bisection state, and before it does that
it checks that you're not using some old bisection branch). it checks that you're not using some old bisection branch).
......
...@@ -65,14 +65,19 @@ bisect_start() { ...@@ -65,14 +65,19 @@ bisect_start() {
head=$(GIT_DIR="$GIT_DIR" git symbolic-ref -q HEAD) || head=$(GIT_DIR="$GIT_DIR" git symbolic-ref -q HEAD) ||
head=$(GIT_DIR="$GIT_DIR" git rev-parse --verify HEAD) || head=$(GIT_DIR="$GIT_DIR" git rev-parse --verify HEAD) ||
die "Bad HEAD - I need a HEAD" die "Bad HEAD - I need a HEAD"
#
# Check that we either already have BISECT_START, or that the
# branches bisect, new-bisect don't exist, to not override them.
#
test -s "$GIT_DIR/BISECT_START" ||
if git show-ref --verify -q refs/heads/bisect ||
git show-ref --verify -q refs/heads/new-bisect; then
die 'The branches "bisect" and "new-bisect" must not exist.'
fi
start_head='' start_head=''
case "$head" in case "$head" in
refs/heads/bisect) refs/heads/bisect)
if [ -s "$GIT_DIR/BISECT_START" ]; then branch=`cat "$GIT_DIR/BISECT_START"`
branch=`cat "$GIT_DIR/BISECT_START"`
else
branch=master
fi
git checkout $branch || exit git checkout $branch || exit
;; ;;
refs/heads/*|$_x40) refs/heads/*|$_x40)
...@@ -215,18 +220,33 @@ bisect_auto_next() { ...@@ -215,18 +220,33 @@ bisect_auto_next() {
bisect_next_check && bisect_next || : bisect_next_check && bisect_next || :
} }
eval_rev_list() {
_eval="$1"
eval $_eval
res=$?
if [ $res -ne 0 ]; then
echo >&2 "'git rev-list --bisect-vars' failed:"
echo >&2 "maybe you mistake good and bad revs?"
exit $res
fi
return $res
}
filter_skipped() { filter_skipped() {
_eval="$1" _eval="$1"
_skip="$2" _skip="$2"
if [ -z "$_skip" ]; then if [ -z "$_skip" ]; then
eval $_eval eval_rev_list "$_eval"
return return
fi fi
# Let's parse the output of: # Let's parse the output of:
# "git rev-list --bisect-vars --bisect-all ..." # "git rev-list --bisect-vars --bisect-all ..."
eval $_eval | while read hash line eval_rev_list "$_eval" | while read hash line
do do
case "$VARS,$FOUND,$TRIED,$hash" in case "$VARS,$FOUND,$TRIED,$hash" in
# We display some vars. # We display some vars.
...@@ -324,8 +344,8 @@ bisect_next() { ...@@ -324,8 +344,8 @@ bisect_next() {
exit_if_skipped_commits "$bisect_rev" exit_if_skipped_commits "$bisect_rev"
echo "Bisecting: $bisect_nr revisions left to test after this" echo "Bisecting: $bisect_nr revisions left to test after this"
git branch -f new-bisect "$bisect_rev" git branch -D new-bisect 2> /dev/null
git checkout -q new-bisect || exit git checkout -q -b new-bisect "$bisect_rev" || exit
git branch -M new-bisect bisect git branch -M new-bisect bisect
git show-branch "$bisect_rev" git show-branch "$bisect_rev"
} }
......
...@@ -284,6 +284,31 @@ test_expect_success 'bisect starting with a detached HEAD' ' ...@@ -284,6 +284,31 @@ test_expect_success 'bisect starting with a detached HEAD' '
' '
test_expect_success 'bisect refuses to start if branch bisect exists' '
git bisect reset &&
git branch bisect &&
test_must_fail git bisect start &&
git branch -d bisect &&
git checkout -b bisect &&
test_must_fail git bisect start &&
git checkout master &&
git branch -d bisect
'
test_expect_success 'bisect refuses to start if branch new-bisect exists' '
git bisect reset &&
git branch new-bisect &&
test_must_fail git bisect start &&
git branch -d new-bisect
'
test_expect_success 'bisect errors out if bad and good are mistaken' '
git bisect reset &&
test_must_fail git bisect start $HASH2 $HASH4 2> rev_list_error &&
grep "mistake good and bad" rev_list_error &&
git bisect reset
'
# #
# #
test_done test_done
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册