10

私は oh-my-git にいくつかの個人的な変更を加えています (端末に git ステータスを表示します)。現在の bisect の「ステータス」を表示したいと思います。具体的には、残りのコミット数と、最後の bisect コマンドの結果であるおおよそのステップ数を取得したいと思います。たとえば、次のようになります。

Bisecting: 9 revisions left to test after this (roughly 3 steps)

git bisect goodこの情報を取得するには、実際にorを実行するしかないようgit bisect badです。ただし、これらのコマンドのいずれかを実行してレポの状態を変更したくはありません。現在の bisect 状態を取得したいだけです。

4

1 に答える 1

13

非常に限られたテストに基づく完全に素朴な答え:

プローブするために残されたコミットの範囲は で取得git bisect visualizeできgit bisect visualize | wc -lます。

この状態になる前に出力されたメッセージは、この量のおよそ半分に基づいており、その半分の基数 2 のログをとっているようです。

たとえば、私は今、次のように言われた状態にあります。

Bisecting: 10 revisions left to test after this (roughly 3 steps)

そして、この状態で私は持っています:

$ git bisect visualize --oneline | wc -l
21

つまり、「10 回のリビジョン」は、実際には疑わしい範囲に 21 件のコミットがあることを意味します。私たちはその範囲の真ん中にいるので、どちらの方向にも約 10 あります。10 を取得するには、切り捨てて 21/2 を計算します。「おおむね残り 3 のテスト」を取得するには、10 の基数 2 の対数を切り捨てます。

私のお気に入りのスクリプト言語で (あなたのものに置き換えてください):

$ txr -P '(let* ((count (length
                          (get-lines
                            (open-command "git bisect visualize --oneline"))))
                 (left (trunc count 2)))
            `Bisecting: @left revisions left to test after this \
            \ (roughly @(int-flo (log2 left)) steps)`)'
Bisecting: 10 revisions left to test after this (roughly 3 steps)

bisect少なくとも 1 つの良いコミットと 1 つの悪いコミットを報告していない場合、コマンドは文句を言うので、いくつかのエラー処理が必要です。可能であれば、log2 がゼロに適用されるのを回避するなど、まれなケースもあります。

于 2016-06-07T00:29:20.750 に答える