[PATCH 0 of 9] Implement new revset.bisected() keywords, v2

Yann E. MORIN yann.morin.1998 at anciens.enib.fr
Sun Sep 18 23:31:11 UTC 2011


Hello All!

As previously discussed on the list and on IRC, here is a patchset that
implements new revset.bisect() keywords:

- bisect(range)
  All changesets in the bisection range, including good, bad and
  skipped csets. This is roughly : (good::bad | bad::good)

- bisect(pruned)
  All csets in the above range, that are either good, bad or skipped'
  skipped csets that are not in range are omitted from the result.
  This is roughly : range & (good|bad|skip)

- bisect(untested)
  All csets in the range, that are neither good nor bad nor skipped.
  This is roughly : range & ! (good|bad|skip)

- bisect(ignored)
  All cset that may have an impact on the bisection, but are out of the
  range. For example, a branch that is merged between good and bad, but
  which branch point is out of the range.
  This is roughly :
    ( ::bad - ::good | ::good - ::bad ) & ! range

Changes since v1:
- added documentation (Matt on IRC)
- rename bisect (Matt on IRC)
- testsuite using the DAG in test-bisect2
- fix commit messages

Remaining work (possibly in another series, later?):
- add new set of 'discarded' csets, eg. untested csets that are both
  ancestor and descendant to two good csets, or two bad csets, possibly
  differentiating between 'discarded because good' from 'discarded because
  bad'
- do not report 'discarded' csets when reporting 'untested'
- report the shortest range usefull to the remaining bisection

The lattest is more complex than it sounds, depending (as Matt puts it)
"on which edge direction we've inferred". Would it make sense to decide
the direction of the bisection with:
  if min(goods) < max(bads):
     goods are globally lower revs than bads, eg. looking for regression
  else
     bads are globally lower revs than goods, eg. looking for bug fix

Also possibly waiting for a enhancement by Matt to pass a list to either
side of the '::' operator (if I understood correctly). Matt, would that
wor to build the set of all cset that are between good csets:
  (goods)::(goods)

Patches 9 and 10 are *not* to be applied now, it's just a preview of the
way to print the changesets' bisection status in the log. It's ugly, and
breaks some tests for now. It's just a _preview_ of what I intend to do
later, possibly using tags, or extras, or a new 'bisect:' line... TBD...

Thank you!

Regards,
Yann E. MORIN.


More information about the Mercurial-devel mailing list