Перехватчик коммитов для каждой ветки, для каждого репо в gitolite

Я хочу добавить крючок фиксации, который работает, когда на сервере gitolite/git получено нажатие только для данной комбинации ветки и репо (ветка «кошка» на репо «собака»).

Моя среда: git версии 1.7.4.1,

Что я сделал до сих пор:

  1. Прикоснулся к файлу /home/git/repositories/dog.git/hooks/post-receive.secondary на сервере git/gitolite.

  2. Отредактировал файл с содержимым:

    #!/bin/sh
    #
    refname="$1"
    oldrev="$2"
    newrev="$3"
    if [ "$refname" == "refs/heads/cat" ]
    then
       touch /tmp/test
    fi
    
  3. Установите владельца файла для пользователя «git»

  4. Установите права доступа к файлу на 700

  5. Выполнена фиксация ветки "кошка" репозитория "собака".

Результаты: тестовый файл не создан


person specialsauce    schedule 15.06.2012    source источник
comment
Если вы добавите эхо в свой скрипт, оно будет отображаться? А у вас gitolite v2 или v3?   -  person VonC    schedule 15.06.2012
comment
@VonC - из src/CHANGELOG я полагаю, что использую версию 2.0, но я не могу найти двоичный файл для выполнения, чтобы проверить это. Я проверю команду echo в скрипте и отвечу в ближайшее время   -  person specialsauce    schedule 15.06.2012
comment
Просто: если у вас есть команды 'gl-xxx' в вашем gitolite, это V2.   -  person VonC    schedule 15.06.2012
comment
@VonC - их нет в моем PATH, но есть команды gl-xxx в /home/git/.gitolite/src, да   -  person specialsauce    schedule 15.06.2012
comment
и если я запускаю скрипт вручную, передавая refname, то да, он выполняется нормально, он просто не выполняется или как-то терпит неудачу, когда я фиксирую код в этой ветке в этом репо.   -  person specialsauce    schedule 15.06.2012


Ответы (1)


Если я посмотрю на раздел Gitolite v2 (g2) связывания хуков, только два хука связаны с расширением ".secondary":

  • Хук обновления, потому что он используется во всех репозиториях и имеет решающее значение для контроля доступа gitolite.
  • Хук после обновления, потому что он используется только в репозитории gitolite-admin для «компиляции» конфигурации и так далее.

  • (post-receive задействован только в том случае, если зеркалирование активировано, чего не должно быть в вашей установке gitolite)

Таким образом, вам не нужно объявлять post-receive.secondary, просто post-receive хук в вашем </path/to/gitolite>/hooks/common/, как описано в "Как установить хуки в gitolite< /а>».


специальный соус OP завершается в комментариях:

Мне нужен был хук post-receive в папке репозитория (а не дополнительный), что, я думаю, было основной причиной того, что он не выполнялся.

Единственная другая вещь, которую я изменил в конце, я думаю, это установка разрешений с 700 (что в любом случае должно было быть хорошо?) на 755.
Хук теперь выполняется надежно.

Мне не нужно было запускать скрипт gl-setup. Кроме того, я изменил код присваивания var, как указано выше, на «пока» на STDIN.

person VonC    schedule 15.06.2012
comment
есть символическая ссылка post-receive.mirrorpush, поэтому я использовал имя файла .secondary. Что касается размещения хука в </path/to/gitolite>/hooks/common/, я явно хотел, чтобы этот хук срабатывал только для коммитов в один репозиторий, тогда как я полагаю, что хуки в обычном месте сработают при фиксации в любом репозитории. - person specialsauce; 15.06.2012
comment
@ user1459145 нет, вы должны использовать .secondary из-за post-receive.mirrorpush: документ ясен: поставляется как post-receive.mirrorpush, он переименовывается в «post-receive» и устанавливается как часть настройки зеркалирования: если вы не видите «post-receive» , вы можете создать свой собственный. - person VonC; 15.06.2012
comment
Спасибо тебе за пояснение. Однако я переместил файл в post-receive и выполнил вторую фиксацию, но по-прежнему не вижу созданного временного файла. - person specialsauce; 15.06.2012
comment
@user1459145 user1459145 вы добавили эхо в этот сценарий, просто чтобы посмотреть, был ли он хотя бы вызван? Вы сначала символически связали свой скрипт со всем репозиторием, снова запустив gl-setup? - person VonC; 15.06.2012
comment
спасибо за ваше упорство. эхо есть в этом скрипте, да. Таким образом, правильный дом сценария — </path/to/gitolite>/hooks/common/post-receive, и он будет фактически выполняться для данного репозитория только в том случае, если в этом репо есть символическая ссылка от </path/to/repository>/hooks/post-receive до </path/to/gitolite>/hooks/common/post-receive? - person specialsauce; 15.06.2012
comment
@user1459145 user1459145 да, символическая ссылка должна быть на месте, что gl-setup должно сделать за вас автоматически. - person VonC; 15.06.2012
comment
Я вручную переместил файл и настроил символическую ссылку, как указано выше, и это все равно не сработало. Я ненавижу перенастраивать с помощью gl-setup после прочтения документации по нему, так как похоже, что он никогда не запускался на этом хосте, и я не хочу нарушать какую-либо существующую конфигурацию. - person specialsauce; 15.06.2012
comment
@user1459145 user1459145 интересно: гитолит без gl-настройки. Я не уверен, как это может работать. Я бы рекомендовал настроить gitolite V3 по другому пути (достаточно будет простого клона, за которым следует gitolite setup, как я сделал в github.com/VonC/compileEverything/blob/master/gitolite/) - person VonC; 16.06.2012
comment
спасибо за вашу помощь и настойчивость, эта проблема теперь решена. - person specialsauce; 18.06.2012
comment
@specialsauce: отлично. Есть ли у вас какие-либо подробности о специфике резолюции? Я отредактирую свой ответ и добавлю их, чтобы другие читатели могли извлечь из этого пользу. - person VonC; 18.06.2012
comment
ваш основной ответ был правильным, что мне нужен хук после получения в папке репозитория (а не дополнительный), который, я думаю, был основной причиной того, что он не выполнялся. Единственная другая вещь, которую я изменил в конце, я полагаю, это установка разрешения с 700 (что должно было быть хорошо в любом случае?) до 755. Хук теперь выполняется надежно. Мне не нужно было запускать скрипт gl-setup. Кроме того, я изменил код назначения var, как указано выше, на некоторое время в STDIN. Я не уверен на 100%, какое из этих изменений решило проблему. - person specialsauce; 18.06.2012
comment
@specialsauce: понятно. Я отредактировал ответ, включив в него ваши выводы для большей наглядности. - person VonC; 18.06.2012