繁体   English   中英

如何对 Gitlab URL 进行反向工程以指向合并请求中的某个代码行号

[英]How to reverse engineer a Gitlab URL to point to a certain code line number in a Merge Request

为了将测试管理工具与 GitLab 连接起来,我想在测试管理工具中显示一个 URL 链接,以便为 Z9792E23419583666B1780 中的 MR 中的某个代码行创建注释。

我查看了官方 GitLab API 文档,但没有找到如何在 GitLab 中创建 URL 的解释。

构建最终 URL 的脚本具有以下信息:

  • 合并请求路径
  • 要评论的文件
  • 要注释的文件的代码行

这个想法是:用户可以单击链接,在新的浏览器选项卡上打开 GitLab 页面,其中正确 MR 中的代码注释表单已经打开并指向正确的代码行。

如果我浏览合并请求页面,我分析了 GitLab 中的 URL 是如何变化的。 我的观察:

  1. MR 的通用 URL 如下所示: https://git.company.com/project/group/repository/-/merge_requests/merge_request_iid/
  2. 如果我导航到“更改”选项卡,URL 将更改为: https://git.company.com/project/group/repository/-/merge_requests/merge_request_iid/diffs
  3. If I click on a file in the Changes tab, the URL gets extended by a hash: https://git.company.com/project/group/repository/-/merge_requests/merge_request_iid/diffs#diff-content-00fcae07ce917a6336e839f6582227ddfc5ed59e
  4. 最后可以使用line-version-1_line-version-2引用代码行: https://git.company.com/project/group/repository/-/merge_requests/merge_request_iid/diffs#diff-content-00fcae07ce917a6336e839f65_222227edf65827227ed

这正是我需要的,现在是棘手的部分。 如何获得 hash 值? 我已经将所有其他信息作为脚本的输入参数。 我检查了 API 文档中的“提交”、“差异版本”、“注释”和“视觉审查讨论”,还通过多个请求查询了 API。 但是这些章节都没有描述如何通过 API 查询 hash 值。

任何建议都非常感谢!

谢谢!

hash 不是来自 Git 提交:-(

如何获得 hash 值?

在这种情况下,这可能是一个 GraphQL 组件diffPositionInput

也许在代码中搜索diff-content会更进一步。 例如,请检查这些文件。 特别是javascripts/diffs/components似乎相关:

$ rg --glob='*.{js,vue,rb}' --count 'diff-content' | sort --field-separator=: --key=2n
app/assets/javascripts/deprecated_notes.js:1
app/assets/javascripts/diffs/components/app.vue:1
app/assets/javascripts/diffs/components/diff_content.vue:1
app/assets/javascripts/diffs/components/diff_file_header.vue:1
app/assets/javascripts/diffs/store/actions.js:1
app/assets/javascripts/main.js:1
app/assets/javascripts/merge_conflicts/merge_conflict_resolver_app.vue:1
app/assets/javascripts/notes/components/diff_with_note.vue:1
app/assets/javascripts/vue_shared/components/markdown/suggestion_diff_row.vue:1
app/assets/javascripts/vue_shared/components/notes/system_note.vue:1
spec/features/issues/create_issue_for_single_discussion_in_merge_request_spec.rb:1
spec/features/merge_request/user_reviews_image_spec.rb:1
spec/features/merge_request/user_scrolls_to_note_on_load_spec.rb:1
spec/frontend/diffs/components/diff_file_spec.js:1
spec/frontend/tracking/tracking_spec.js:1
app/assets/javascripts/single_file_diff.js:2
spec/features/expand_collapse_diffs_spec.rb:2
spec/features/merge_request/user_creates_image_diff_notes_spec.rb:2
spec/frontend/diffs/components/diff_file_header_spec.js:2
spec/frontend/vue_shared/components/markdown/suggestion_diff_row_spec.js:2
spec/frontend/notes/components/diff_with_note_spec.js:3
spec/frontend/single_file_diff_spec.js:3
app/assets/javascripts/diffs/components/diff_file.vue:4
spec/features/merge_request/user_resolves_diff_notes_and_discussions_resolve_spec.rb:26

终于找到了我的问题的解决方案:在这个 MR 中,您将找到如何计算 hash 值的解释:https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/7298

#hash_lineA_lineB,其中 hash 是 sha1 编码文件的路径,lineA 和 lineB 是文件中显示的确切更改的行号。 示例:“....../diffs#d84b028799a0d15b64d62a1d547297b47bc4b58e_43_43”

所以我只需要 hash 更改文件的路径 sha1 和 append 我想用 URL 打开的代码行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM