我们的团队正在迁移到 BitBucket。我们的工作流程需要对合并到主源存储库的代码的提交消息进行某些格式化。
每个开发人员都有一个(或多个)分叉。我们的工作流程是将功能/错误分支推送到分支并从该分支创建拉取请求。另外两个开发人员必须在合并之前审查并+1 拉取请求。
当有人单击合并时,BitBucket 会显示一个标题为“合并拉取请求”的对话框。此时,开发人员可以在单击第二个合并按钮之前编辑为合并记录的文本消息。这是需要符合特定格式的消息。
我已阅读此处的文档:https : //scriptrunner.adaptavist.com/latest/bitbucket/StashMergeChecks.html它有几个非常具体的示例,但没有与我们的用例相关的内容。我还没有找到关于如何创建合并检查的良好的通用参考。
我可以编写一个检查特定字符串值的条件:
mergeRequest.message == "My Message"
Run Code Online (Sandbox Code Playgroud)
但我需要它来检查正则表达式。如果消息不符合正则表达式,如何编写预合并挂钩来拒绝合并?
添加
从文档来看,条件检查脚本代码似乎是强制执行此条件的正确位置。脚本可以添加到Repository Settings > SCRIPTRUNNER > Script Merge Checks > Conditional merge check. 有一长串用于条件合并检查的示例,包括以下内容:
经过一些搜索和实验,我发现我可以根据提交消息阻止合并。但到目前为止,我只找到了将整个字符串与常量字符串表达式进行比较的示例。我还没有找到如何在这个比较中使用正则表达式。
在将这个问题推到次要位置几周后,在这里 OP。问题解决了。您可以在不使用插件的情况下根据正则表达式检查合并提交消息。对于那些遇到同样问题的人来说,解决方案在这里。
首先,找到与编写合并检查脚本最相关的对象的文档比本来应该更具挑战性。所以这里有几个当前 6.3.0 API 的链接:
PullRequest - 最后,我的脚本没有使用这个对象,但是拉取请求与合并请求密切相关,其他人可能需要文档。
MergeRequest - 这个对象有一个方法来确定上下文(见下文)。
其次,在两个不同的上下文中的合并检查脚本火灾:(1)当到位桶正试图确定是否应该启用/禁用合并的按钮拉动请求页面,以及(2)当有人点击合并按钮合并请求请求对话框。在第一个上下文中,合并消息为空,因此它无法匹配正则表达式。无论如何,在这种情况下禁用按钮是没有意义的。我真的只希望检查发生在第二个上下文中。所以脚本需要一种方法来区分上下文。
第三,消息对象是一个Java String,因此脚本可以调用该matches()方法来检查消息是否与正则表达式匹配。
在您掌握了所有信息后,编写脚本非常简单:
// the message regex
String pattern = "(PATTERN1|PATTERN2|etc)"
// reject if not dry-run and
// message doesn't match regex
! mergeRequest.isDryRun() &&
! mergeRequest.message.matches(pattern)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6119 次 |
| 最近记录: |