Following system colour scheme - Python 增强提案 Selected dark colour scheme - Python 增强提案 Selected light colour scheme - Python 增强提案

Python 增强提案

PEP 512 – 从 hg.python.org 迁移到 GitHub

作者:
Brett Cannon <brett at python.org>
讨论列表:
Core-Workflow 列表
状态:
最终
类型:
流程
创建日期:
2015年1月17日
修订历史:
2016年1月17日,2016年1月19日,2016年1月23日

目录

注意

CPython 的开发流程已于 2017 年 2 月 10 日迁移到 https://github.com/python/cpython

摘要

本 PEP 概述了将 Python 的开发流程从托管在 hg.python.org [1] 上的 Mercurial [3] 迁移到 GitHub [2] 上的 Git [4] 所需的步骤。满足本 PEP 的最低目标应允许 Python 的开发流程像目前一样高效,而满足其扩展目标则应改进其现状。

基本原理

2014 年,很明显 Python 的自定义开发流程正在成为障碍。例如,对于外部贡献者提交最终被提交的错误修复,基本步骤如下:

  1. 在 bugs.python.org [5] 上为错误打开一个问题。
  2. 从 hg.python.org [1] 中检出 CPython 源代码。
  3. 进行修复。
  4. 上传补丁。
  5. 让核心开发者使用我们分叉的 Rietveld 代码审查工具 [6] 审查补丁。
  6. 下载补丁以确保它仍然可以干净地应用。
  7. 手动运行测试套件。
  8. 根据需要更新 NEWSACKS 和“更新内容”文档
  9. 拉取更改以避免合并冲突。
  10. 手动提交更改。
  11. 如果更改是针对错误修复版本,则合并到正在开发的分支中。
  12. 再次手动运行测试套件。
  13. 提交合并。
  14. 推送更改。

这对核心开发者来说是一个非常繁重的手动流程。即使在简单的情况下,您也可能只能跳过代码审查步骤,因为您仍然需要构建文档。这导致补丁在问题跟踪器中滞留,因为核心开发者无法足够快地处理积压工作以跟上提交速度。反过来,这导致了一个副作用问题,即由于缺乏关注而导致的挫败感,从而阻碍了外部贡献,这对没有公司支持的开源项目来说是一个危险的问题,因为它与项目拥有可行的未来背道而驰。虽然允许将补丁上传到 bugs.python.org [5] 对外部贡献者来说可能很简单,但对于核心开发者来说,使用它却慢且繁重。

因此,在 2014 年底做出了迁移到新开发流程的决定。发出了请求,要求发布提出新工作流程的 PEP,最终导致了两个 PEP:PEP 481PEP 507,分别提出了 GitHub [2] 和 GitLab [7]

2015 年断断续续地花在处理这些提案和试图在核心工作流程邮件列表 [8] 中找出它们彼此之间差异的细节上。2015 年的 PyCon US 也表明,社区对我们的流程感到有些沮丧,原因包括新贡献者的认知负担以及核心开发者查看补丁所需的时间(例如,参见 Guido van Rossum 在 2015 年 PyCon US 上的主题演讲结尾 [9])。

2016 年 1 月 1 日,Brett Cannon 做出了将开发流程迁移到 GitHub 的决定。选择 GitHub 的主要原因是 [10]

  • 维护自定义基础设施一直是志愿者们的负担(例如,当前正在使用一个未维护的、自定义的分叉的 Rietveld [6])。
  • 自定义工作流程非常耗费核心开发者的时间(没有构建足够的自动化工具来帮助支持它)。
  • 自定义工作流程阻碍了外部贡献者(由于需要花费时间来熟悉 CPython 本身独有的开发流程,因此成为进入壁垒)。
  • 除了 GitLab 是开源的之外,没有其他功能将 GitLab 与 GitHub 区分开来。
  • 核心开发者和外部贡献者对 GitHub 的熟悉程度远高于 GitLab。
  • 我们的 BDFL 偏好 GitHub(他将是第一个告诉你他的意见不应该起作用的人,但做出决定的那个人认为,BDFL 对自己编程语言的工作流程感到舒适非常重要,以鼓励他继续参与)。

甚至已经有一个非官方的 logo 来代表迁移到 GitHub [22]

此次迁移的首要目标是改进开发流程,使其能够让核心开发者从外部贡献提交开始,通过所有步骤,最终在使用 WiFi 的平板电脑上的浏览器中提交贡献(这并不意味着 GitHub 的默认工作流程)。最终解决方案还将允许外部贡献者即使选择不使用 GitHub 也可以贡献(尽管无法保证功能奇偶性)。

需要迁移的仓库

虽然 hg.python.org [1] 托管了许多仓库,但只有五个关键仓库需要迁移

  1. devinabox [12](已完成)
  2. benchmarks [11](已跳过)
  3. peps [13](已完成)
  4. devguide [14](已完成)
  5. cpython [15]

devinabox 仓库是仅代码仓库。peps 和 devguide 仓库涉及网页的生成。cpython 仓库对与 bugs.python.org [5] 集成有特殊要求。

迁移计划

迁移计划根据迁移需要迁移的仓库部分中列出的仓库所需内容分为几个部分。完成每个部分中概述的要求应解除相关仓库迁移的阻碍。预计各部分将按顺序完成,但不一定要求在同一部分内完成。

仅代码仓库的要求

完成本部分中的要求将允许 devinabox 仓库迁移到 GitHub。

创建“Python核心”团队

为了管理权限,将作为 python 组织 [16] 的一部分创建“Python核心”团队。任何迁移的仓库都将添加“Python核心”团队,并授予其写入权限 [17]。任何以前有权在 hg.python.org 上管理 SSH 密钥的人员都将成为“Python核心”团队的团队维护者。

定义将 Mercurial 仓库迁移到 Git 的命令

由于迁移到 GitHub 也意味着迁移到 Git [4],因此我们必须确定将运行哪些工具和命令来将 Mercurial 仓库转换为 Git。专门为此迁移开发的工具托管在 https://github.com/orsenthil/cpython-hg-to-git

CLA 执行

任何开源项目的一个关键部分是确保其源代码可以获得适当的许可。这需要确保所有做出贡献的人员都已签署了贡献者许可协议 (CLA) [18]。到目前为止,CLA 签署的贡献代码的执行一直由核心开发者检查用户在 bugs.python.org [5] 上的用户名旁边是否有 * 来执行。在此迁移中,计划从自动检查和执行贡献者签署 CLA 开始。

在 bugs.python.org 中添加 GitHub 用户名支持

为了将 CLA 签署的跟踪置于 PSF 的直接控制之下,将通过将该事实标记为某人 bugs.python.org 用户资料的一部分来继续跟踪谁签署了 PSF CLA。这意味着需要在某人的 bugs.python.org [5] 帐户和他们的 GitHub 帐户之间建立关联,这将通过用户资料中的一个新字段来完成。这隐含地要求贡献者需要一个 GitHub [2] 和 bugs.python.org 帐户才能签署 CLA 并通过 GitHub 贡献。

提供了一个 API 用于查询 bugs.python.org,以查看 GitHub 用户名是否对应于已签署 CLA 的人员。例如,向 http://bugs.python.org/user?@template=clacheck&github_names=brettcannon,notanuser 发出 GET 请求,将返回一个 JSON 字典,其中包含请求的用户名的键,如果他们已签署 CLA,则值为 true,如果他们未签署,则值为 false,如果未找到相应的 GitHub 用户名,则值为 null

一个执行 CLA 签署的机器人

通过将某人的 GitHub 帐户与其 bugs.python.org [5] 帐户关联起来(该帐户包含有关某人是否已签署 CLA 的数据),机器人可以监控 GitHub 上的拉取请求,并指示贡献者是否已签署 CLA。

如果用户已签署 CLA,则机器人会向问题添加一个正标签以指示拉取请求没有 CLA 问题(例如,一个表示“已签署 CLA”的绿色标签)。如果贡献者未签署 CLA,则会向拉取请求添加一个负标签,并使用 GitHub 的状态 API 阻止拉取请求(例如,一个表示“未签署 CLA”的红色标签)。如果贡献者缺少 bugs.python.org 帐户,也将使用负标签。在正负两种情况下都使用标签,可以提供一个回退信号,以防机器人发生故障,从而防止潜在的误报或漏报。它还允许通过简单地移除与 CLA 相关的标签来轻松重新触发机器人(这与使用 GitHub 状态检查 [40] 形成对比,后者仅在代码更改时触发)。

由于不存在满足我们需求的预先存在的机器人,因此它将托管在 Heroku [39] 上,并编写为针对 Python 3.5,以作为异步编程的展示。机器人的代码托管在 Knights Who Say Ni 项目 [41] 中。

将旧仓库设为只读

在现已过时的 Mercurial 存储库中的 .hg/hgrc 文件的 [hooks] 部分中更新

pretxnchangegroup.reject = echo " * This repo has been migrated to github.com/python/peps and does not accept new commits in Mercurial!" 2>&1; exit 1

将使存储库变为只读。

cpython 仓库的要求

显然,目前托管在 hg.python.org [1] 上最活跃和最重要的存储库是 cpython 存储库 [15]。由于其重要性和高频使用,与本 PEP 中提到的其他存储库相比,它在迁移到 GitHub 之前需要更多工具。

记录提交拉取请求的步骤

在选择新的开发工作流的过程中,我们决定需要一个线性历史记录。人们更喜欢使用单个提交来表示单个更改,而不是让一组不相关的提交导致一个表示单个更改的合并提交。这意味着 GitHub 拉取请求中的便捷“合并”按钮将仅执行压缩提交,而不是合并提交。

还将编写第二组推荐的命令,用于从上传到 bugs.python.org [5] 的补丁文件中提交贡献。这显然有助于保持线性历史记录,但需要对其进行修改,以便对补丁作者进行归属。

将作为指导核心开发人员的命令的确切序列是一个未解决的问题: 将拉取请求提交到 cpython 的 Git CLI 命令

将拉取请求链接到问题

历史上,外部贡献是通过问题附加到 bugs.python.org [5] 上的,因为所有外部贡献都以文件的形式上传。对于由直接提交更改的核心开发人员提交的更改,在消息开头的提交消息中指定问题编号的格式为 Issue #,会导致将一条评论发布到问题中,并将链接指向提交。

将拉取请求链接到问题

需要在拉取请求和问题之间建立关联,以跟踪何时提出了修复方案。关联需要是多对一的关系,因为可能需要多个拉取请求才能解决一个问题(从技术上讲,它应该是多对多的关联,因为当一个修复方案解决了多个问题时,但这种情况相当罕见,并且可以使用问题跟踪器上的 Superseder 字段将问题合并为一个)。

拉取请求和问题之间的关联将基于检测问题编号来完成。如果在拉取请求上的消息标题或正文中指定了问题,则将在 bugs.python.org [5] 上建立连接。将向拉取请求发出一些可见的通知(例如,标签或消息),以通知已成功建立关联。

如果提交了更改,则通知问题

一旦提交完成,相应的 issue 应该更新以反映这一事实。无论提交来自拉取请求还是直接提交,这都应该有效。

更新链接服务以将提交 ID 映射到 URL

目前,您可以使用 https://hg.python.org/lookup/ 和来自 cpython 存储库 [15] 的 Subversion 或 Mercurial 副本的修订版 ID 来重定向到 Mercurial 存储库中该修订版的 URL。需要更新 URL 重写器,使其重定向到 Git 存储库并支持为 Git 存储库创建的新修订版 ID。

最可能的方案是在迁移发生后静态地知道所有 Mercurial changeset 编号。然后将更新查找代码,使其接受长度为 7 到 40 个十六进制数字的哈希值。任何长度为 12 或 40 的十六进制数都将与 Mercurial changeset 编号进行比较。如果数字不匹配或长度在 7 到 40 之间,则将假定它是一个 Git 哈希值。

bugs.python.org 提交编号重写器 也需要更新,使其接受短至 7 位的哈希值,因为 Git 将匹配长度为 7 位或更长的哈希值。

弃用 sys._mercurial

一旦 Python 不再保存在 Mercurial 中,则需要将 sys._mercurial 属性更改为返回 ('CPython', '', '')。将添加一个等效的 sys._git 属性,它满足相同的用例。

更新开发指南

devguide 需要更新有关新工作流的详细信息。在迁移实际发生之前,大部分工作很可能在单独的分支中进行。

更新 PEP 101

发布流程将根据需要进行更新。

可选的计划功能

一旦 cpython 存储库 [15] 迁移完成,所有存储库都将迁移到 GitHub [2],并且开发流程应与迁移前处于相同水平。但迁移的一个关键原因是改进开发流程,使其比以往任何时候都更好。本节概述了一些关于如何改进事物的计划。

应该提到,bugs.python.org [5] 的整体功能规划(包括与本次迁移无关的计划)在其自己的 wiki 页面 [23] 上进行跟踪。

处理 Misc/NEWS

传统上,Misc/NEWS 文件 [19] 对于跨越 Python 版本的更改来说一直存在问题。通常,在例如仅在 Misc/NEWS 文件中提交 3.5 和 3.6 之间的更改时会出现合并冲突。事实上,这种情况非常普遍,以至于 devguide 中的示例说明明确提到了如何解决 Misc/NEWS 文件中的冲突 [21]。作为我们工具现代化的一部分,使用 Misc/NEWS 文件将得到简化。

计划的方法是为每个新闻条目使用一个单独的文件,其中包含该条目的文本。在这种情况下,每个功能版本都将有自己的新闻条目目录,并且将在该目录中创建一个单独的文件,该文件要么以其关闭的问题命名,要么以时间戳值命名(这可以防止冲突)。跨分支的合并将没有问题,因为新闻条目文件仍将具有唯一的名称,并且位于包含修复程序的最新版本的目录中。一个脚本将收集所有新闻条目文件,无论它们位于哪个目录,并创建一个合适的新闻文件(可以忽略发布目录,因为文件的存在本身就足以表示该条目属于该发布版本)。分类可以通过新条目文件本身的关键字来完成,也可以通过在每个发布目录中使用表示每个新闻条目分类的子目录来完成(或者可以删除新闻条目的分类,因为关键信息由组织好的“新增功能”文档捕获)。这种方法的好处是它将更改与实际更改的代码保持在一起。它还将消息与引入更改的提交相关联。对于通过 CLI 进行的提交,可以提供一个脚本帮助生成文件。在机器人驱动的场景中,合并机器人可以有一种方法来指定特定的新闻条目,并在其扁平化的提交中创建文件(同时很可能也支持在未指定特定新闻条目时使用提交消息的第一行)。如果使用基于 Web 的工作流,则可以使用状态检查来验证拉取请求中是否存在新的条目文件,以提醒缺少该文件。之前已为 Mercurial 工作流编写了此方法的代码,网址为 http://bugs.python.org/issue18967。社区中也有一些工具,例如 https://pypi.python.org/pypi/towncrierhttps://github.com/twisted/newsbuilderhttp://docs.openstack.org/developer/reno/

2016 年 9 月的 Python 核心开发人员冲刺讨论导致了这一决定,与本 PEP 的 Rejected Ideas 部分中概述的被拒绝的方法相比。在各种选项中,单独文件方法似乎在灵活性与潜在工具之间取得了正确的平衡,同时解决了推动问题。

这项工作正在 https://github.com/python/core-workflow/issues/6 上进行跟踪。

处理 Misc/ACKS

传统上,Misc/ACKS 文件 [20] 是手动管理的。但是,由于 Git 支持每个提交的 author 值和 committer 值,因此提交的作者身份可以成为代码本身历史的一部分。

因此,手动管理Misc/ACKS将成为可选操作。我们将编写一个脚本,收集所有作者和提交者姓名,并将它们合并到Misc/ACKS中,所有姓名都列在迁移到 Git 之前。运行此脚本将成为发布流程的一部分。

该脚本还应生成自上次执行以来所有贡献者的列表。这将允许列出对特定版本做出贡献的人员,以便可以明确地感谢他们。

此工作正在 https://github.com/python/core-workflow/issues/7 进行跟踪。

创建 https://git.python.org

就像 hg.python.org [1] 目前指向 Python 的 Mercurial 仓库一样,git.python.org 应该对 Git 仓库执行等效操作。

拉取请求数据的备份

由于 GitHub [2] 将用于代码托管和代码审查,因此需要备份这两项内容。在代码托管的情况下,备份是隐式的,因为所有非浅层 Git [4] 克隆都包含仓库的完整历史记录,因此将存在许多仓库备份。

代码审查历史记录没有与仓库本身相同的隐式备份机制。这意味着应该每天备份代码审查历史记录,以防止 GitHub 出现任何问题时丢失。它还有助于保证从 GitHub 迁移到其他代码审查系统是可行的,即使 GitHub 突然消失。

生成 cherry-pick 拉取请求的机器人

由于已决定使用 cherry-pick 而不是分支的前向合并,因此拥有一个机器人来根据 cherry-pick 为影响多个分支的任何拉取请求生成拉取请求将很方便。最可能的方案是一个机器人,它监视应用了关键标签的已合并拉取请求,这些标签描绘了应将拉取请求 cherry-pick 到哪些分支。然后,该机器人将为每个标签生成 cherry-pick 拉取请求,并在创建拉取请求时删除标签(这允许在自动 cherry-pick 失败时轻松检测)。

此工作正在 https://github.com/python/core-workflow/issues/8 进行跟踪。

拉取请求提交队列

这将线性应用已接受的拉取请求,并通过运行测试套件并回滚提交来验证提交之间是否没有干扰,如果测试运行失败。为了帮助加快测试速度,自上次测试运行以来提交的所有补丁可以在单个测试运行下一次应用,因为乐观的假设是这些补丁将协同工作。将需要某种机制来重新运行测试以防测试不稳定,无论是删除“测试失败”标签,还是核心开发人员的 Web 界面来触发另一个测试事件等。

可以从预先存在的机器人(例如 Homu [31] 或 Zuul [32])中获取机器人的灵感或基础。

为了向该机器人发出命令而赋予它的名称是一个悬而未决的问题:命名机器人

一个 CI 服务

有各种 CI 服务为托管在 GitHub [2] 上的开源项目提供免费支持。在尝试了几种 CI 服务后,我们决定使用 Travis [33]

Python 当前的 CI 服务是 Pypatcher [38]。可以在 IRC 中发出请求,尝试来自 bugs.python.org [5] 的补丁。结果可以在 https://ci.centos.org/job/cPython-build-patch/ 查看。

此工作正在 https://github.com/python/core-workflow/issues/1 进行跟踪。

测试覆盖率报告

获得 Python 标准库的最新测试覆盖率报告将非常有益,因为生成此类报告可能需要相当长的时间。

有一些预先存在的服务为开源项目提供免费的测试覆盖率。最后,我们选择 Codecov [37] 作为最佳选择。

此工作正在 https://github.com/python/core-workflow/issues/2 进行跟踪。

通知拉取请求评论的问题

当前的开发流程不包括在 Rietveld [6] 上留下审查评论时在 bugs.python.org [5] 上通知问题。修复这一点会很好,这样人们就可以只订阅 bugs.python.org 上的评论,而不是 GitHub [2],并且仍然知道 GitHub 上何时发生与相关拉取请求上的审查评论相关的事情。目前的思路是在一段时间(例如 15 或 30 分钟)内至少有一条审查评论时,将评论发布到 bugs.python.org 上的相关问题(尽管 GitHub 现在支持 审查,因此时间方面可能是不必要的)。这可以降低接收 GitHub 和 bugs.python.org 电子邮件通知的人员的电子邮件数量,同时仍然确保仅关注 bugs.python.org 的人知道何时可能需要处理审查评论。

允许 bugs.python.org 使用 GitHub 作为登录提供程序

截至目前,bugs.python.org [5] 允许用户使用 Google、Launchpad 或 OpenID 凭据登录。将其扩展到 GitHub 凭据会很好。

用于重新生成 Web 内容的 Web Hook

位于 https://docs.pythonlang.cn/https://docs.pythonlang.cn/devguidehttps://pythonlang.cn/dev/peps/ 的内容都源自保存在要作为此迁移的一部分而移动的仓库之一中的文件。因此,在基于这些文件更改的文件时,设置适当的 Webhook 以触发重建相应的 Web 内容会很好,而不必等待例如 cron 作业触发。

如果文档是一个 Sphinx 项目,则可以部分解决此问题,因为该站点可以在 Read the Docs 上拥有一个非官方镜像,例如 http://cpython-devguide.readthedocs.io/

此工作正在 https://github.com/python/core-workflow/issues/9 进行跟踪。

将文档的某些部分拆分到其自己的仓库中

虽然 https://docs.pythonlang.cn 上的某些文档部分会随着代码而更改,但其他部分相当静态,并且没有与 CPython 代码本身紧密绑定。文档的以下部分适合这种缓慢变化、松散耦合的类别

这些文档部分可以分解成它们自己的仓库,以简化它们的维护,并扩大对它们的提交权限,以方便它们的维护。

还建议拆分 新增功能 文档。这需要确定是否可以开发一个工作流程,在该工作流程中,忘记更新新增功能会很困难(可能通过添加到 PR 的标签,例如“需要新增功能”)。

Git 仓库的备份

虽然没有必要,但最好拥有各种 Git 仓库的官方备份以进行灾难防护。这将由 PSF 基础设施委员会决定这是否值得或不必要。

识别潜在的新核心开发者

Python 开发团队长期以来一直有选择新核心开发人员的指南。指南的关键部分是,一个人需要贡献多个已接受的补丁,并且这些补丁的质量和大小足以证明他们了解 Python 的开发流程。可以编写一个机器人来跟踪补丁接受率并生成报告,以帮助识别值得考虑成为核心开发人员的贡献者。这项工作甚至不一定需要 GitHub 集成,只要所有 Git 提交中的提交者字段填写正确即可。

工作正在 https://github.com/python/core-workflow/issues/10 进行跟踪。

状态

迁移 devinabox [12] 仓库的要求

需要更新构建步骤的仓库

cpython 仓库[15]

必需

可选功能

未解决的问题

对于本 PEP 来说,开放的 issue 指的是需要决定如何处理或解决某个问题。开放的 issue 不包括协调问题,例如谁来编写特定的代码段。

hg.python.org 的命运

随着代码仓库迁移到 Git [4],不再需要技术上保持 hg.python.org [1] 运行。话虽如此,社区中的一些人希望它能够继续作为 Git 仓库的 Mercurial [3] 镜像。其他人表示他们仍然希望有一个镜像,但希望使用 Git。

由于维护 hg.python.org 没有必要,因此 PSF 基础设施委员会将决定是否愿意花费时间和资源来保持其运行。他们还可以选择是否希望在 PSF 基础设施上托管 Git 镜像。

根据做出的决定,其他辅助仓库要么被迫迁移,要么可以选择继续留在 hg.python.org 上。

用于将拉取请求提交到 cpython 的 Git CLI 命令

由于 Git [4] 可能是核心开发人员使用的新版本控制系统,因此需要记录人们期望运行的命令。这些命令还需要在保留线性历史记录的同时,正确地归属给拉取请求作者。

当处理上传到 bugs.python.org [5] 的补丁文件时,还需要另一组命令。这里将隐式保留线性历史记录,但需要确保保留/添加归属。

命名机器人

由于命名可能会导致无限的争论,Brett Cannon 将选择各种机器人的最终名称(机器人本身的项目名称可以是任何名称,这纯粹是为了在向机器人发出命令或帐户名称时使用的名称)。名称必须来自 Monty Python,这很合适,因为 Python 就是以这个喜剧团体命名的。

被拒绝的想法

分离 Python 2 和 Python 3 仓库

讨论过是否需要为 Python 2 和 Python 3 创建单独的仓库。想法是这将缩小整体仓库的大小,这对互联网连接缓慢或带宽上限较小的人有利。

最终,人们决定从逻辑上讲,只需将所有 CPython 的历史记录保存在单个仓库中更为简单。

首先在 bug 修复分支中提交多版本更改

由于当前的开发流程首先在最旧的分支中提交更改,然后合并到默认分支,因此出现了是否应该延续此工作流程的问题。最终,人们决定在最新分支中提交更改,然后将更改 cherry-pick 到旧分支中将是最好的方法,因为大多数人会本能地使用最新分支进行工作,并且在使用 Git [4] 时,这是一种更常见的工作流程。

Cherry-pick 也更适合于浏览器中的机器人工作流程。在合并向上方案中,如果您请求机器人进行合并并且失败了,那么如果您仍然允许主提交,则必须立即解决合并冲突,否则您需要推迟整个提交,直到所有合并都可以处理。使用 cherry-pick 工作流程,可以在推迟合并失败的 cherry-pick 的同时继续进行主提交。这可能允许将管理冲突合并的工作分散开来。

最后,cherry-pick 应该有助于避免合并竞争。当前,当进行跨分支的工作时,需要在旧分支中提交更改,可能推送到代表 default 分支的另一个克隆,合并更改,然后推送到上游。Cherry-pick 应该将此解耦,以便您不必急于进行多分支更改,因为 cherry-pick 可以单独完成。

从提交日志中派生 Misc/NEWS

作为围绕 处理 Misc/NEWS 的讨论的一部分,有人建议从提交日志本身派生该文件。在这种情况下,提交消息的第一行将被视为表示更改的新闻条目。将使用一些启发式方法来确定更改是否需要新闻条目,例如,是否列出了 issue 编号。

这个想法已被拒绝,因为一些核心开发人员更喜欢编写独立于提交消息的新闻条目。理由是提交消息的第一行与新闻条目的第一行在简洁性、应该说些什么等方面有不同的要求。

从 bugs.python.org 派生 Misc/NEWS

一个被拒绝的 NEWS 文件问题的解决方案是在 bugs.python.org [5] 上指定条目。这意味着标记为“已解决”的 issue 只有在 issue 跟踪器中的“新闻”字段中添加新闻条目后才能关闭。将新闻条目与 issue 关联的好处是,它确保所有值得新闻条目的更改都有相应的 issue。它还使新闻条目的分类变得自动化,这要归功于 issue 的“组件”字段。issue 的“版本”字段还将新闻条目与受影响的 Python 版本相关联。将编写一个脚本来查询 bugs.python.org 以获取发布的相关新条目,并生成需要检入代码仓库的输出。这种方法与更改是由 CLI 还是机器人完成无关。一个缺点是,通过将实际更改的提交和新闻条目存储在不同的地方(在本例中为 GitHub 和 bugs.python.org),它们之间存在脱节。这意味着进行提交后,需要记住返回到 bugs.python.org 添加新闻条目。

参考文献


来源:https://github.com/python/peps/blob/main/peps/pep-0512.rst

上次修改时间:2023-09-09 17:39:29 GMT