2012-02-17 4 views
3

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

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

    #version Change-Id: Ie1411d50f6beb885bc3d3b7d8c587635e1446c18

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

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

    #version Change-Id: I1c25f7b967084008b69a6a8aefa6e3bb32967b82

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

Я чувствую, что это возможно, используя сменное слияние крючок. Я прав?

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

ответ

1

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

#!/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 оттуда). Но что-то вроде этого должно поставить вас в правильном направлении. Это не проверено, но оно должно работать.

+0

Спасибо за ответ. Я попробую и отправлю отчет. Можете ли вы немного рассказать о сценарии 'install.sh'? –

+0

Теперь я вижу проблему: сменой слияния крючок не принимает сообщение commit в качестве аргумента. Таким образом, было бы невозможно сохранить сообщение фиксации, когда патч будет окончательно перенесен в ветвь. Hmmm ... –

+0

О, вы хотите * изменить * оригинал фиксации? Если все, что вы хотите сделать, это изменить фиксацию, вы можете сделать это ('git commit -amend -C HEAD') вместо строки' git commit -m..' выше. «-C HEAD» означает «использовать сообщение фиксации и автора из ревизии HEAD и не открывать редактор для запроса сообщения». – Joe

0

Лучше сделать это наоборот -

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

Для получения более подробной информации см Git - Tagging

Смежные вопросы