LINUX.ORG.RU

Сообщения ivanov17

 

Git-хук при получении изменений в пустой репозиторий

Пытаюсь разобраться с пользовательскими хуками в гите.

Задача состоит в том, чтобы сравнивать текущее состояние ветки с получаемыми изменениями и в случае изменения определённых файлов дальше выполнять что-нибудь нужное.

Соответственно, использую git diff-tree для получения различий в состоянии ветки.

С post-checkout проблем не возникает. Насколько я понимаю он выполняется при клонировании репозитория или переключении ветки, мне он нужен только для первого случая и прекрасно работает.

А вот post-merge срабатывает только в том случае, если репозиторий уже содержит какие-то файлы. Если же изначально был склонирован пустой репозиторий, то когда я наполняю источник и выполняю git pull, этот хук вообще игнорируется.

Проблема в том, что я не могу сказать заранее, будет ли репозиторий склонирован пустым или с каким-то содержимым, так что надо обработать и тот, и другой случай.

Есть ли какой-то хук, который работает при получении изменений в пустой репозиторий, или тут надо думать в какую-то другую сторону?

 , , ,

ivanov17
()

Динамическая генерация юнитов systemd

Захотел реализовать с помощью systemd автоматический запуск скриптов в директории с определённой иерархией при их изменении или добавлении.

Структура директории такая:

test
├── test1
│   └── script.sh
├── test2
│   └── script.sh
└── test3
    └── script.sh

Есть шаблоны test@.service и test@.path. Юниты, созданные по первому шаблону, запускают скрипты по условию ConditionPathExists=|/srv/test/%i/script.sh. Path-юниты следят за состоянием тех же скриптов через PathChanged и при изменении дёргают соответствующие сервис-юниты.

Юниты создаются по шаблонам генератором, который читает указанную директорию, присваивает им имена типа test@test01.service и test@test01.path и делает симлинки в test.service.wants.

Сам test.service просто выполняет /bin/true и позволяет запускать все сгенерированные юниты скопом (хотя, наверное, стоило бы просто использовать .target).

Проблема в том, что генератор создаёт юниты только при загрузке системы или перезапуске демона. Если я захочу добавить новую директорию со скриптом, то запускать его уже будет некому.

В документации сказано прямо, что использовать генераторы для динамических конфигураций — плохая идея. В качестве альтернативы предлагается следующее:

If you need to generate dynamic configuration for other services, do so in normal services you order before the service in question.

На этом месте у меня кончается фантазия, а никаких подробностей маны systemd не сообщают.

По идее нужно бы отслеживать директорию на предмет появления новых файлов, но среди проверок пути для path-юнитов, кажется, нет подходящей. Возможно, что здесь требуются и не они. С другой стороны, хотелось бы избежать перезапуска всех остальных скриптов при добавлении нового, но сам этот скрипт запустить.

Буду благодарен, если кто-нибудь натолкнёт на мысль куда копать дальше. Наверняка ведь упускаю из вида что-то существенное.

 , ,

ivanov17
()

RSS подписка на новые темы