Геррит объединил изменения крюка

Я использую git в качестве системы контроля версий и создал сайт Gerrit для проверки кода. Я хотел бы создать крючок, чтобы сделать следующее:

  • Когда администратор нажимает кнопку «Отправить», файл (с именем version.txt) должен быть изменен.
  • Скрипт должен открыть файл.
  • Найдите следующий текст (где идентификатор может измениться)

    #version Change-Id: Ie1411d50f6beb885bc3d3b7d8c587635e1446c18

  • Замените Change-Id на Change-Id нового патча.

  • Итак, если объединяемый патч имеет Change-Id: I1c25f7b967084008b69a6a8aefa6e3bb32967b82, то после запуска скрипта файл version.txt должен содержать следующую строку:

    #version Change-Id: I1c25f7b967084008b69a6a8aefa6e3bb32967b82

  • Затем хук должен создать новую фиксацию (поскольку сейчас произошло изменение в одном из файлов) и отправить эту последнюю фиксацию в мастер.

Я чувствую, что это было бы возможно с помощью хука change-merged. Я прав?

Заранее спасибо.


person some user    schedule 17.02.2012    source источник


Ответы (2)


Что-то вроде этого:

#!/bin/sh

# See link below for actual command line format
# you may need to make the argument parsing more robust
CHANGE_ID=$2

git clone ${GIT_DIR} /tmp/repo-${CHANGE_ID}
echo "#version Change-Id: ${CHANGE_ID}" > /tmp/repo-${CHANGE_ID}/version.txt
GIT_DIR=/tmp/repo-${CHANGE_ID}/
cd /tmp/repo-${CHANGE_ID}/
git add /tmp/repo-${CHANGE_ID}/version.txt
git commit -m'Auto-updated version'
git push origin master
rm -rf /tmp/repo-${CHANGE_ID}/

http://gerrit-documentation.googlecode.com/svn/Documentation/2.2.2/config-hooks.html#_change_merged

В принципе, я не сторонник такого подхода, и я думаю, что его лучше делать на выходе (например, скрипт «install.sh», который может использовать команды git для извлечения хэша ревизии и генерировать файл version.txt оттуда). Но что-то вроде этого должно направить вас в правильном направлении. Это не проверено, но должно работать.

person Joe    schedule 16.03.2012
comment
Спасибо за ответ. Я попробую и отчитаюсь. Не могли бы вы немного рассказать о скрипте install.sh? - person some user; 18.03.2012
comment
Теперь я вижу проблему: хук change-merged не принимает сообщение коммита в качестве аргумента. Таким образом, было бы невозможно сохранить сообщение фиксации, когда патч, наконец, будет отправлен в ветку. Хм... - person some user; 18.03.2012
comment
О, вы хотите изменить исходный коммит? Если все, что вы хотите сделать, это изменить коммит, вы можете сделать это (git commit --amend -C HEAD) вместо строки git commit -m.. выше. -C HEAD означает использовать сообщение фиксации и автора из версии HEAD и не открывать редактор для запроса сообщения. - person Joe; 10.04.2012
comment
Обновленная ссылка: gerrit.googlesource.com/plugins/hooks/+/refs/heads/master/src/ - person leondepeon; 29.04.2017

Лучше наоборот -

Вместо того, чтобы вносить «неподтвержденные» изменения в фиксацию за спиной Геррита,
поместите git-тег в эту фиксацию.

Дополнительные сведения см. в разделе Git — тегирование< /эм>

person Gonen    schedule 15.06.2017