Git trac post-receive hook

Добавил тут для одного из проектов хук в репозиторий, который закрывает тикеты по коммит-логам.

Неочевидное тут вот что:
закрывать тикеты надо тогда, когда коммит попадает на master (такая у нас модель разработки), соответственно надо отлавливать мержи и в случае мержа просматривать смерженные коммиты.

Upd: Гит оказался умнее меня и сам (rev-list) выводит коммиты со смерженных веток. Поэтому всё намного проще и получившийся скрипт даже и не интересен ни разу.

Скрипт получился такой:

#!/bin/sh
# This script is run after receive-pack has accepted a pack and the
# repository has been updated.  It is passed arguments in through stdin
# in the form
#  oldrev newrev refname
# For example:
#  aa453216d1b3e49e7f6f98441fa56946ddcd6a20 68f7abf4e6f922807889f52bc043ecd31b79f814 refs/heads/master

TRAC_HOOK="/srv/git/hooks/trac-post-commit-hook"
TRAC_DIR="/srv/trac/stand"

procrevs() {
    while read gitrev; do
	"$TRAC_HOOK" -p "$TRAC_DIR" -r "$gitrev"
    done
}

while read OLD NEW NAME;do
	test "$NAME" == "refs/heads/master"||continue
	git rev-list --no-merges "$OLD..$NEW"|procrevs
done

Где TRAC_HOOK – это trac-post-commit-hook из дистрибутива trac, TRAC_DIR – каталог с проектом trac. В самом trac’е должен быть включен и настроен плагин trac-git.

Сбыча мечт

История изменений для конфигов в /etc? С возможностью откатов? И минимумом лишних телодвижений?

Встречайте etckeeper!

Короткая инструкция:

# etckeeper init

инициализирует репозиторий git. После этого

# cd /etc; git commit -m "Initial commit"

для первого чек-ина. И всё. Можно использовать. Можно пользоваться всеми прелестями git’а для клонирования настроек, merge коммитов между репозиториями и прочего. Пакет использует хуки APT для автоматического коммита после установки/обновления/удаления пакетов, а так же metastore для хранения владельца/прав доступа для файлов.

ЗЫ Пока только в sid. Сейчас сделаю бэкпорт для Etch. Уж больно вкусно.
ЗЗЫ Бэкпорт сделал, лежит в репозитории. Кто будет ставить: потребуется еще бэкпортнутый metastore и git-core, из того же репозитория.