Merge branch 'mg/doc-bisect-tweak-worktree'
* mg/doc-bisect-tweak-worktree: git-bisect.txt: example for bisecting with hot-fix git-bisect.txt: streamline run presentation
This commit is contained in:
commit
b350f7797c
@ -279,53 +279,68 @@ $ git bisect start HEAD origin -- # HEAD is bad, origin is good
|
|||||||
$ git bisect run make test # "make test" builds and tests
|
$ git bisect run make test # "make test" builds and tests
|
||||||
------------
|
------------
|
||||||
|
|
||||||
* Automatically bisect a broken test suite:
|
|
||||||
+
|
|
||||||
------------
|
|
||||||
$ cat ~/test.sh
|
|
||||||
#!/bin/sh
|
|
||||||
make || exit 125 # this skips broken builds
|
|
||||||
make test # "make test" runs the test suite
|
|
||||||
$ git bisect start v1.3 v1.1 -- # v1.3 is bad, v1.1 is good
|
|
||||||
$ git bisect run ~/test.sh
|
|
||||||
------------
|
|
||||||
+
|
|
||||||
Here we use a "test.sh" custom script. In this script, if "make"
|
|
||||||
fails, we skip the current commit.
|
|
||||||
+
|
|
||||||
It is safer to use a custom script outside the repository to prevent
|
|
||||||
interactions between the bisect, make and test processes and the
|
|
||||||
script.
|
|
||||||
+
|
|
||||||
"make test" should "exit 0", if the test suite passes, and
|
|
||||||
"exit 1" otherwise.
|
|
||||||
|
|
||||||
* Automatically bisect a broken test case:
|
* Automatically bisect a broken test case:
|
||||||
+
|
+
|
||||||
------------
|
------------
|
||||||
$ cat ~/test.sh
|
$ cat ~/test.sh
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
make || exit 125 # this skips broken builds
|
make || exit 125 # this skips broken builds
|
||||||
~/check_test_case.sh # does the test case passes ?
|
~/check_test_case.sh # does the test case pass?
|
||||||
$ git bisect start HEAD HEAD~10 -- # culprit is among the last 10
|
$ git bisect start HEAD HEAD~10 -- # culprit is among the last 10
|
||||||
$ git bisect run ~/test.sh
|
$ git bisect run ~/test.sh
|
||||||
------------
|
------------
|
||||||
+
|
+
|
||||||
Here "check_test_case.sh" should "exit 0" if the test case passes,
|
Here we use a "test.sh" custom script. In this script, if "make"
|
||||||
|
fails, we skip the current commit.
|
||||||
|
"check_test_case.sh" should "exit 0" if the test case passes,
|
||||||
and "exit 1" otherwise.
|
and "exit 1" otherwise.
|
||||||
+
|
+
|
||||||
It is safer if both "test.sh" and "check_test_case.sh" scripts are
|
It is safer if both "test.sh" and "check_test_case.sh" are
|
||||||
outside the repository to prevent interactions between the bisect,
|
outside the repository to prevent interactions between the bisect,
|
||||||
make and test processes and the scripts.
|
make and test processes and the scripts.
|
||||||
|
|
||||||
* Automatically bisect a broken test suite:
|
* Automatically bisect with temporary modifications (hot-fix):
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ cat ~/test.sh
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# tweak the working tree by merging the hot-fix branch
|
||||||
|
# and then attempt a build
|
||||||
|
if git merge --no-commit hot-fix &&
|
||||||
|
make
|
||||||
|
then
|
||||||
|
# run project specific test and report its status
|
||||||
|
~/check_test_case.sh
|
||||||
|
status=$?
|
||||||
|
else
|
||||||
|
# tell the caller this is untestable
|
||||||
|
status=125
|
||||||
|
fi
|
||||||
|
|
||||||
|
# undo the tweak to allow clean flipping to the next commit
|
||||||
|
git reset --hard
|
||||||
|
|
||||||
|
# return control
|
||||||
|
exit $status
|
||||||
|
------------
|
||||||
|
+
|
||||||
|
This applies modifications from a hot-fix branch before each test run,
|
||||||
|
e.g. in case your build or test environment changed so that older
|
||||||
|
revisions may need a fix which newer ones have already. (Make sure the
|
||||||
|
hot-fix branch is based off a commit which is contained in all revisions
|
||||||
|
which you are bisecting, so that the merge does not pull in too much, or
|
||||||
|
use `git cherry-pick` instead of `git merge`.)
|
||||||
|
|
||||||
|
* Automatically bisect a broken test case:
|
||||||
+
|
+
|
||||||
------------
|
------------
|
||||||
$ git bisect start HEAD HEAD~10 -- # culprit is among the last 10
|
$ git bisect start HEAD HEAD~10 -- # culprit is among the last 10
|
||||||
$ git bisect run sh -c "make || exit 125; ~/check_test_case.sh"
|
$ git bisect run sh -c "make || exit 125; ~/check_test_case.sh"
|
||||||
------------
|
------------
|
||||||
+
|
+
|
||||||
Does the same as the previous example, but on a single line.
|
This shows that you can do without a run script if you write the test
|
||||||
|
on a single line.
|
||||||
|
|
||||||
SEE ALSO
|
SEE ALSO
|
||||||
--------
|
--------
|
||||||
|
Loading…
Reference in New Issue
Block a user