Gerrit - предотвратить переопределение патча - PullRequest
0 голосов
/ 22 октября 2018

В компании, в которой я работаю, некоторые пользователи обновляют свои изменения Gerrit с помощью функций веб-интерфейса (например, редактируют содержимое файла), в результате чего появляются новые наборы исправлений.Это просто, вам не нужно редактировать, добавлять git, выполнять git commit и git push ...

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

Gerrit не предотвращает это по умолчанию, что является нормальным, поскольку нет никакой зависимости между наборами исправлений в одном и том же изменении Gerrit (также замечено здесь ).

Есть ли способ реализовать такую ​​вещь, как всегда гарантировать, что пользователь установит последний набор исправлений?Пользовательский хук Gerrit, доступ к проекту ...

Т.е. имеет следующее поведение:

  • Изменение существует: последний набор исправлений равен 1/1
  • Редактировать файлы изВеб-интерфейс: последний набор исправлений 2/2 (локальная копия Git не обновляется)
  • Отредактируйте файлы из неактуальной локальной копии Git и нажмите: отклонено
  • Получитьнабор патчей 2/2, примените модификации и нажмите еще раз: последний набор патчей 3 / 3.

Спасибо, ребята!

1 Ответ

0 голосов
/ 05 ноября 2018

Вы можете реализовать git hook, выполнив следующие действия:

  1. Используйте инструменты команды Gerrit, чтобы узнать последнюю версию набора исправлений.
    Пример: ssh gerrit-server -p port gerrit query -format JSON --current-patch-set change: Change-Id
    Ответ содержит последнюю версию набора исправлений.
    Change-Id может быть извлечен из сообщения о фиксации патча пользователя.
  2. Проверкачто пользовательский коммит является потомком последнего коммита с набором патчей.
  3. Распечатайте сообщение об ошибке и верните ненулевой статус из ловушки, если условие шага 2 не выполнено.

Соединения, подходящие для задачи:

  • Клиентская сторона: предварительное нажатие
  • Серверная сторона: предварительное получение или обновление

Возможно, для ловушек на стороне сервера есть лучший способ реализовать шаг1 (поскольку он выполняется на сервере, к которому он подключается)

...