Инкрементное развертывание из сценария оболочки - PullRequest
2 голосов
/ 18 июня 2010

У меня есть проект, где я вынужден использовать ftp как средство развертывания файлов на работающем сервере. Я работаю на Linux, поэтому я взломал bash-скрипт, который делает резервную копию содержимого ftp-сервера, удаляет все файлы на FTP и загружает все свежие файлы из хранилища Mercurial. (и заботится о загруженных пользователем файлах и папках, а также вносит изменения после развертывания и т. д.)

Работает хорошо, но проект начинает становиться достаточно большим, чтобы сделать процесс развертывания слишком долгим.

Я бы хотел изменить скрипт, чтобы посмотреть, какие файлы были изменены, и только развернуть измененные файлы. (резервная копия в порядке, атм как есть)

Я использую Mercurial в качестве VCS, поэтому моя идея состоит в том, чтобы как-то запросить измененные файлы между двумя ревизиями из него, перебрать измененные файлы, и загрузите каждый измененный файл, и удалите каждый удаленный файл.

Я могу использовать hg log -vr rev1:rev2, и из вывода я могу вырезать измененные файлы с помощью grep / sed / etc.

Две проблемы:

Я слышал ужасные истории о том, что парсинг вывода ls приводит к безумию, поэтому я предполагаю, что то же самое относится и к этому, если я попытаюсь разобрать вывод hg log, переменные будут разбиты на слова и все виды преобразований.

hg log не говорит мне, что файл изменен / добавлен / удален. Различие между измененными и удаленными файлами будет наименьшим.

Итак, каков будет правильный способ сделать это? Я использую yafc в качестве ftp-клиента, на случай, если это необходимо, но хочу переключиться.

1 Ответ

3 голосов
/ 18 июня 2010

Вы можете использовать нестандартный стиль, который сделает разбор за вас.

hg log --rev rev1:rev2 --style mystyle

Затем перенаправьте его на sort -u, чтобы получить уникальный список файлов.Файл "mystyle" будет выглядеть следующим образом:

changeset = '{file_mods}{file_adds}\n'
file_mod = '{file_mod}\n'
file_add = '{file_add}\n'

Мод и шаблоны добавления - это файлы, измененные или добавленные.Существует аналогичный шаблон file_dels и file_del для удаленных файлов.

Кроме того, вы можете использовать hg status -ma --rev rev1-1:rev2, который добавляет M или A передизмененные / добавленные файлы.Вам нужно передать другой диапазон ревизий, на один меньше чем rev1, так как это статус после этой «базовой линии».Удаленные файлы похожи - вам нужен флаг -d и перед каждым удаленным файлом добавляется D .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...