藤原です。
2014年4月2日 15:43 Shun-ichi Goto <
shunic...@gmail.com>:
> 2014年4月2日 13:57 shin ohira <
shin....@gmail.com>:
>> おおひらです。
>> 状況確認できるサンプルの
>> 公開環境ができました。
>
> comparison ってまったく使ってなかったんですが、試してみました。
>
> どうやらdiff が 指定ファイルの 対象revでの変更内容 を表示するの
> に対して、comparison は対象 revに最も近い過去の変更の内容 を処理
> していますね。
この部分の Goto さんの発言で気が付きました。
ちょっと内部的な話を含みますが、comparison は、変更コンテキスト(=
履歴ツリーの要素) changectx の親ではなく、ファイルコンテキスト(=
ファイル毎の履歴ツリーの要素) filectx の親を比較対象にしてました。
http://selenic.com/repo/hg/file/9e9e3a4e9261/mercurial/hgweb/webcommands.py#l715
if path in ctx:
fctx = ctx[path] <<<< changectx から filectx を取得
rightrev = fctx.filerev()
rightnode = fctx.filenode()
rightlines = filelines(fctx)
parents = fctx.parents() <<<< filectx の親(= filectx)を取得
if not parents: <<<< リビジョン 0 で親が無い場合
leftrev = -1
leftnode = nullid
leftlines = ()
else: <<<< 通常ケース
pfctx = parents[0] <<<< filectx の 第1親を比較対象に選定
leftrev = pfctx.filerev() <<<< filectx から changectx を逆引き
leftnode = pfctx.filenode()
leftlines = filelines(pfctx)
ファイル履歴コンテキストは、各ファイル毎の変更履歴のみによるツリー
なので、ファイル履歴コンテキストの親はまさに「対象 revに最も近い」
親になります。
私の場合、diff を見てから comparison を見てた(= changectx と
filectx の親が一致)ので気が付かなかったのでしょうね。
> これはそもそも comparison 機能仕様がどういうものであるのかにもよ
> るとは思いますが、diffとcomparisonの違いについてはそういうことで
> はないでしょうかね。
diff と comparison の差が、表示形式(差分形式と side-by-side 形式)
のみだとすると:
> 「diffが正しいのであってcomparison が間違ってる」といったほうが
> いいのかもしんないです。
であるように思われます。
問題と原因がはっきりしたので、修正提案を投げてみようと思います。
--
----------------------------------------------------------------------
FUJIWARA Katsunori(
flying...@gmail.com)