每次SVN提交时自动更新setup.py版本

3 投票
3 回答
2126 浏览
提问于 2025-04-17 08:16

我们正在使用buildout来部署Plone的插件,这些插件以开发版本的形式存在。我们通过Mr. Developer这个工具把源代码推送到生产环境,而没有进行任何的.egg打包。

有没有什么好的方法可以在每次提交代码到SVN时,自动更新setup.py文件中的版本号,让它显示SVN的发布号或者时间戳?这样可以快速跟踪不同的包。

Distutils似乎提供了一种神奇的版本标记机制,但我没有找到任何相关的文档说明该如何使用。

3 个回答

0

在每次提交到SVN时,如何自动更新setup.py中的版本号,最好是用SVN的发布号或时间戳呢?

如果

  • 构建过程可以执行某些操作(我懒得去看buildout的说明)
  • 使用额外的仅限Windows的工具对你来说不是个大问题

你可以考虑使用来自TortoiseSVN包的SubWCRev命令行工具。它会稍微改变当前的工作流程:

  • 不再使用真实的setup.py仓库,而是存储一个setup.py的模板,其中动态部分的数据由SubWCRev关键字替代(这些关键字可以处理修订号和日期等信息)
  • 每次构建过程都需要通过调用subwcrev来根据预定义的setup模板重新生成实际的setup.py,使用的是(本地的)工作副本
1

你可以简单地使用一些叫做 SVN 关键字 的东西,比如

__version__ = "$Rev:$"

SVN 会自动用这个关键字在每次文件更改或提交时更新版本号。

6

在setup.cfg文件中添加类似下面的内容:

[egg_info]
tag_build = .dev
tag_svn_revision = 1

当然,这个方法只适用于Subversion(一个版本控制系统);我不确定其他版本控制系统有没有类似的替代方案。这个文件可能会被一些ZopeSkel模板默认添加。一些Plone包也有这个文件;Wichert Akkerman对此很感兴趣。

请注意,每次提交内容时,你都需要运行bin/buildoutpython setup.py egg_info,否则egg-info目录中的版本信息不会更新。

撰写回答