git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Stefan Beller <sbeller@google.com>
To: Oleg Taranenko <olegtaranenko@gmail.com>
Cc: git <git@vger.kernel.org>
Subject: Re: git bisect for reachable commits only
Date: Tue, 2 Aug 2016 10:25:26 -0700	[thread overview]
Message-ID: <CAGZ79kbx-eq=NPMYon5MV_T5cqiFmcZ_F6zGQO5p7mgLg8bQ4A@mail.gmail.com> (raw)
In-Reply-To: <CABEd3j_6DNgs1u5AdkkzWt7U=J2fZ4a-2jewVjkfExt0KPvWiQ@mail.gmail.com>

On Tue, Aug 2, 2016 at 3:15 AM, Oleg Taranenko <olegtaranenko@gmail.com> wrote:
> Guys,
>
> thanks for discussion, I will try to reply in bulk here.
> First, assuming the common ancestor is GOOD based on the fact that
> some descendant given as GOOD is pretty bad idea.
> It may be, but may not be. In the git-flow like workflows new features
> (aka branches) are created from trunk (master/develop/...)
> sporadically,
> but later they will mutual merging. I would say more probably they
> have not common base, then have.

git bisect has the underlying assumption that the BUG is not there initially
and introduced by one specific commit, and continues to be there until B.
With this assumption you can do a binary search, which allows searching
in O(log n), which is optimal for the number of iterations needed.

>
> Second, I don't ask "create a new algorithm to find all transition
> from good/old to bad/new", not nesessary. If programmer feels
> something
> suspicious, he/she can create another bisect session with narrowed commit range.
>
> Third, testing of any specific commit can be very expensive operation.
> In my case - shutdown servers/refresh dbs/clean/rebuild in
> eclipse/running servers/dropping browser cache/running app in
> browser/going through some pages/view UI.
> Some of steps of course are automated, but some not. Anyway I spend
> 5-10 min for every iteration. So knowing what commit is bad or good is
> very valuable, then I'm very interested to hunt the bug-introduced
> commit with minimal count of testing.


As you point out each iteration is a burden to the user, so they should be
kept to a minimum.

>
> Scenario 4 (I will keep my previous mail numbering for possible later reference)
>                  z1----z2---z3
>                 /     /      \
>     G----x1----x2----/---x3---x4--B
>           \         /   /
>            y1--y2--y3--y4
>
> This is the happy straight case with closed DAG (hehe, git for
> scientists) between given G good and B bad commits.
> Ideal bisect will check first the shortest way between G & B:
> x1/x2/x3/x4. Let name first-bug commit we are really hunting H and
> current first-bug candidate as h.
> If h == x1 or x2 -> stop, found
> If h == x3, bisect will try to test y2/y3/y4 path only
> If h == x4, bisect will select shortest path z1/z2 (keeping in mind,
> that x2 is already tested and is good)
>   If h == z1 - found
>   if h == z2 - looking in path y1/y2/y3

* git is agnostic of the workflow, i.e. it doesn't know the notion of
topic branches or such.
* What is the worst case in you strategy?
  (h=y4 means 7 tests by the user IIUC)

Given the assumptions as laid out above such that we are able to
do a binary search, the ideal candidate for scenario 4 is
y4 or z3 as these split the set of commits to be investigated into
2 equally sized sets of ancestors and non-ancestors.

When a specific workflow is given, it may make sense to weight
commits differently. Also some people asked for a strategy that only
checks merge commits first, as there are far fewer merge commits and
these generally are used for introducing a new feature or refactoring.

  reply	other threads:[~2016-08-02 17:28 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-07-29  8:53 git bisect for reachable commits only Oleg Taranenko
2016-07-29 18:03 ` Junio C Hamano
2016-07-31  0:06   ` Oleg Taranenko
2016-07-31  9:26     ` Jakub Narębski
2016-08-01 16:49       ` Junio C Hamano
2016-08-01 10:02     ` Oleg Taranenko
2016-08-01 15:41       ` Christian Couder
2016-08-01 19:51         ` Junio C Hamano
2016-08-01 20:36           ` Christian Couder
2016-08-01 23:11             ` Junio C Hamano
2016-08-02 10:15               ` Oleg Taranenko
2016-08-02 17:25                 ` Stefan Beller [this message]
2016-08-02 21:00                 ` Junio C Hamano
2016-08-04 23:29                   ` Oleg Taranenko

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

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAGZ79kbx-eq=NPMYon5MV_T5cqiFmcZ_F6zGQO5p7mgLg8bQ4A@mail.gmail.com' \
    --to=sbeller@google.com \
    --cc=git@vger.kernel.org \
    --cc=olegtaranenko@gmail.com \
    /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.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).