Я разрабатываю крючок git
post-receive
в Python. Данные предоставляются на stdin
линиями, аналогичными
ef4d4037f8568e386629457d4d960915a85da2ae 61a4033ccf9159ae69f951f709d9c987d3c9f580 refs/heads/master
Первый хэш - это старый-ref, второй - ref-ref, а третий - обновляемая ссылка.
Я хочу разбить это на 3 переменные, а также проверить ввод. Как проверить имя ветки?
В настоящее время я использую следующее регулярное выражение
^([0-9a-f]{40}) ([0-9a-f]{40}) refs/heads/([0-9a-zA-Z]+)$
Это не принимает все возможные имена ветвей, как указано man git -check-ref-format. Например, он исключает ветвь по имени build-master
, которая действительна.
Бонусные знаки
Я действительно хочу исключить любую ветку, которая начинается с "build-". Можно ли это сделать в том же регулярном выражении?
Испытания
Учитывая большие ответы ниже, я написал несколько тестов, которые можно найти в https://github.com/alexchamberlain/githooks/blob/master/miscellaneous/git-branch-re-test.py.
Статус: все приведенные ниже выражения не скомпилируются. Это может указывать на наличие проблемы с моими script или несовместимыми синтаксисами.