我正在git
post-receive
用 Python 开发一个钩子。数据stdin
通过类似于以下的行提供
ef4d4037f8568e386629457d4d960915a85da2ae 61a4033ccf9159ae69f951f709d9c987d3c9f580 refs/heads/master
第一个哈希是旧引用,第二个是新引用,第三列是正在更新的引用。
我想把它分成 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找到。
状态:下面的所有正则表达式都无法编译。这可能表明我的脚本有问题或语法不兼容。