このbisect
コマンドは、バグを導入した変更セットを見つけるのに役立ちます。何かが壊れていて、しばらく壊れていたことに気付くことがよくあります。を使用hg bisect
すると、いつ壊れたかを正確に把握できます。それがわかれば、多くの場合、問題を解決するのははるかに簡単になります。
それはこのように動作します。まず、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 が検索を 1 つの変更セットに絞り込むまで、この作業を続けます。
$ 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
、検索のどこにいるかを追跡する必要なく、対数時間で障害のある変更セットを検索するのに役立ちます。