hgext.extdiff默默地什么都不做

时间:2013-02-06 22:58:46

标签: mercurial mercurial-extension

在试图让我真正的差分引擎上升时,我已经修剪到一个非常小的设置,但仍然没有输出,也没有迹象表明为什么没有发生任何事情。 (搜索SO和Mercurial网站(包括mercurial wiki)为extdiff提供了我尝试过的所有想法,但也许我还没有尝试过。)

我尝试了一个bash脚本和一个.bat文件;我已经尝试了位于E:驱动器“root”中的每个脚本,标识为/ 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::

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 a b c (其中文件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

2 个答案:

答案 0 :(得分:1)

我想,你必须重新阅读"Extdiff extension" wiki page

无论如何,如果您想使用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

答案 1 :(得分:1)

重新阅读文档的extdiff部分显示选项“将被插入到程序名称和文件/目录之间的命令以进行diff”,这与merge-tools行为不同,其中选项和文件可能混合在一起根据需要建立适当的命令行。 $ 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

现在所有工作都按照需要进行。将参数回送到文件有助于调试;屏幕上没有显示任何内容。

非常感谢。