Использование Windows, Mercurial и расширения extdiff (для Mercurial). Я пытался настроить extdiff для использования WinDiff в качестве внешнего инструмента сравнения, но я думаю, что сузил проблему достаточно, чтобы сказать, что проблема заключается еще до того, как я зашел так далеко.
Насколько я понимаю, extdiff просто вызывает вашу программу cmd.winmerge и передает ей необходимые каталоги. Я также работаю над некоторыми предположениями, изложенными здесь (которые могут быть точными, а могут и нет; я только изучаю Mercurial):
который говорит:
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 <[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
Mercurial.ini
или.hg\hgrc
. - person Niall C.   schedule 21.07.2010cmd.winmerge=c:\work\tools\winmerge\winmergeu.exe
, вызывается с помощьюhg winmerge
. Я использую Beyond Compare, и у меня не может быть двух открытых сеансов сравнения одновременно, поэтому вы можете проверить, не осталось ли у вас случайного процесса WinMerge. Кроме того, у меня нет идей, извините. - person Niall C.   schedule 21.07.2010