在修改 SVN 项目设置的过程中,需要输入 SVN 路径的地方推荐使用相对于 SVN 项目根目录的相对路径格式,例如/trunk,/branches/feature

# 基础设置

导航至 SVN 项目 - 设置 - 基础设置,有项目组 master 及以上权限的用户或项目根路径审批人可以对项目名称、项目描述和项目详细进行修改。

# 目录规则

导航至 SVN 项目 - 设置 - 目录规则,可以按目录为维度配置提交设置与代码评审设置。

# 提交设置

在代码提交到 SVN 仓库之前,可以按 SVN 路径设置一些检查项目,对不符合规则的提交加以限制,促进代码质量的提升。

在目录规则列表页可以看到当前项目下所有的目录规则,每个路径下方的标签表示当前路径已配置的提交设置检查项,父目录的提交设置会继承至子目录且子目录不能更改。

在目录规则列表页点击“新增目录规则”,即可为一个新路径配置目录规则,首先需要配置的就是提交设置。

目录路径: 可填写自己有审批人或者写权限的路径,也可以点击输入框旁的“浏览...”打开 SVN 浏览器更加方便地选择路径。

提交设置目前可配置 3 类检查项:

  • 禁止提交代码: 禁止相应路径的代码提交,主要用于产品版本发布时,限制经过测试的分支不能再被修改,提高产品的可靠性。
  • 提交信息中应包含 TAPD 工单: 如果提交信息中不包含--story=xxx,--bug=xxx 或者--task=xxx 格式的 TAPD 工单信息,提交会被拒绝。限制用户要提交的代码必须与某个人 TAPD 需求或者 BUG 相关联,让 SVN 代码提交有的放矢,也可以在 TAPD 需求里直接查看 SVN 关联代码。
  • 必须通过代码评审: 提交信息中应包含--crid=xxx 格式的代码评审单,且代码评审状态应处于通过状态。限制用户要提交代码必须经过代码评审才能提交,同时还可以限制本次提交的所有文件必须包含在 CR 单的变更文件中(可选),经过多人把关的代码会更安全。

# 代码评审设置

SVN 的代码评审设置与 Git 类似,可以参考 Git 代码评审设置

# 网络回调钩子

导航至 SVN 项目 - 设置 - 高级设置 - 网络回调钩子,网络回调钩子(Webhook)就是用户通过自定义回调函数的方式来改变 Web 应用的一种行为,这些回调函数可以由不是该 Web 应用官方的第三方用户或者开发人员来维护,修改。通过网络回调钩子,你可以自定义一些行为通知到指定的 URL 去。比如用户可以通过自己编写一个接口,在 svn 提交前做一些检查等等。

# 网络回调钩子列表

在网络回调钩子列表页可以看到当前项目下所有的网络回调钩子,Webhook Url 下方显示的是触发事件类型,具有路径审批人或者写权限的用户可以测试钩子、查看钩子的发送历史以及删除钩子,点击页面右上角“新增网络回调钩子”可以新增网络回调钩子。

# 新增网络回调钩子

SVN 路径: 可填写自己有审批人或者写权限的路径,也可以点击输入框旁的“浏览...”打开 SVN 浏览器更加方便地选择路径。

Url: 填写自定义的接口地址,相关接口可以通过任何语言进行撰写,只要是相关的 http 接口即可。

秘密令牌: 非必填,如果有指定,触发时发送参数中会带上这个令牌。

触发器: 目前支持两种,提交前(pre-commit)和提交后(post-commit),点击相应触发器旁的“参数描述”可以查看发送的具体参数。

  • 提交前(pre-commit): 如果配置了这个钩子,svn 提交前会调用用户的接口,给用户传入相关输入参数,包括用户名,log,rep_name 等。用户通过判断这些参数的有效性,决定是否可以进行提交,并可以自定义错误信息。钩子参数如下:
输入:
{
  "object_kind": "pre_commit",
  "operation_kind": "update",
  "action_kind": "svn client commit",
  "revision": "19-v1",
  "user_name": "svn_user",
  "user_id": 10000,
  "user_email": "svn_user@example.com",
  "project_id": 10000,
  "repository": {
    "name": "example",
    "description": "",
    "homepage": "https://example.com/example_project",
    "svn_http_url": "https://example.com/example_project",
    "svn_ssh_url": "svn+ssh://example.com/example_project",
    "url": "svn+ssh://example.com/example_project ",
    "visibility_level": 0
  },
  "timestamp": "2023-04-12T19:04:21+0000",
  "message": "update readme",
  "files": [
    "trunk/example.txt"
  ],
  "paths": [
    "trunk/"
  ],
  "push_options": {},
  "push_timestamp": "2023-04-12T11:04:22+0000",
  "total_files_count": 1,
  "create_and_update": null
}

输出:
{
  "status": 200 | 500,
  "message": "ok" | "error",
}
  • 提交后(post-commit): 相关 svn 路径下的代码在提交后会调用相关 post-commit 的接口,可以完成一些通知或者检查功能等。钩子参数如下:
输入:
{
  "object_kind": "post_commit",
  "operation_kind": "update",
  "action_kind": "svn client commit",
  "revision": 20,
  "user_name": "svn_user",
  "user_id": 10000,
  "user_email": "svn_user@example.com",
  "project_id": 10000,
  "repository": {
    "name": "example",
    "description": "",
    "homepage": "https://example.com/example_project",
    "svn_http_url": "https://example.com/example_project",
    "svn_ssh_url": "svn+ssh://example.com/example_project",
    "url": "svn+ssh://example.com/example_project",
    "visibility_level": 0
  },
  "timestamp": "2023-04-12T19:04:23+0000",
  "message": "update readme",
  "files": [
    {
      "type": "U",
      "file": "trunk/example.txt",
      "directory": false,
      "size": -1,
      "insertions": 0,
      "deletions": 0
  }
  ],
  "paths": [
    "trunk/"
  ],
  "push_options": {},
  "push_timestamp": "2023-04-12T11:04:23+0000",
  "total_files_count": 1,
  "create_and_update": null
}

输出:
{
  "status": 200 | 500,
  "message": "ok" | "error"
}

# 网络回调钩子发送历史

点击已创建的 hook 的”发送历史“按钮即可进入到发送历史页面。

可以通过搜索和状态筛选来查找 hook 的历史记录,对于某一项历史记录可以选择”查看详情“与”重放“。

lastUpdate: 12/28/2023, 3:36:17 PM