Bitbucket Server API:获取与拉取请求关联的原始文件
Bitbucket Server API: get raw files associated with pull request
情况:对于托管在 Bitbucket 服务器上的存储库,我有一个 webhook 设置,可以在打开拉取请求时向外部服务器发送请求。服务器然后使用 Bitbucket 服务器 API 获取与 pr 关联的所有文件的差异。这工作得很好,因为服务器帐户具有对带有 webhook 设置的 repo 的读取权限。接下来我想做的是获取与拉取请求关联的原始文件。
问题:在另一个用户分叉此回购、进行更改并提交 pr 的情况下,我的服务器没有对该回购的此用户分叉的读取权限,因此对于处于修改状态的文件。
我查看了 Bitbucket Server 文档,但除了从用户存储库中读取外,找不到任何获取原始文件的方法。当 pr 从主 repo 中的某个分支到同一 repo 中的 master 时,这工作正常,因为读取权限问题没有发挥作用。
我认为一个可能的解决方案是使用 diff 以及目前在主存储库中的文件来重新创建文件的修改状态,但我想避免这种情况。
有什么方法可以在不让每个用户都提交 pr 以授予对服务器帐户的读取权限的情况下执行此操作?
谢谢
这在任何地方都没有准确记录,但是一旦打开拉取请求,BitBucket 就会创建几个拉取请求相关的引用。您可能对以下两个感兴趣。
- refs/pull-requests/[PR_ID]/from - 用户源分支
- refs/pull-requests/[PR_ID]/merge - 用户源分支与目标分支合并
因此,您可以使用 refspec 签出其中任何一个(取决于您想要的),这将让您获得所有文件(修改过的和其他文件)。
即
+refs/pull-requests/[PR_ID]/*:refs/remotes/origin/pull-requests/[PR_ID]/*
然后,您可以使用 PR Changes REST API 获取修改文件的路径,并使用这些路径从磁盘(您签出的任何地方)检索文件。
但是,值得注意的是 BitBucket team warns 这些实现仅供内部使用,如有更改,恕不另行通知。但是实施已经 6 年多没有改变。
参考
如果您知道拉取请求中的文件列表,您可以使用 api 简单地获取每个文件的原始内容,例如:
curl -u login:passw https://bitbucket-host:port/projects/PRJ/repos/repo_name/raw/path-to-file/file.txt?at=hjc2d2e95cbf3fb58f50473rtf3267c571180683
其中 'hjc2d2e95cbf3fb58f50473rtf3267c571180683' 是提交 ID。
情况:对于托管在 Bitbucket 服务器上的存储库,我有一个 webhook 设置,可以在打开拉取请求时向外部服务器发送请求。服务器然后使用 Bitbucket 服务器 API 获取与 pr 关联的所有文件的差异。这工作得很好,因为服务器帐户具有对带有 webhook 设置的 repo 的读取权限。接下来我想做的是获取与拉取请求关联的原始文件。
问题:在另一个用户分叉此回购、进行更改并提交 pr 的情况下,我的服务器没有对该回购的此用户分叉的读取权限,因此对于处于修改状态的文件。
我查看了 Bitbucket Server 文档,但除了从用户存储库中读取外,找不到任何获取原始文件的方法。当 pr 从主 repo 中的某个分支到同一 repo 中的 master 时,这工作正常,因为读取权限问题没有发挥作用。
我认为一个可能的解决方案是使用 diff 以及目前在主存储库中的文件来重新创建文件的修改状态,但我想避免这种情况。
有什么方法可以在不让每个用户都提交 pr 以授予对服务器帐户的读取权限的情况下执行此操作?
谢谢
这在任何地方都没有准确记录,但是一旦打开拉取请求,BitBucket 就会创建几个拉取请求相关的引用。您可能对以下两个感兴趣。
- refs/pull-requests/[PR_ID]/from - 用户源分支
- refs/pull-requests/[PR_ID]/merge - 用户源分支与目标分支合并
因此,您可以使用 refspec 签出其中任何一个(取决于您想要的),这将让您获得所有文件(修改过的和其他文件)。
即
+refs/pull-requests/[PR_ID]/*:refs/remotes/origin/pull-requests/[PR_ID]/*
然后,您可以使用 PR Changes REST API 获取修改文件的路径,并使用这些路径从磁盘(您签出的任何地方)检索文件。
但是,值得注意的是 BitBucket team warns 这些实现仅供内部使用,如有更改,恕不另行通知。但是实施已经 6 年多没有改变。
参考
如果您知道拉取请求中的文件列表,您可以使用 api 简单地获取每个文件的原始内容,例如:
curl -u login:passw https://bitbucket-host:port/projects/PRJ/repos/repo_name/raw/path-to-file/file.txt?at=hjc2d2e95cbf3fb58f50473rtf3267c571180683
其中 'hjc2d2e95cbf3fb58f50473rtf3267c571180683' 是提交 ID。