如何让我的Python文件显示其Mercurial标签或修订版本作为模块版本?

3 投票
2 回答
550 浏览
提问于 2025-04-15 21:06

我想给我的Python应用程序添加一个命令行选项--version,这个选项可以根据命令的标签状态显示正确的版本信息:

如果文件来自一个短十六进制ID为abcdef01的版本,并且这个版本被标记为TAG,那么--version应该显示以下内容:

MyApp Version TAG (abcdef01)

如果文件来自最新的版本,--version应该显示以下内容:

MyApp (tip)

如果文件来自一个任意的、没有标签的修订版本abcdef02,那么--version应该显示以下内容:

MyApp (development, abcdef02)

这样做可能吗?如果可以,应该怎么做?

2 个回答

1

一旦你启用了关键词扩展,你就可以把它放在一个变量里,然后用这个变量来生成哈希值。

1

有人提到了KeywordExtension,这确实是一个不错的选择。

如果你想要更多的控制,可以创建一个“更新”功能,把你想要的内容写入一个version文件,而这个文件不需要放到代码库里。你可以在你的代码库的hgrc文件里加上类似这样的内容:

[hooks]
update = hg id > version.txt

这里的version.txt在你的.hgignore文件里,因为你不想追踪它的变化。然后你的版本代码就可以读取这个文件。

使用钩子(hook)而不是KeywordExtension的好处是,你可以使用更复杂的标签查找逻辑。

实际上,nearest extension可能正好能满足你的需求:

nearest mercurial扩展的目标是找到给定变更集(changeset)最近的标签,不论是向前还是向后在变更集的历史树中。

默认情况下,标签是向后搜索历史的,但使用--contains选项可以向前搜索。它可以回答以下问题:

这个变更集是基于哪个标签的?(不使用--contains)哪个标签会包含这个变更集?(使用--contains)标签是按日期搜索的,因此会报告时间上最近的标签。不过,使用--all选项会让扩展搜索所有可能分支上的第一个标签。

撰写回答