mirror of
https://github.com/git/git.git
synced 2024-11-15 21:53:44 +01:00
38a47fd6e3
One bad commit is fundamentally needed for bisect to run, and if we beforehand know more good commits, we can narrow the bisect space down without doing the whole tree checkout every time we give good commits. This patch implements: git bisect start [<bad> [<good>...]] [--] [<pathspec>...] as a short-hand for this command sequence: git bisect start git bisect bad $bad git bisect good $good1 $good2... On the other hand, there may be some confusion between revs (<bad> and <good>...) and <pathspec>... if -- is not used and if an invalid rev or a pathspec that looks like a rev is given. Signed-off-by: Christian Couder <chriscool@tuxfamily.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
71 lines
2 KiB
Bash
Executable file
71 lines
2 KiB
Bash
Executable file
#!/bin/sh
|
|
#
|
|
# Copyright (c) 2007 Christian Couder
|
|
#
|
|
test_description='Tests git-bisect run functionality'
|
|
|
|
. ./test-lib.sh
|
|
|
|
add_line_into_file()
|
|
{
|
|
_line=$1
|
|
_file=$2
|
|
|
|
if [ -f "$_file" ]; then
|
|
echo "$_line" >> $_file || return $?
|
|
MSG="Add <$_line> into <$_file>."
|
|
else
|
|
echo "$_line" > $_file || return $?
|
|
git add $_file || return $?
|
|
MSG="Create file <$_file> with <$_line> inside."
|
|
fi
|
|
|
|
git-commit -m "$MSG" $_file
|
|
}
|
|
|
|
HASH1=
|
|
HASH3=
|
|
HASH4=
|
|
|
|
test_expect_success \
|
|
'set up basic repo with 1 file (hello) and 4 commits' \
|
|
'add_line_into_file "1: Hello World" hello &&
|
|
add_line_into_file "2: A new day for git" hello &&
|
|
add_line_into_file "3: Another new day for git" hello &&
|
|
add_line_into_file "4: Ciao for now" hello &&
|
|
HASH1=$(git rev-list HEAD | tail -1) &&
|
|
HASH3=$(git rev-list HEAD | head -2 | tail -1) &&
|
|
HASH4=$(git rev-list HEAD | head -1)'
|
|
|
|
# We want to automatically find the commit that
|
|
# introduced "Another" into hello.
|
|
test_expect_success \
|
|
'"git bisect run" simple case' \
|
|
'echo "#"\!"/bin/sh" > test_script.sh &&
|
|
echo "grep Another hello > /dev/null" >> test_script.sh &&
|
|
echo "test \$? -ne 0" >> test_script.sh &&
|
|
chmod +x test_script.sh &&
|
|
git bisect start &&
|
|
git bisect good $HASH1 &&
|
|
git bisect bad $HASH4 &&
|
|
git bisect run ./test_script.sh > my_bisect_log.txt &&
|
|
grep "$HASH3 is first bad commit" my_bisect_log.txt &&
|
|
git bisect reset'
|
|
|
|
# We want to automatically find the commit that
|
|
# introduced "Ciao" into hello.
|
|
test_expect_success \
|
|
'"git bisect run" with more complex "git bisect start"' \
|
|
'echo "#"\!"/bin/sh" > test_script.sh &&
|
|
echo "grep Ciao hello > /dev/null" >> test_script.sh &&
|
|
echo "test \$? -ne 0" >> test_script.sh &&
|
|
chmod +x test_script.sh &&
|
|
git bisect start $HASH4 $HASH1 &&
|
|
git bisect run ./test_script.sh > my_bisect_log.txt &&
|
|
grep "$HASH4 is first bad commit" my_bisect_log.txt &&
|
|
git bisect reset'
|
|
|
|
#
|
|
#
|
|
test_done
|
|
|