问题描述
我正在尝试使用以下端点使用 GitLab api 在文件的特定行上创建关于合并请求的讨论笔记:https://docs.gitlab.com/ee/api/discussions.html#create-new-merge-request-thread
部分负载要求 line_code
当我发出 POST 时,我得到以下回复:
"message": "400 (Bad request) \"Note {:line_code=>[\"can't be blank\",\"must be a valid line code\"],:position=>[\"is incomplete\"]}\" not given"
这是什么line_code
?它是某种计算值吗?这里的文档相当模糊。
当我为 merge_request 上的所有当前注释发出 GET 时,我可以看到一些注释具有此 line_code
(见下文)。我想弄清楚如何为新笔记创造价值。
{
"id": 89,"type": "DiffNote","body": "4","attachment": null,"author": {
"id": 6,"name": "brian c","username": "bc","state": "active","avatar_url": "https://www.gravatar.com/avatar/f590a9cf57136732dd0cb5z9b1563390?s=80&d=identicon","web_url": "http://gitlab.mycompany.us/thisIsMe"
},"created_at": "2021-01-11T21:46:23.861Z","updated_at": "2021-01-11T21:46:23.861Z","system": false,"noteable_id": 21,"noteable_type": "MergeRequest","position": {
"base_sha": "3bf8094f0d54fc70a66698bd582f25c77243de3b","start_sha": "3bf8094f0d54fc70a66698bd582f25c77243de3b","head_sha": "a10e73cf84eae38286df56f4b58fa221d7eefc44","old_path": "b.txt","new_path": "b.txt","position_type": "text","old_line": null,"new_line": 4,"line_range": {
"start": {
"line_code": "aceba96ffdf13ce4cd4171c0248420cc03108ef0_0_4","type": "new","new_line": 4
},"end": {
"line_code": "aceba96ffdf13ce4cd4171c0248420cc03108ef0_0_4","new_line": 4
}
}
},"resolvable": true,"resolved": false,"resolved_by": null,"confidential": false,"noteable_iid": 3,"commands_changes": {}
},
解决方法
行代码是 hash of the file name + underscore + old line number + underscore + new line number
文档有误。 line_code
仅在您使用 position.line_range
时才需要,它仅用于添加跨越多行差异的差异注释。对于单行差异注释,您不需要处理 line_code
。所以它不是必需的参数。您可以只使用 position.old_line
或 position.new_line
。
它代表文件中您希望注释出现的行。对于合并请求,评论可以是代码或一般性讨论(尽管 API 名称似乎是倒退的)。
要添加一般讨论评论,您可以使用 Notes API:https://docs.gitlab.com/ee/api/notes.html#create-new-merge-request-note。这看起来像这里的评论:https://gitlab.com/gitlab-org/gitlab/-/merge_requests/52673#note_495396729
要向合并请求中更改的代码添加评论,您可以在此处使用 Discussions API:https://docs.gitlab.com/ee/api/discussions.html#create-new-merge-request-thread。此操作具有设置注释应开始的文件路径和行号、注释适用的范围等的选项。这是代码本身的注释示例:https://gitlab.com/gitlab-org/gitlab/-/merge_requests/52673/diffs#2eda52c44979de93f257b305ada778372eacba0b_6_5