创建新的合并请求线程时引用的 GitLab line_code 是啥

Posted

技术标签:

【中文标题】创建新的合并请求线程时引用的 GitLab line_code 是啥【英文标题】:What is a GitLab line_code as referenced when creating a new merge request thread创建新的合并请求线程时引用的 GitLab line_code 是什么 【发布时间】:2021-05-01 16:52:42 【问题描述】:

我正在尝试使用此端点使用 GitLab api 在文件的某一行上创建关于合并请求的讨论笔记:https://docs.gitlab.com/ee/api/discussions.html#create-new-merge-request-thread

部分负载要求line_code

Attribute Type Required Description
position[line_range][start][line_code] string yes Line code for the start line

当我发布 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",
                    "old_line": null,
                    "new_line": 4
                ,
                "end": 
                    "line_code": "aceba96ffdf13ce4cd4171c0248420cc03108ef0_0_4",
                    "type": "new",
                    "old_line": null,
                    "new_line": 4
                
            
        ,
        "resolvable": true,
        "resolved": false,
        "resolved_by": null,
        "confidential": false,
        "noteable_iid": 3,
        "commands_changes": 
    ,

【问题讨论】:

您能否用您的用例更新您的问题,以使用 API 创建 cmets?在回答您的更新时可能会有所帮助。 【参考方案1】:

行号是hash of the file name + underscore + old line number + underscore + new line number

文档有误。仅当您使用position.line_range 时才需要line_code,这仅在添加跨越多行差异的差异注释时才需要。对于单行差异注释,您无需处理 line_code。所以它不是必需的参数。您可以使用position.old_lineposition.new_line

【讨论】:

【参考方案2】:

这表示文件中您希望出现注释的行。对于合并请求,cmets 可以在代码上或一般讨论中(尽管 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

要在合并请求中为更改的代码添加注释,您可以在此处使用讨论 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

【讨论】:

谢谢!我在原帖中添加了一些额外的细节。

以上是关于创建新的合并请求线程时引用的 GitLab line_code 是啥的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Gitlab 中成功的管道结束时创建合并请求?

Gitlab Issue Tracker and Wiki

如何通过命令行创建 GitLab 合并请求

Gitlab-ci.yml 创建合并请求

如何防止 Gitlab 在分支合并上创建额外的合并提交

为合并请求触发的管道运行应用 GitLab CI/CD 管道更改