mirror of
https://github.com/git/git.git
synced 2024-11-27 20:14:30 +08:00
Bisect run: "skip" current commit if script exit code is 125.
This is incompatible with previous versions because an exit code of 125 used to mark current commit as "bad". But hopefully this exit code is not much used by test scripts or other programs. (126 and 127 are used by POSIX compliant shells to mean "found but not executable" and "command not found", respectively.) Signed-off-by: Christian Couder <chriscool@tuxfamily.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
37f9fd0dde
commit
71b0251cdd
@ -182,14 +182,18 @@ $ git bisect run my_script
|
||||
------------
|
||||
|
||||
Note that the "run" script (`my_script` in the above example) should
|
||||
exit with code 0 in case the current source code is good and with a
|
||||
code between 1 and 127 (included) in case the current source code is
|
||||
bad.
|
||||
exit with code 0 in case the current source code is good. Exit with a
|
||||
code between 1 and 127 (inclusive), except 125, if the current
|
||||
source code is bad.
|
||||
|
||||
Any other exit code will abort the automatic bisect process. (A
|
||||
program that does "exit(-1)" leaves $? = 255, see exit(3) manual page,
|
||||
the value is chopped with "& 0377".)
|
||||
|
||||
The special exit code 125 should be used when the current source code
|
||||
cannot be tested. If the "run" script exits with this code, the current
|
||||
revision will be skipped, see `git bisect skip` above.
|
||||
|
||||
You may often find that during bisect you want to have near-constant
|
||||
tweaks (e.g., s/#define DEBUG 0/#define DEBUG 1/ in a header file, or
|
||||
"revision that does not have this commit needs this patch applied to
|
||||
|
@ -392,7 +392,10 @@ bisect_run () {
|
||||
fi
|
||||
|
||||
# Find current state depending on run success or failure.
|
||||
if [ $res -gt 0 ]; then
|
||||
# A special exit code of 125 means cannot test.
|
||||
if [ $res -eq 125 ]; then
|
||||
state='skip'
|
||||
elif [ $res -gt 0 ]; then
|
||||
state='bad'
|
||||
else
|
||||
state='good'
|
||||
@ -404,6 +407,12 @@ bisect_run () {
|
||||
|
||||
cat "$GIT_DIR/BISECT_RUN"
|
||||
|
||||
if grep "first bad commit could be any of" "$GIT_DIR/BISECT_RUN" \
|
||||
> /dev/null; then
|
||||
echo >&2 "bisect run cannot continue any more"
|
||||
exit $res
|
||||
fi
|
||||
|
||||
if [ $res -ne 0 ]; then
|
||||
echo >&2 "bisect run failed:"
|
||||
echo >&2 "'bisect_state $state' exited with error code $res"
|
||||
|
@ -177,6 +177,46 @@ test_expect_success 'bisect skip and bisect replay' '
|
||||
git bisect reset
|
||||
'
|
||||
|
||||
HASH6=
|
||||
test_expect_success 'bisect run & skip: cannot tell between 2' '
|
||||
add_line_into_file "6: Yet a line." hello &&
|
||||
HASH6=$(git rev-parse --verify HEAD) &&
|
||||
echo "#"\!"/bin/sh" > test_script.sh &&
|
||||
echo "tail -1 hello | grep Ciao > /dev/null && exit 125" >> test_script.sh &&
|
||||
echo "grep line hello > /dev/null" >> test_script.sh &&
|
||||
echo "test \$? -ne 0" >> test_script.sh &&
|
||||
chmod +x test_script.sh &&
|
||||
git bisect start $HASH6 $HASH1 &&
|
||||
if git bisect run ./test_script.sh > my_bisect_log.txt
|
||||
then
|
||||
echo Oops, should have failed.
|
||||
false
|
||||
else
|
||||
test $? -eq 2 &&
|
||||
grep "first bad commit could be any of" my_bisect_log.txt &&
|
||||
! grep $HASH3 my_bisect_log.txt &&
|
||||
! grep $HASH6 my_bisect_log.txt &&
|
||||
grep $HASH4 my_bisect_log.txt &&
|
||||
grep $HASH5 my_bisect_log.txt
|
||||
fi
|
||||
'
|
||||
|
||||
HASH7=
|
||||
test_expect_success 'bisect run & skip: find first bad' '
|
||||
git bisect reset &&
|
||||
add_line_into_file "7: Should be the last line." hello &&
|
||||
HASH7=$(git rev-parse --verify HEAD) &&
|
||||
echo "#"\!"/bin/sh" > test_script.sh &&
|
||||
echo "tail -1 hello | grep Ciao > /dev/null && exit 125" >> test_script.sh &&
|
||||
echo "tail -1 hello | grep day > /dev/null && exit 125" >> test_script.sh &&
|
||||
echo "grep Yet hello > /dev/null" >> test_script.sh &&
|
||||
echo "test \$? -ne 0" >> test_script.sh &&
|
||||
chmod +x test_script.sh &&
|
||||
git bisect start $HASH7 $HASH1 &&
|
||||
git bisect run ./test_script.sh > my_bisect_log.txt &&
|
||||
grep "$HASH6 is first bad commit" my_bisect_log.txt
|
||||
'
|
||||
|
||||
#
|
||||
#
|
||||
test_done
|
||||
|
Loading…
Reference in New Issue
Block a user