mercurial:获取存储库名称的任何命令或python api

时间:2013-07-05 22:09:13

标签: mercurial

是否有任何可以产生回购名称的Mercurial命令或Python API?这将有助于开发交叉回购脚本。

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

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

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

2 个答案:

答案 0 :(得分: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}"

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

答案 1 :(得分:1)

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

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