libreboot-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Libreboot-dev] git-bisect usage (was: Test report: mb2, 1 - 2015-12-16


From: Johannes Krampf
Subject: [Libreboot-dev] git-bisect usage (was: Test report: mb2, 1 - 2015-12-16 (unstable))
Date: Mon, 4 Jan 2016 17:56:27 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Icedove/38.4.0

Hello Eemeli and Albin,

On 01/04/2016 05:50 AM, Eemeli Blåsten wrote:
Issue b) was experienced by Albin in the release
"r20150518fix-652-g48821e5". I have not tried that one and so haven't
experienced that issue. On my laptop issue a) was fixed somewhere
between the stable release 20150518 and the commit
7c5fc471cfcdc48086491c87773a3667ae016873 (20151222). If someone would
teach me how to git bissect I'd be more than happy to try to locate the
fix. Note that this will take a long time since the machine has to "cool
down" for an hour or more for issue a) to appear.

Bisecting helps to find issues which were introduced in a commit between two known points. All commits before this commit will be good and all commits after will be bad. A binary search is done to find the commit introducing the problem.

That is, first the commit in the middle between the last known good and first known bad is tested. If it is bad, the problem was introduced earlier and if it is good the problem was introduced later. Then again, the commit in the middle between the new last good and first bad is tested, it is determined if the problem was introduced earlier or later and this is repeated until the exact commit introducing an issue is found.

Your case is the other way around: The problem was solved, not introduced, between two commits. Please think of any commits before the fix as 'good' and any commits including the fix as 'bad'.

Git has the git-bisect command to help with this (`man git-bisect`). Please check out the libreboot source code and execute the following to start bisecting: (Lines starting with '#' are comments.)

$ git bisect start
# Mark last known good commit (In your case: With problem)
$ git bisect good r20150518fix
# Mark first known bad commit (In your case: Without problem)
$ git bisect bad 7c5fc471cfcdc48086491c87773a3667ae016873
Bisecting: 329 revisions left to test after this (roughly 8 steps)
[d2121582c31b58280514fc0027b46584fe9bd032] docs/tasks.html: note about bucts on i945

Git-bisect checked out the commit in the middle between the last known good and the first known bad commit.

You can now build libreboot (`./build clean all` might be required), flash and test it. Depending on the results, you can mark the current commit either as bad (in your case: problem does not exist) or good (in your case: problem does exist) with `git bisect bad` and `git bisect bad`.

Let's assume the commit was good. Git-bisect checks out a new revision, you can again build, flash, test and mark as good/bad:

$ git bisect good
Bisecting: 164 revisions left to test after this (roughly 7 steps)
[3c42f19b2ffc8b94fb3e732181cccd51fe3dd026] docs/hcl/c201.html: Link to FAQ entry, describing what an EC is

I'm marking all commits as good to get to the final commit in the search:

# Not showing marking intermediate commits as good
$ git bisect good
Bisecting: 0 revisions left to test after this (roughly 1 step)
[6425a49d06c20e4680e2e6a6cf18fae3dbb91ca1] download/flashrom: fix typo: it's git, not subversion
$ git bisect good
7c5fc471cfcdc48086491c87773a3667ae016873 is the first bad commit
commit 7c5fc471cfcdc48086491c87773a3667ae016873
Author: Francis Rowe <address@hidden>
Date:   Tue Dec 22 15:42:38 2015 +0000

    docs/src/*/c201*: it's packages, not package (fix typo)

:040000 040000 903ef9ceb861afbe697dfa77a5f0a33537dd8cc4 992b4384dac349ccafd06243e99a222e58303b51 M docs

At this stage you can also use "git bisect visualize" to show the commit introducing the bug (or in your case, fixing the bug) and "git bisect log" to see which commits you investigated:

$ git bisect log
git bisect start
# bad: [7c5fc471cfcdc48086491c87773a3667ae016873] docs/src/*/c201*: it's packages, not package (fix typo)
git bisect bad 7c5fc471cfcdc48086491c87773a3667ae016873
# good: [c5c01913227ae23105a198aa06bfb3f12f9cf892] Libreboot r20150518 (fix mistake in flashrom patch)
git bisect good c5c01913227ae23105a198aa06bfb3f12f9cf892
# good: [d2121582c31b58280514fc0027b46584fe9bd032] docs/tasks.html: note about bucts on i945
git bisect good d2121582c31b58280514fc0027b46584fe9bd032
# good: [3c42f19b2ffc8b94fb3e732181cccd51fe3dd026] docs/hcl/c201.html: Link to FAQ entry, describing what an EC is
git bisect good 3c42f19b2ffc8b94fb3e732181cccd51fe3dd026
# good: [ec162e45ee82503306b66c5e19cd9946ded5668f] grub-assemble: remove redundant line break on EOF
git bisect good ec162e45ee82503306b66c5e19cd9946ded5668f
# good: [2e7fde09174aed5f3cc7d714dbe32e451873f3c9] update GRUB
git bisect good 2e7fde09174aed5f3cc7d714dbe32e451873f3c9
# good: [1d699df7c4bbd55117a9c769988eb9313165601a] update .gitignore
git bisect good 1d699df7c4bbd55117a9c769988eb9313165601a
# good: [34e0269745c16a8a70438dfb5a32931907e33161] remove seabios (this time permanently)
git bisect good 34e0269745c16a8a70438dfb5a32931907e33161
# good: [910b212e90c6f9c57025e1c7b0c08897af787496] docs/hcl/kgpe-d16.texi: note about microcode for 6300/6200 opterons
git bisect good 910b212e90c6f9c57025e1c7b0c08897af787496
# good: [dd34b4e7b6ff216ddac56941383290dc1da99ba8] tell user not to buy ASUS Chromebook C201
git bisect good dd34b4e7b6ff216ddac56941383290dc1da99ba8
# good: [6425a49d06c20e4680e2e6a6cf18fae3dbb91ca1] download/flashrom: fix typo: it's git, not subversion
git bisect good 6425a49d06c20e4680e2e6a6cf18fae3dbb91ca1
# first bad commit: [7c5fc471cfcdc48086491c87773a3667ae016873] docs/src/*/c201*: it's packages, not package (fix typo)

I hope this helps with using git bisect.

- Johannes



reply via email to

[Prev in Thread] Current Thread [Next in Thread]