【问题标题】:Automatically update setup.py version on every SVN commit在每次 SVN 提交时自动更新 setup.py 版本
【发布时间】:2012-01-19 04:25:49
【问题描述】:

我们正在将 Plone 附加组件部署为带有扩展的开发鸡蛋。使用 Mr. Developer 构建配方将鸡蛋作为源代码检查推送到生产环境,并且在任何时候都没有完成 .egg 打包。

在每次 SVN 提交到 SVN 版本号或时间戳时自动更新 setup.py 版本戳记的最佳方法是什么?这将提供一些跟踪不同包裹的快速信息。

Distutils 似乎提供了某种神奇的版本标记机制,但我没有找到任何参考文档应该如何使用它。

【问题讨论】:

标签: python svn plone setuptools buildout


【解决方案1】:

在 setup.cfg 中添加类似的内容:

[egg_info]
tag_build = .dev
tag_svn_revision = 1

这当然只适用于颠覆;不确定是否有其他 vcs 的替代品。默认情况下,某些 ZopeSkel 模板可能仍会添加此文件。一些克隆包也有它; Wichert Akkerman 是/曾经是它的粉丝。

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

【讨论】:

  • 但是,如果你使用这种方法,在将包发布到 pypi 时要小心。不要忘记在发布之前从 setup.cfg 中删除这些行。 mypackage-1.2-r1234.tar.gz 包太多了...
【解决方案2】:

你可以简单地使用SVN Keywords,比如

__version__ = "$Rev:$"

SVN 使用该关键字自动更改每个文件更改的版本。

【讨论】:

  • 这对于 setup.py 的每次提交都可以正常工作(假设您将此行放入 setup.py)。当您提交另一个文件时,它不会自行更新。
  • 1 - 使用正确的 SVN 关键字,对于修订版,它是 $Revision$,而不是您的废品 2 - 扩展修订版关键字不是纯数字修订版 仅,看起来像$Revision: 1132 $需要后处理 3 - 关键字显示文件的最后更改修订,而不是回购范围的最后提交修订。 糟糕,你必须重做功课和 RTFM
【解决方案3】:

自动更新 setup.py 版本戳记的最佳方法是什么 在每个 SVN 提交到 SVN 版本号或时间戳?

如果

  • 构建过程可以执行一些动作(我懒得看构建配方)
  • 使用其他仅限 Windows 的工具对您来说并不是“不可以”

你可以考虑使用 TortoiseSVN 包中的SubWCRev cli-tool。它(略微)改变了当前的工作流程:

  • 而不是 real setup.py 存储库存储 template 的 setup.py,其中动态部分数据替换为 SubWCRev-keywords(他们可以处理修订,日期免费表格)
  • 每个构建过程都必须通过使用预定义的 setup-template 针对(本地)工作副本调用 subwcrev 来重新生成实际 setup.py

【讨论】:

  • 问题中解释了工具链,幸运的是,它不是基于 Windows 的工具链。
  • “使用 Mr. Developer buildout recipe”告诉什么都没有,顺便说一句
  • 那么您可能不是该问题的目标受众,但无论如何感谢您的建议:)
猜你喜欢
  • 2020-05-07
  • 1970-01-01
  • 2012-11-07
  • 2018-01-06
  • 2015-11-06
  • 2014-06-08
  • 1970-01-01
  • 2012-08-23
  • 1970-01-01
相关资源
最近更新 更多