github - 在 GitHub 拉取请求中查找字符串
问题描述
我想构建一个机器人,让您知道某个字符串是否出现在 GitHub 拉取请求中,这样我就可以阻止检查DONT_MERGE_ME
失败的提交,并为开发人员添加有用的评论。
假设您已经提交了如下代码,您不想意外地与您的 PR 合并(例如,您正在四处乱窜)。
const bar = 'some-hack-value'; // DONT_MERGE_ME
给定 PR id,我想知道 PR 中是否还有字符串DONT_MERGE_ME
。然而,
- GitHub 代码搜索 API有很多限制,例如 384KiB 最大文件大小并且只搜索默认分支
- GitHub提交搜索 API仅搜索默认分支
- GitHub 拉取请求搜索 API仅按标题/正文/评论搜索
鉴于上述限制,对于给定的 PR id 和提交,解决这个问题的唯一方法似乎是在 PR 中查找直到该提交的所有提交,下载差异,然后总结它们。
有没有更简单的方法可以用 GitHub API 做到这一点?
解决方案
我推荐的方法是订阅该pull_request
事件。如果payload.action
是opened
or synchronize
,则加载拉取请求的差异并在所有已更改的行中查找字符串。
.diff
您可以通过添加到任何拉取请求 URL来预览拉取请求的差异响应,例如https://patch-diff.githubusercontent.com/raw/gr2m/sandbox/pull/194.diff
找到以 a 开头的行+
并在其中查找您的字符串
如果你使用 JavaScriptoctokit
包,你可以像这样加载一个拉取请求
const { data: diff } = octokit.rest.pulls.get({ owner, repo, pull_number, mediaType: { format: "diff }})
还可以查看TODO GitHub App,它的源代码也是开源的
推荐阅读
- javascript - 将颜色选择器颜色分配给变量并使用 JavaScript 将变量用于 fontcolor
- sqlite - SQLite Versioning. Is it possible to use EXCEPT to show differences between rows where only one column changes?
- .net - 如何使用 Swashbuckle 在生成的 Swagger 文件中生成全局参数?
- python - Python我如何找到一个特定的字符串并将其添加到列表中
- python - 如何将 .txt 文件分离为用于绘图的数据值?
- android - whereEqualTo 支持 HashMap 相等吗?
- java - 使用 AES 加密文件,使用共享密码
- python - 如何从 wordcloud 打印热门单词
- protobuf-net - Protobuf-net 自动生成子类型的字段编号
- excel - 压缩 If-Then-ElseIf