Команда bisect
помогает вам найти набор изменений, который привел к ошибке. Часто случается так, что вы понимаете, что что-то сломано и какое-то время было сломано. С hg bisect
вы можете точно определить, когда он сломался. Когда вы это знаете, часто намного легче решить проблему.
Это работает так. Вы начинаете со сброса состояния деления и помечаете текущую версию как плохую, поскольку она содержит ошибку:
$ hg bisect --reset
$ hg bisect --bad
Затем вы возвращаетесь в историю к точке, в которой, как вы надеетесь, ошибки нет:
$ hg update -r -100
89 files updated, 0 files merged, 30 files removed, 0 files unresolved
Вы должны протестировать свое программное обеспечение в этой версии, и если ошибки нет, то вы можете пометить ее как хорошую:
$ hg bisect --good
Testing changeset 11964:79bd860b8eb7 (81 changesets remaining, ~6 tests)
36 files updated, 0 files merged, 22 files removed, 0 files unresolved
Когда вы отметили его как хороший, Mercurial обновил вашу рабочую копию до места примерно посередине между хорошим и плохим набором изменений. Теперь вам нужно протестировать этот набор изменений и отметить его как хороший / плохой.
$ hg bisect --good
Testing changeset 11985:81edef14922e (41 changesets remaining, ~5 tests)
23 files updated, 0 files merged, 26 files removed, 0 files unresolved
Я продолжаю так до тех пор, пока Mercurial не сузит поиск до одного набора изменений:
$ hg bisect --bad
Testing changeset 11975:21884b433c51 (20 changesets remaining, ~4 tests)
18 files updated, 0 files merged, 8 files removed, 0 files unresolved
$ hg bisect --good
Testing changeset 11980:c443e95d295b (10 changesets remaining, ~3 tests)
5 files updated, 0 files merged, 10 files removed, 0 files unresolved
$ hg bisect --good
Testing changeset 11982:56d9b73487ff (5 changesets remaining, ~2 tests)
2 files updated, 0 files merged, 4 files removed, 0 files unresolved
$ hg bisect --bad
Testing changeset 11981:518b90d66fad (2 changesets remaining, ~1 tests)
2 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ hg bisect --bad
The first bad revision is:
changeset: 11981:518b90d66fad
user: Pradeepkumar Gayam <in3xes@gmail.com>
date: Wed Aug 18 05:55:56 2010 +0530
summary: tests: unify test-merge8
Вы все еще должны выполнить отладку самостоятельно, но использование hg bisect
избавляет вас от отслеживания того, какие наборы изменений вы уже тестировали, а какие еще нужно проверить. Вы можете использовать для этого кучу пост-заметок, но гораздо приятнее позволить Mercurial это сделать. Это особенно верно, когда граф наборов изменений является нелинейным из-за слияний.
В общем, hg bisect
помогает вам выполнить поиск неисправной ревизии в логарифмическом времени, без необходимости отслеживать, где вы находитесь в поиске.