From: Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
To: Ingo Molnar <mingo@elte.hu>, git@vger.kernel.org
Cc: Jan Beulich <JBeulich@novell.com>,
"H.J. Lu" <hjl.tools@gmail.com>, "H. Peter Anvin" <hpa@zytor.com>,
Andrew Morton <akpm@linux-foundation.org>,
Linus Torvalds <torvalds@linux-foundation.org>,
Thomas Gleixner <tglx@linutronix.de>
Subject: [PATCH] Document 'git bisect fix'.
Date: Mon, 14 Mar 2011 22:00:01 +0100 [thread overview]
Message-ID: <20110314210001.GE4586@gmx.de> (raw)
In-Reply-To: <20110314131623.119020@gmx.net>
git bisect is sometimes less effective than it could be in projects
with long-lived but simple bugs (e.g., little-tested configurations).
Rather than skipping vast revision ranges, it might be easier to fix
them up from known bugfix branches.
'git bisect fix' teaches bisect about when some known bug was
introduced and when it was fixed, so that bisect can merge in
the fix when needed into new test candidates.
---
* Ralf Wildenhues wrote on Mon, Mar 14, 2011 at 02:16:23PM CET:
> it would be very helpful if 'git bisect' made it easy to denote
> "when going back, you might also need some of these changes".
Merging in a set of bugfix branches (branches with minimal fixes, based
right off of commits introducing some bug) before testing a particular
contender would be a good start. Of course we don't want some bugfix
branch to be merged in if the known bug isn't yet in the current
contender, so as to not merge unrelated changes.
Cherry-pick things is another option, but the above seems a bit more
gittish to me, and works well with bugfix branches. Also, data like
"bugzilla X was introduced by C1 and fixed by C2" is helpful (and
already available in some projects) anyway in a semi-automatic fashion.
You might even want to version it, or keep it in project meta-data.
If some bug was fixed by a merge only, the more general notation
"f_1 ^b_1 ^b_1' ..." could apply.
Here's a balloon doc patch to show what I mean. Comments?
Is this too unlike how bisect works today? Too dangerous?
Thanks, and please keep me in Cc:,
Ralf
Documentation/git-bisect.txt | 20 ++++++++++++++++++++
git-bisect.sh | 4 +++-
2 files changed, 23 insertions(+), 1 deletions(-)
diff --git a/Documentation/git-bisect.txt b/Documentation/git-bisect.txt
index c39d957..9074cb3 100644
--- a/Documentation/git-bisect.txt
+++ b/Documentation/git-bisect.txt
@@ -25,6 +25,7 @@ on the subcommand:
git bisect replay <logfile>
git bisect log
git bisect run <cmd>...
+ git bisect fix [(<range>|<rev>)...]
This command uses 'git rev-list --bisect' to help drive the
binary search process to find which change introduced a bug, given an
@@ -198,6 +199,25 @@ $ git bisect skip v2.5 v2.5..v2.6
This tells the bisect process that the commits between `v2.5` included
and `v2.6` included should be skipped.
+Fixing up known bugs
+~~~~~~~~~~~~~~~~~~~~
+
+If many revisions are broken due to some unrelated but known issue that
+is easily fixed, you might want to prefer fixing it up temporarily.
+If `<commit1>` introduces a bug fixed by `<commit2>`, instruct bisect
+to merge the latter before testing a commit that contains the former:
+
+------------
+$ git bisect fix <commit1>..<commit2>
+------------
+
+A single `<commit>` acts as if `<commit>^..<commit>` was specified.
+Fix statements can be repeated for every known bug, and are valid until
+the bisection state is cleaned up with reset.
+
+Any bisect action that causes a new commit to be chosen will try to merge
+the needed fixes and fail if they do not merge cleanly.
+
Cutting down bisection by giving more parameters to bisect start
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/git-bisect.sh b/git-bisect.sh
index c21e33c..2b137f0 100755
--- a/git-bisect.sh
+++ b/git-bisect.sh
@@ -1,6 +1,6 @@
#!/bin/sh
-USAGE='[help|start|bad|good|skip|next|reset|visualize|replay|log|run]'
+USAGE='[help|start|bad|good|skip|fix|next|reset|visualize|replay|log|run]'
LONG_USAGE='git bisect help
print this long help message.
git bisect start [<bad> [<good>...]] [--] [<pathspec>...]
@@ -11,6 +11,8 @@ git bisect good [<rev>...]
mark <rev>... known-good revisions.
git bisect skip [(<rev>|<range>)...]
mark <rev>... untestable revisions.
+git bisect fix [(<c1>..<c2>|<rev>)...]
+ mark descendants of <c1>/<rev^> as needing fixes <c2>/<rev>.
git bisect next
find next bisection to test and check it out.
git bisect reset [<commit>]
--
1.7.4.1.231.ge4ce
next prev parent reply other threads:[~2011-03-14 21:00 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20110311165802.GA3508@intel.com>
[not found] ` <4D7A64670200007800035F4C@vpn.id2.novell.com>
[not found] ` <AANLkTikG8wa1Em0bEUddbYpYs2TzFFTDb95qWFJ3xSbv@mail.gmail.com>
[not found] ` <4D7DE39302000078000362E6@vpn.id2.novell.com>
[not found] ` <20110314095534.GB18058@elte.hu>
[not found] ` <20110314104131.GG6275@bubble.grove.modra.org>
[not found] ` <20110314122342.GA26825@elte.hu>
2011-03-14 13:16 ` git bisect plus fixes (was: PATCH: Add --size-check=[error|warning]) Ralf Wildenhues
2011-03-14 13:47 ` [PATCH] git-bisect.txt: example for bisecting with hotfix Michael J Gruber
2011-03-14 17:35 ` Junio C Hamano
2011-03-15 21:24 ` [PATCHv2 1/2] git-bisect.txt: streamline run presentation Michael J Gruber
2011-03-15 21:24 ` [PATCHv2 2/2] git-bisect.txt: example for bisecting with hot-fix Michael J Gruber
2011-03-14 21:00 ` Ralf Wildenhues [this message]
2011-03-15 10:16 ` [PATCH] Document 'git bisect fix' Yann Dirson
2011-03-16 9:52 ` Christian Couder
2011-03-16 11:47 ` Michael J Gruber
2011-03-16 20:35 ` Junio C Hamano
2011-03-16 13:34 Yann Dirson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20110314210001.GE4586@gmx.de \
--to=ralf.wildenhues@gmx.de \
--cc=JBeulich@novell.com \
--cc=akpm@linux-foundation.org \
--cc=git@vger.kernel.org \
--cc=hjl.tools@gmail.com \
--cc=hpa@zytor.com \
--cc=mingo@elte.hu \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).