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:
		| @ -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 | ||||
| ------------ | ||||
|  | ||||
| * 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: | ||||
| + | ||||
| ------------ | ||||
| $ cat ~/test.sh | ||||
| #!/bin/sh | ||||
| 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 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. | ||||
| + | ||||
| 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, | ||||
| 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 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 | ||||
| -------- | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Junio C Hamano
					Junio C Hamano