2

在尝试启动我的真正差分引擎时,我已将设置调整为非常小的设置,但仍然没有输出,也没有任何迹象表明为什么似乎什么也没发生。(搜索 extdiff 的 SO 和 Mercurial 站点(包括 mercurial wiki)给了我我尝试过的所有想法,尽管也许我还没有尝试过。)

我尝试了一个 bash 脚本和一个 .bat 文件;我已经尝试了位于 E: 驱动器的“根”中的每个脚本,标识为 /cygdrive/e/ 或 E:/ 我尝试过引用和不引用脚本的路径。我想我已经用尽了这些组合,还没有得到任何迹象表明正在运行什么(如果有的话)。直接调用时,FdbCmp.bat 的行为与预期相同;它位于我的 $PATH 目录和 Windows Path 环境变量中。

其他建议?看起来它很简单,应该“正常工作”

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::

汞显示配置 | 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 --version 是 2.4.6-35ba170c0f82

4

2 回答 2

1

我想,您必须重新阅读“Extdiff 扩展”维基页面

无论如何,如果你想使用而不是类似的hg diff FILE1 FILE2东西hg fdiff FILE1 FILE2来区分,你有(见差异)

  • 添加到全局 mercurial.ini(或项目的 .hgrc)

[extensions]

hgext.extdiff =

(也许只是extdiff =,必须测试)

  • 在文件中创建新[exdiff]部分,并在此部分中为外部差异和命令选项定义新命令(带有 3 个文件的差异???),可能像这样(FdbCmp.bat 添加到 PATH)

cmd.fdiff = FdbCmp.bat

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

对于我上面的示例导致命令

hg fdiff /PATH/TO/ B C

必须在幕后产生结果

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

于 2013-02-07T03:05:10.887 回答
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 回答