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

fra*_*nkc 3 mercurial

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

我找到的唯一相关解决方案是解析.hg/hgrc [paths]"default"配置选项.

[paths]
default = ssh://server//path/tools
Run Code Online (Sandbox Code Playgroud)

我想,必须有一个更优雅的解决方案.

Mar*_*ler 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
Run Code Online (Sandbox Code Playgroud)

lib-foo-more-testing克隆具有默认的路径推回lib-foo-test.

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

如果您真正想要的是为存储库获取"身份",那么您应该使用

$ hg log -r 0 --template "{node}"
Run Code Online (Sandbox Code Playgroud)

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