hg annotate の精度に関して

56 views
Skip to first unread message

FUJIWARA Katsunori

unread,
Oct 19, 2013, 1:44:17 AM10/19/13
to mercur...@googlegroups.com
藤原です。

先日、Mercurial の障害管理宛に『"hg annotate" の結果が期待するリビ
ジョンと異なる』という以下の障害が報告されました。

  http://bz.selenic.com/show_bug.cgi?id=4060


原因を調査したところ、以下のような問題であることが判明しました。

  - "hg annotate" の内部処理は、"hg diff" と共通の差分算出処理を使用

  - 問題の原因と思しきリビジョン(マージを実施)では、親リビジョン
    (第2親側)との "hg diff" の結果が期待と異なる

  - 想定外の行が、当該リビジョンで変更されたものとみなされる


根本的には、"hg diff" で使用している差分算出アルゴリズム (Python
標準の difflib と同等) に由来する問題ということになるのですが、仮
にアルゴリズムを変更したとしても:

  - 差分算出処理に『絶対』の解は無い

    差分量/読み易さ等の間でのトレードオフになる

  - 差分ベースで annotate している限りは、問題発生ケースが変わるだけ

ということから、この障害報告自体は『対処しない』ことになりました。


多くの場合で "hg annotate" 結果は期待通りになるとは思いますが、稀
に期待と異なる可能性がありますので、変更の由来リビジョンを『確実に』
特定したい場合は、"hg grep --all" 等と併用するようにしてください。

なお、"hg grep" も Python 標準の difflib 機能を使っているの
で、--all 無しだと期待するリビジョンを表示する前に終了してしまう可
能性がありますので、ご注意ください。


ちなみに、差分ベースで annotate を算出している限りは、Mercurial に
限らず同様の問題が発生する筈なのですが、他の SCM ツールの
annotate 実装はどうなっているのかな?

Reply all
Reply to author
Forward
0 new messages