Вы должны использовать команду bisect
, чтобы быстро выяснить, когда ваша функция перестала работать. Работает следующим образом:
Вы начинаете со сброса состояния деления и помечаете текущую версию родительского рабочего каталога как плохую:
hg bisect --reset
hg bisect --bad
Теперь сделайте предположение, когда вы думаете, что функция работает. Если вы думаете, что это сработало 1 июня, тогда вы можете сделать
hg update -d '<Jun 1'
Команда update
используется для обновления рабочего каталога в соответствии с заданным набором изменений. См. hg help dates
для списка форматов даты. Теперь вы должны протестировать эту ревизию, и если эта функция работает здесь, вы помечаете ее как хорошую:
hg bisect --good
Если функция не работает в этом наборе изменений, пометьте ее как плохую и обновите еще дальше:
hg bisect --bad
hg update -d '<May 1'
Повторяйте это, пока не найдете хорошую ревизию. Когда вы нашли хорошую ревизию, Mercurial может помочь вам: наборы изменений между хорошими и плохими должны содержать ошибку. Mercurial поможет вам, отслеживая список возможных наборов изменений, и поможет сузить список до единого набора изменений. Он делает это, обновляя вас до набора изменений примерно посередине кандидатов и предлагая вам протестировать этот набор изменений.
После тестирования вы помечаете набор изменений как хороший или плохой. Если вы отметите его как хороший, то вы знаете, что ошибка находится в будущем, а если вы отметите его как плохой, то ошибка остается в прошлом. В любом случае вы сокращаете примерно половину кандидатов на каждом шаге! Это означает, что вам нужно всего 10 шагов для тестирования 1024 кандидатов - это сила логарифмов :-) Mercurial будет отслеживать кандидатов и сообщать вам новое место после каждого теста.
Полный сеанс может выглядеть следующим образом (я просто говорю «хорошо / плохо»):
% hg bisect --reset
% hg bisect --bad
% hg update -r -100
61 files updated, 0 files merged, 9 files removed, 0 files unresolved
% hg bisect --good
Testing changeset 11414:0fa4474bdc2f (99 changesets remaining, ~6 tests)
46 files updated, 0 files merged, 0 files removed, 0 files unresolved
% hg bisect --good
Testing changeset 11439:778377be3662 (50 changesets remaining, ~5 tests)
17 files updated, 0 files merged, 0 files removed, 0 files unresolved
% hg bisect --bad
Testing changeset 11428:4d03c3680400 (25 changesets remaining, ~4 tests)
6 files updated, 0 files merged, 0 files removed, 0 files unresolved
% hg bisect --bad
Testing changeset 11420:a99ef3711890 (13 changesets remaining, ~3 tests)
3 files updated, 0 files merged, 0 files removed, 0 files unresolved
% hg bisect --bad
Testing changeset 11417:6f1d1ed3e19a (6 changesets remaining, ~2 tests)
4 files updated, 0 files merged, 0 files removed, 0 files unresolved
% hg bisect --good
Testing changeset 11418:67bb9d78f05e (3 changesets remaining, ~1 tests)
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
% hg bisect --bad
The first bad revision is:
changeset: 11418:67bb9d78f05e
user: Matt Mackall
date: Mon Jun 21 13:25:42 2010 -0500
summary: merge: sort arguments to stabilize the ancestor search