3

是否有任何 Mercurial 命令或 Python API 可以产生 repo 名称?这将有助于开发跨仓库脚本。

我发现的唯一相关解决方案是解析.hg/hgrc [paths]“默认”配置选项部分。

[paths]
default = ssh://server//path/tools

我认为必须有一个更优雅的解决方案。

4

2 回答 2

6

Mercurial 中没有“存储库名称”的真正概念(存储库不“知道”或关心自己的名称)。我认为您的意思是“默认拉取路径的最后一个组件”?

如果是这样,那么解析 的输出hg path default将是获取该信息的最直接方法。

但是,您应该注意默认路径可以(并且经常)更改:考虑克隆本地克隆时间进行测试:

$ hg clone http://server/lib-foo
$ hg clone lib-foo lib-foo-test
$ hg clone lib-foo-test lib-foo-more-testing

克隆lib-foo-more-testing具有返回到lib-foo-test.

这意味着解析hg paths default不会比使用更可靠basename $(hg root)——两者都可能与最初克隆的存储库的(基本)名称完全不同。

如果您真正想要的是获得存储库的“身份”,那么您应该改用

$ hg log -r 0 --template "{node}"

存储库中的第一个变更集哈希通常会唯一标识存储库,即使克隆更改名称,它也会保持稳定。(如果一个存储库有两个或多个根,那么原则上第零个变更集在克隆之间可能会有所不同。但是,人们将不得不积极尝试使其不同。)

于 2013-07-06T09:27:17.730 回答
1

如果要获取远程default别名的最后一段路径,处理输出hg path default将是更好的选择

如果你想获取你的 mercurial 存储库的本地目录名称,我没有好的解决方案,除了检查 Notify 扩展的代码(在其中,经过一些技巧,你可以得到 project-name

于 2013-07-05T23:47:32.363 回答