2

私の実際の差分エンジンを起動しようとして、非常に最小限の設定に調整しましたが、まだ出力がなく、何も起こらない理由を示していません。(SO と Mercurial のサイト (mercurial wiki を含む) で extdiff を検索すると、私が試したすべてのアイデアが得られましたが、おそらくすべてを試したわけではありません。)

bash スクリプトと .bat ファイルを試しました。/cygdrive/e/またはE:/として識別されるE:ドライブの「ルート」にある各スクリプトを試しました。スクリプトへのパスを引用して、または引用せずに試しました。私は組み合わせを使い果たしたと思いますが、何が実行されているか (もしあれば) の兆候をまだ得ていません。直接呼び出された場合、FdbCmp.bat は期待どおりに動作します。$PATH のディレクトリと Windows パス環境変数にあります。

他の提案?それは十分に単純で、「うまくいく」はずです

mercurial.ini に含まれるもの

[extdiff]  
hgext.extdiff
cmd.fdiff0 = "e:/Program Files/DbCmp/FdbCmp.bat"
opts.fdiff0 = $root --file $local --file $other

FdbCmp.bat:

@echo off
echo FdbCmp.bat testing
echo FdbCmp.bat args: ::%1:: ::%2:: ::%3 ::%4:: ::%5:: ::%6:: ::%7:: ::%8:: ::%9::

hg showconfig | grep extdiffは、期待される結果を返します (他のいくつかの行の中で)

extdiff.cmd.fdiff0="e:/Program Files/DbCmp/FdbCmp.bat"  
extdiff.opts.fdiff0=$root --file $local --file $other  
extensions.hgext.extdiff=  

hg fdiff0は $? で返されます。= 0 (cygwin bash または CMD.EXE) で、出力は表示されません。私は、FdbCmp.bat ファイルが何かを出力すると予想していました。

hg fdiff0 abc (ファイル a、b、c が存在しない場所) は、次を返します。ファイルが存在せず、Hg がそれを報告しているため、これは予期されたものです。

a: The system cannot find the file specified  
b: The system cannot find the file specified  
c: The system cannot find the file specified  

すべてのファイルが存在するhg fdiff0 file1 file2 file3は、エラーも出力もなしに戻ります。これは予期しないことです。FdbCmp.bat が呼び出され、何かが出力されているはずです。

.bat ファイルだけをテストすると、期待どおりの結果が得られます。
$ FdbCmp.bat moo cow oink pig

FdbCmp.bat testing  
FdbCmp.bat args: ::moo:: ::cow:: ::oink ::pig:: :::: :::: :::: :::: ::::  

hg -- バージョンは 2.4.6-35ba170c0f82 です

4

2 に答える 2

1

ドキュメントの extdiff セクションを読み直すと、必要に応じてオプションとファイルが混在する可能性のあるマージツールの動作とは異なり、オプションが「プログラム名と差分するファイル/ディレクトリの間のコマンドに挿入される」ことが示されています。適切なコマンドラインを構築します。$local、$root、... 変数は、extdiff のコンテキスト内には存在しません。これらは、ここでは適用されないマージ ツールの機能です。

関連する mercurial.ini セクションは現在

[extensions]
# enable the extdiff extension
hgext.extdiff =

[extdiff]
# define a jpeg differencing script; no options required
cmd.jpgdiff = HgJpgDiff.bat
# HgJpgDiff.bat is in a directory in my $PATH and contains:
# @rem ... various lines to test if we have been handed directories or files to compare
# @rem ...we only compare files, so this is the only active line
# JpgDiff --file %1 --file %2

[diff-patterns]
**.jpg=jpgdiff

すべてが希望どおりに機能します。パラメータをファイルにエコーすると、デバッグに役立ちました。画面には何も表示されませんでした。

どうもありがとう。

于 2013-02-11T21:33:03.930 に答える
1

「Extdiff 拡張機能」 wiki ページを読み直す必要があると思います。

hg diff FILE1 FILE2とにかく、差分などの代わりに使用したい場合hg fdiff FILE1 FILE2は、(違いを参照してください)

  • グローバル mercurial.ini (またはプロジェクトの .hgrc) に追加

[extensions]

hgext.extdiff =

(たぶんextdiff =、テストする必要があります)

  • ファイルに新しいセクションを作成[exdiff]し、このセクションで外部差分とコマンド オプション (3 つのファイルとの差分???) の新しいコマンドを定義します。

cmd.fdiff = FdbCmp.bat

opts.fdiff = $0 --file $1 --file $2

上記の私のサンプルでは、​​resulingコマンド

hg fdiff /PATH/TO/ B C

内部で結果として生成する必要があります

FdbCmp.bat /PATH/TO/ --file B --file C

于 2013-02-07T03:05:10.887 に答える