如何让我的Python文件显示其Mercurial标签或修订版本作为模块版本?
我想给我的Python应用程序添加一个命令行选项--version,这个选项可以根据命令的标签状态显示正确的版本信息:
如果文件来自一个短十六进制ID为abcdef01
的版本,并且这个版本被标记为TAG
,那么--version
应该显示以下内容:
MyApp Version TAG (abcdef01)
如果文件来自最新的版本,--version
应该显示以下内容:
MyApp (tip)
如果文件来自一个任意的、没有标签的修订版本abcdef02
,那么--version
应该显示以下内容:
MyApp (development, abcdef02)
这样做可能吗?如果可以,应该怎么做?
2 个回答
一旦你启用了关键词扩展,你就可以把它放在一个变量里,然后用这个变量来生成哈希值。
有人提到了KeywordExtension,这确实是一个不错的选择。
如果你想要更多的控制,可以创建一个“更新”功能,把你想要的内容写入一个version
文件,而这个文件不需要放到代码库里。你可以在你的代码库的hgrc文件里加上类似这样的内容:
[hooks]
update = hg id > version.txt
这里的version.txt
在你的.hgignore文件里,因为你不想追踪它的变化。然后你的版本代码就可以读取这个文件。
使用钩子(hook)而不是KeywordExtension的好处是,你可以使用更复杂的标签查找逻辑。
实际上,nearest extension可能正好能满足你的需求:
nearest mercurial扩展的目标是找到给定变更集(changeset)最近的标签,不论是向前还是向后在变更集的历史树中。
默认情况下,标签是向后搜索历史的,但使用--contains选项可以向前搜索。它可以回答以下问题:
这个变更集是基于哪个标签的?(不使用--contains)哪个标签会包含这个变更集?(使用--contains)标签是按日期搜索的,因此会报告时间上最近的标签。不过,使用--all选项会让扩展搜索所有可能分支上的第一个标签。