使用Windows,Mercurial和extdiff擴展(對於Mercurial)。我試圖設置extdiff來使用WinDiff作爲外部差異工具,但我認爲我已經將問題縮小到足以說明問題在於甚至還沒有達到目標。Mercurial/extdiff不會更改爲臨時目錄(因爲我認爲它應該)
從我所瞭解的extdiff中,它只是調用你的cmd.winmerge程序,並將必要的目錄傳遞給它。我也工作過這裏列出一些假設的(這可能會或可能不準確,我只是學習水銀):
它說:
The extdiff (visual diff) extension works like this:
1-Generate temporary directory(ies) for older changesets
2-run util.system(cwd=tempdir, "yourdiff tool dir1 dir2")
util.system does:
2.1 store cwd;
2.2 cd tempdir
3-run your diff tool, wait for it to exit
4-cd oldcwd
5-Then finally extdiff deletes the temp directories.
的麻煩我的意思是extdiff在繼續之前似乎沒有改變到臨時目錄中,因爲它看起來應該在上面的步驟2.1中進行。
在試圖找出問題時,我寫了一個批處理文件,以查看cd是什麼,傳遞了什麼以及傳遞的具體方式。批處理文件如下:
@echo off
echo %cd%
echo %1
echo %2
D:\Documents\apps\WinMergePortable\App\WinMerge\WinMergeU.exe %1 %2
然後,我設置了extdiff以使用此批處理文件作爲我的extdiff程序。這是有效的,但我發現當它響應%cd%時,它就像預期的那樣只是c:\,而不是c:\ temp。我已經驗證過extdiff是在臨時目錄中創建臨時文件(因爲它應該按照上面的步驟1;類似於c:\ temp \ extdiff.xxxxxx \ someFolder.someChangesetID \ file.ext),所以我知道它是查看這些目錄。在調用WinMerge之前,它沒有正確地改變它們,所以當打開WinMerge時,它看不到臨時文件(因爲它不在正確的工作目錄中)。
這基本上就是我卡住的地方。我不知道還有什麼要離開這裏。我想的只是把
cd %tmp%
在我的批處理文件,但仍然無法抓住它extdiff在創建臨時文件的extdiff.xxxxx \子目錄
總結::-(
編輯:更改批處理文件
@echo off
echo %cd%\extdiff*
echo %1
echo %2
D:\Documents\apps\WinMergePortable\App\WinMerge\WinMergeU.exe %1 %2
似乎使它的工作(注意改變第二行),但它似乎仍然是一個討厭的黑客,而不是它應該如何工作。 : - \
編輯:這裏是我的Mercurial.ini文件:
[ui]
username = Tim Skoch <[email protected]>
editor = D:\Documents\apps\Notepad++\notepad++.exe -multiInst
[extensions]
hgext.graphlog =
hgext.extdiff =
[extdiff]
cmd.winmerge = d:\Documents\apps\mercurial\diff_winmerge.bat
第一段是指WinDiff(我從Windows SDK中識別),而不是WinMerge。 – 2010-07-20 20:55:40
查看「Mercurial.ini」或「.hg \ hgrc」的相關部分將會很有幫助。 – 2010-07-20 20:56:50
我已經添加了我的Mercurial.ini文件;我認爲沒關係,因爲它看起來很好(但是我再次發帖尋求幫助,所以我顯然不是100%自信)。只是CWD沒有得到適當的改變。 – loneboat 2010-07-20 21:32:12