菜单

拉取请求审查系统

相关源文件

目的与范围

本文档提供了 Gitea Pull Request 评审系统的全面概述,该系统允许用户在合并之前协同评审代码更改、添加评论、批准更改或请求修改。该系统包括代码差异可视化、行内评论和评审工作流管理。

有关常规 Pull Request 管理(创建、合并等)的信息,请参阅 Issue 和 Pull Request。有关 Pull Request 的 CI/CD 集成信息,请参阅 Actions CI/CD 系统

概述

Pull Request 评审系统是促进协同代码评审的关键组成部分,它通过以下方式实现:

  1. 可视化分支之间的代码更改
  2. 逐行内嵌评论
  3. 带有语法高亮的逐文件差异视图
  4. 评审状态跟踪(已查看文件、批准、更改请求)
  5. 评审摘要和讨论

来源

架构

高层架构

来源

核心组件

Pull Request 评审系统围绕几个协同工作的核心组件构建而成:

  1. Pull Request 控制器:处理与 Pull Request 及其评审相关的 HTTP 请求
  2. Git Diff 服务:生成和处理分支之间的 Git diff
  3. 评审模型:用于存储评审数据的结构体
  4. Diff 渲染系统:用于显示 diff 和收集反馈的 UI 组件

来源

Pull Request 评审流程

评审过程遵循以下步骤:

  1. 用户导航到 Pull Request 的文件视图
  2. 系统获取并显示基准分支和头部分支之间的差异
  3. 评审者可以:
    • 查看文件更改
    • 对特定行添加行内评论
    • 标记文件为已查看
    • 提交评审(批准、请求更改或评论)

来源

查看 Pull Request 文件

当用户访问 Pull Request 时,系统会:

  1. 加载 Pull Request 和 Issue 信息
  2. 获取基准分支和头部分支的提交数据
  3. 使用 git diff 服务生成 diff 信息
  4. 渲染带有语法高亮的 diff 视图
  5. 加载并显示行内评论

这方面的关键控制器函数是 ViewPullFiles,它负责准备和渲染 diff 视图。

来源

评审状态

Pull Request 评审可以有多种状态:

评审状态描述对 Pull Request 的影响
待处理开始评审但未提交无影响
评论无批准/拒绝的通用反馈无影响
已批准更改已批准可能满足合并要求
请求更改合并前请求更改如果需要,则阻止合并
已驳回评审不再相关无影响

来源

Diff 渲染系统

Diff 渲染系统负责:

  1. 生成提交之间的 diff 数据
  2. 处理 diff 以进行显示(语法高亮、行号)
  3. 处理各种文件类型(文本、二进制、图像)
  4. 提供在特定行添加评论的 UI

来源

代码高亮

系统使用语法高亮来提高代码 diff 的可读性

  1. 文件语言根据文件扩展名或内容进行检测
  2. 代码被拆分成行并由高亮器处理
  3. 高亮的代码将以正确的格式显示在 diff 视图中

GetComputedInlineDiffFor 函数计算 diff 行的 HTML 表示,高亮显示行内的特定更改,以便于识别。

来源

文件树导航

对于有多个文件更改的 Pull Request,系统提供了文件树视图

  1. 文件按路径组织成树形结构
  2. 用户可以导航到特定文件
  3. 树显示每个文件的添加/删除统计信息
  4. 文件可标记为已查看

来源

评审过程

添加评论

用户可以对特定代码行添加行内评论

  1. 评论可以添加到添加或删除的行上
  2. 评论可以启动新线程或回复现有评论
  3. 评论支持 Markdown 格式
  4. 评论可以引用其他 Issue 和用户

来源

跟踪已查看文件

系统会跟踪评审者已查看的文件

  1. 文件可以标记为已查看/未查看
  2. 进度跟踪显示已评审的文件数量
  3. 自上次评审以来更改的文件会高亮显示

此功能有助于评审者在评审大型 Pull Request 时跟踪其进度。

来源

提交评审

评审完更改后,用户可以提交他们的评审

  1. 评审可以包含一个摘要评论
  2. 评审可以有状态(批准、请求更改、评论)
  3. 待定评论将随评审一起提交

来源

与 Git 集成

Pull Request 评审系统与 Git 紧密集成,以:

  1. 获取基准分支和头部分支的提交信息
  2. 生成提交之间的 diff
  3. 跟踪文件随时间的更改
  4. 显示 Pull Request 的提交历史

来源

权限与安全

该系统对 Pull Request 评审强制执行权限

  1. 存储库权限决定了谁可以查看/创建/评审 Pull Request
  2. 组织/团队权限可能适用额外的规则
  3. 分支保护规则可以在合并前要求进行评审
  4. 用户可以被指定为必需的评审者

来源

性能考量

实施了几项优化,以高效处理大型 diff

  1. 对于非常大的更改,diff 会进行分页
  2. 文件内容按需加载
  3. 最大显示限制可防止浏览器过载
  4. 大型二进制文件会得到特殊处理

来源

结论

Pull Request 评审系统是 Gitea 协作开发工作流的关键组成部分。它提供了一套全面的工具,用于在合并前评审代码更改、讨论实现方案以及确保代码质量。该系统与 Gitea 的问题跟踪、git 操作和用户管理紧密集成,以提供无缝的代码评审体验。