跳转到主要内容

Mercurial历史记录的灵活进化。

项目描述

Evolve 扩展

此软件包提供了Mercurial的evolve扩展,

更改集进化概念的完整实现仍在进行中。 请订阅evolve-testers邮件列表以了解最新更改。

此扩展

  • 启用了Mercurial核心的“更改集进化”功能,

  • 提供一组命令以分布式方式重写历史记录,

  • 当您的存储库中出现更改集进化的“问题”时,发出各种警告消息,

  • 提供hg evolve命令来处理这些问题,

  • 提高推送和拉取过程中过时标记交换和发现的性能。

文档

我们建议您首先阅读文档。在线版本可在以下位置找到

https://www.mercurial-scm.org/doc/evolution/

文档的源代码可以在docs/中找到。

如何安装

使用Pip

您可以使用pip安装最新发布的版本

$ pip install --user hg-evolve

然后在hgrc中启用它

$ hg config --edit # add these two lines:
[extensions]
evolve =

从源代码

要从源代码安装本地版本

$ hg clone https://www.mercurial-scm.org/repo/evolve/
$ cd evolve
# optionally `hg update <target revision>`
$ pip install --user .

然后在hgrc中启用它

$ hg config --edit # add these two lines:
[extensions]
evolve =

您也可以在不安装evolve的情况下使用它,在这种情况下,您需要提供hgext3rd/evolve/的完整路径,例如

[extensions]
evolve = ~/evolve/hgext3rd/evolve

陷阱

如果您遇到"failed to import extension evolve: No module named 'evolve'"错误,有一些事情需要检查

  • 确保您提供了pip的正确软件包名称(它是hg-evolve),

  • 确保Evolve已安装与您用于运行Mercurial相同的Python版本(hg debuginstall | grep Python)。

扩展目的

本扩展的目标是提供一个合适的地方让与更改集演变相关的代码和概念成熟。在这个扩展中,我们允许编写更灵活的代码,以解锁快速实验和快速迭代。

此外,evolve扩展支持广泛的Mercurial版本,使我们能够接触到更广泛的用户群以获取反馈。该扩展不受Mercurial发布周期的限制,如果需要,可以以更高的速度发布新功能和修复错误。

一旦某个概念被认为已经准备好,其实现就会被移动到Mercurial的核心。成熟期帮助我们更清晰地了解所需的内容。在上游过程中,我们可以使用这个更清晰的画面来清理代码并将其升级到适合核心Mercurial的适当质量。

Python 3支持

从5.2版本开始,Mercurial官方宣布支持Python 3。从9.3.0版本开始,evolve官方支持Python 3.6及以上版本。

Python 2支持

evolve支持Python 2。然而,Mercurial 6.2版本已停止支持它,因此evolve只能在早期版本上运行Python 2。

使用Heptapod CI构建的Debian软件包只安装Python 3的文件,因为它们针对当前的Debian稳定版。

如何贡献

讨论发生在libera IRC网络上的#hg-evolve和#mercurial频道。

请将错误报告在Mercurial的错误跟踪器上(组件:evolution)。

提交补丁的推荐方法是创建https://foss.heptapod.net/mercurial/evolve上的Merge Request。为此,创建一个账户并请求访问权限。您将能够创建基于主题的merge request。

或者,您可以使用patchbomb扩展将电子邮件发送到mercurial devel。请确保在这样做时使用evolve-ext标志。您可以使用以下命令

$ hg email --to mercurial-devel@mercurial-scm.org --flag evolve-ext --rev '<your patches>'

有关补丁描述的指南,请参阅官方Mercurial指南

请记住,在修复错误或添加功能时更新并运行测试。要运行测试,您需要一个Mercurial的工作副本,例如在$HGSRC。

$ cd tests
$ python $HGSRC/tests/run-tests.py

当某些代码块需要应对核心Mercurial中的API更改时,它们应在hg <= x.y (commit hash)格式中添加注释。例如,如果一个函数因为02802fa87b74中引入的更改(首次包含在Mercurial 5.3中)需要另一个代码路径,那么注释应该是

# hg <= 5.2 (02802fa87b74)

请参阅tests/test-check-compat-strings.t。

分支策略

evolve测试高度受核心Mercurial中更改的影响。为了应对这种情况,我们使用命名分支。

有两个主要分支:“stable”和“default”。这些分支上的测试应该能够通过核心Mercurial的相应“default”和“stable”分支。文档是从stable分支的顶端构建的。

此外,我们还拥有兼容性分支来检查Mercurial旧版本的测试。它们是“mercurial-x.y”分支。它们用于应用预期的测试更改,不应在该处进行代码更改。

从核心更改集中更改测试输出时应在其补丁描述中添加以下行

CORE-TEST-OUTPUT-UPDATE: <changeset hash>

格式源配置

Format-source 帮助缓解自动格式化后的合并痛苦。请按照 format-source 代码库中的安装说明进行操作。

然后更新您的每个仓库的配置文件

$ hg config --local --edit # add these lines:
[extensions]
formatsource =

[format-source]
byteify-strings = python3 ~/hg/contrib/byteify-strings.py --dictiter --treat-as-kwargs kwargs opts commitopts TROUBLES --allow-attr-methods
byteify-strings:mode.input = file
byteify-strings:mode.output = pipe

发布清单

  • 使用 contrib/merge-test-compat.sh 将测试兼容性分支进行合并,

  • 确保所有支持的版本上的测试都通过,

  • 确保兼容性分支和稳定分支之间没有代码差异(hgext3rd/内没有差异),

  • 更新所有扩展的 testedwith 变量(删除 ‘.dev0’)

    • hgext3rd/evolve/metadata.py

    • hgext3rd/topic/__init__.py

    • hgext3rd/pullbundle.py

  • 确保 CHANGELOG 是最新的,

  • 在 CHANGELOG 中为目标版本添加日期,

  • 更新所有相关扩展的 __version__ 字段

    • hgext3rd/evolve/metadata.py

    • hgext3rd/topic/__init__.py

    • hgext3rd/pullbundle.py(如果已修改)

  • 创建一个新的 Debian 变更日志条目

    • debchange –newversion x.y.z-1 “新的上游发布”

    • debchange –release

  • 对 setup.py 的安装和 sdist 目标进行合理性检查

    • python setup.py install –home=$(mktemp -d)

    • python setup.py sdist

  • 标记提交,

  • @ 书签移动到新标签,

  • 推送并发布标签,

  • 将 tarball 上传到 PyPI,

  • 在 Heptapod CI 上为标记的提交构建 .deb 文件,

  • evolve-testers@mercurial-scm.orgmercurial@mercurial-scm.org 上发布公告,

  • 增加所有扩展的版本,并添加 .dev0(参考现有提交作为示例)

    • hgext3rd/evolve/metadata.py

    • hgext3rd/topic/__init__.py

    • hgext3rd/pullbundle.py

    版本升级规则

    • 稳定分支 x.y.z+1.dev0

    • 默认分支 x.y+1.0.dev0

  • 将稳定分支合并到默认分支。

支持

AWSAWS云计算和安全赞助商DatadogDatadog监控FastlyFastlyCDNGoogleGoogle下载分析MicrosoftMicrosoftPSF赞助商PingdomPingdom监控SentrySentry错误日志StatusPageStatusPage状态页面