[PATCH 1 of 1] bisect: print current state of the bisection

Yann E. MORIN yann.morin.1998 at anciens.enib.fr
Fri Sep 16 16:40:42 CDT 2011


Matt, All,

On Friday 16 September 2011 01:52:23 Matt Mackall wrote:
> On Fri, 2011-09-16 at 01:28 +0200, Yann E. MORIN wrote:
> > - pruned:
> >     all changesets that we know already participated in the bisection
> >     so far, basically, all good, bad and skipped changsets; so the set
> >     is:
> >       'bisected(good) | bisected(bad) | bisected(skip)'
> 
> This one's actually trickier.
> 
> Depending on which edge direction we've inferred,

It never occured to me that a regression could be the other way around.
But it makes sense, I agree. A direct bisection (bad<good) is to find the
cause of a regression; a reverse bisection (good<bad) is to find where a
bug disapeared. And after all, good/bad are only meaningfull for us mere
humans, and could be use either way... ;-)

> we might want to either have:
> 
> bisected(skip) and ancestors(bisected(good)) and descendants(bisected(bad))
> 
> or
> 
> bisected(skip) and ancestors(bisected(bad)) and descendants(bisected(good))

OK, you want only skipped csets that are still in the bisection range (eg.
skipped csets that are out-side the bisection scope get removed).

OK, got it.

> > - untested:
> >     all changsets that are not yet tested, and that are potential
> >     candidates for later tests; basically, it means that:
> >       - all changesets already tested are excluded
> >       - all descendant of good changesets that are ancestors of
> >         bad changesets, are included
> >     so the set looks like:
> >       'bisected(good)::bisected(bad) & ! bisected(pruned)'
> 
> s/pruned/skip/

good::bad will also return the good and bad csets, but those are not
untested: they are good (or bad). 'untested' is for remaining csets,
which we do not know whether they are good/bad?

So we should also exclude good and bad sets from the result, no?

> This also has the directionality issue.

OK.

> > - ignored:
> >     all changesets that can't participate in the bisection because
> >     of DAG topology. For example, a branch merged between the good
> >     set and the bad set, but whose branch point is before the good
> >     set, will not participate in the bisection, although the issue
> >     may originate from that branch [*]; what this means is:
> >       - all changesets already tested are excluded
> >       - all ancestors of bad changesets that are not ancestors of
> >         good changesets, are included
> >     so the set looks like:
> >       '( ::bisected(bad) - ::bisected(good) ) & ! bisected(pruned)'
> 
> Note that we can simply define any of these sets in terms of the other
> two:
> 
> ignored = !pruned and !untested

With such a definition, 'ignored' will return *all* csets of the repo,
except the pruned or untested ones. 'ignored' conveys a stronger meaning,
that is "csets that can't participate to the bisection, but might have
an impact on the outcome"; such as you perfectly explained with a merge
in the middle of good::bad

But if am wrong on all the above, just correct me (once more!) ;-)

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'


More information about the Mercurial-devel mailing list