В идеале я ищу способ сделать это без сохранения состояния, поскольку я использую командный файл.
Сценарий состоит в том, что у меня есть хранилище на сервере, который получает запросы от пользователей. Репозиторий также является рабочей копией, которая является источником для вики-страниц (dokuwiki), которые представляют собой просто текстовые файлы в репозитории, по одному на каждую страницу вики.
Поскольку он находится на веб-сервере, рабочая копия никем не используется в интерактивном режиме. Скорее, пакетный файл запускается периодически и выдает соответствующие команды для обновления рабочей копии с последними изменениями, которые были переданы в репозиторий. Как примечание к реализации, он также принимает изменения рабочей копии из вики и пытается объединить и зафиксировать их одним и тем же ходом.
Пакетный файл выглядит так:
@echo off
cd \dokuwiki\data\directory
start /wait cmd.exe /c hg update
start /wait cmd.exe /c hg resolve -m -a
start /wait cmd.exe /c hg resolve -a
start /wait cmd.exe /c hg commit -A -m "Automated commit"
for /r %%x in (*.jpg *.png *.gif) do copy /y "%%x" ..\..\media\directory
Это прекрасно работает для текстовых файлов, но докувики требует, чтобы носители, такие как графика, хранились в другом каталоге, для чего предназначен последний оператор for
.
Обратите внимание, что я не заинтересован в улучшении скрипта до этого момента. Это проверено как наш желаемый способ обновления в этой среде.
Проблема с копией в конце заключается в том, что она копирует все графические объекты независимо от того, изменились они или нет. Очевидно, что было бы лучше копировать только графики, которые изменились. Поскольку со времени последнего обновления в этот репозиторий могло быть несколько нажатий, я хочу идентифицировать и скопировать только те графические объекты, которые изменились с момента последнего обновления этой рабочей копии, то есть в последний раз, когда этот скрипт выполнялся hg update
.
Я не могу придумать интуитивный способ сделать это из рук в руки. Было бы лучше, если бы информацию не нужно было сохранять вручную между запусками скрипта, но об этом не может быть и речи.