Использование Windows, Mercurial и расширения extdiff (для Mercurial).Я пытался настроить extdiff для использования WinDiff в качестве внешнего инструмента сравнения, но я думаю, что сузил проблему настолько, что могу сказать, что проблема еще до того, как я доберусь до этого.
Из чегоЯ понимаю, что extdiff просто вызывает вашу программу cmd.winmerge и передает ей необходимые каталоги.Я также работаю над некоторыми предположениями, изложенными здесь (которые могут или не могут быть точными; я только изучаю Mercurial):
http://bitbucket.org/tortoisehg/stable/issue/457/multiple-extdiff-threads-in-one-process-causes-side#comment-36216
, который говорит:
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 выше.
При попыткеЧтобы изолировать проблему, я написал командный файл, чтобы посмотреть, что это был за компакт-диск, что передавалось и как именно он передавался.Пакетный файл выглядит следующим образом:
@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.xxxxx \, в котором extdiff создает временные файлы.
В итоге:: - (
РЕДАКТИРОВАТЬ: Изменение пакетного файла на
@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 <my_real@email.address>
editor = D:\Documents\apps\Notepad++\notepad++.exe -multiInst
[extensions]
hgext.graphlog =
hgext.extdiff =
[extdiff]
cmd.winmerge = d:\Documents\apps\mercurial\diff_winmerge.bat