Управление парой файлов как одним в Mercurial
Я работаю с небольшими двоичными файлами в Mercurial, как опубликовано.
Эти двоичные файлы могут быть выгружены в виде текста, чтобы сделать различия между версиями, но проблема в том, что файлы поставляются парами (например, Form.scx / Form.sct), и я не могу найти способ сказать Mercurial "сделать снимок " (копия во временную папку) другого соответствующего файла, когда я делаю hg ediff
,
2 ответа
По предложению @Ryan, у меня была небольшая партия, предшествующая программе diff:
@echo off
set f1=%1
set f2=%2
::Temporary dir created by hg to copy the snapshot file
set tdir=%~dp1
::Original repository dir
set repo=%~dp2
::Filename extension
set ext=%~x1
::The binary files comes in pairs: scx/sct \ vcx/vct ...
set ex2=%ext:~0,-1%t
::Check if "dumpable" extension
echo %ext% | grep -iE "(vcx|vct|scx|sct|pjx|pjt|frx|frt)" > nul && goto DumpFile
goto diff
:DumpFile
set f1="%tdir%\_Dump1.prg"
set f2="%tdir%\_Dump2.prg"
::Get the pair file from the repository
hg cat %repo%\%~n1%ex2% -o "%~dpn1%ex2%" -R %repo%
::Do the dump, then the diff
MyDumpProgram.exe %1 %f1%
MyDumpProgram.exe %2 %f2%
goto diff
:diff
ExamDiff.exe %f1% %f2%
pause
а затем настройте пакет в%UserProfile%\.hgrc
[extdiff]
cmd.ediff = d:\Utiles\diff2.bat
Просто сделайте быстрый скрипт и установите его как инструмент для extdiff. Я предполагаю, что вы находитесь на Windows, но независимо от того, что эквивалентно PowerShell это:
#!/bin/sh
binary-to-text $1 /tmp/$1.sct
binary-to-text $2 /tmp/$2.sct
diff /tmp/$1.sct /tmp/$2.sct
rm /tmp/$1.sct /tmp/$2.sct
Это создает, сравнивает, а затем удаляет текстовые версии. Вы должны быть осторожны, чтобы не перезаписать, иметь дело с несколькими одновременными вызовами и т. Д.
Затем настройте новую команду для запуска вашего скрипта:
[extdiff]
cmd.mydiff = that_script_above.sh
Тогда вы можете делать такие вещи, как:
hg mydiff
В идеале у вас есть только исходный формат бонуса в репозитории, а не текстовый формат, так как вы не должны хранить сгенерированные элементы в репо - потому что, если вы обновляете один, но не другой, у вас несогласованное состояние. Создание сопоставимых текстовых файлов по запросу - лучший способ.