2013-07-05 133 views
2

是否有任何Mercurial命令或Python API可以生成回购名称?这将有助于开发交叉回购脚本。mercurial:任何获取存储库名称的命令或python api

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

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

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

回答

4

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

这解释了为什么它看起来如此基本,但我找不到明显的解决方案。谢谢!超级回答! – frankc

1

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

如果你想获得本地目录名的你 Mercurial库,我也没有好解决方案,除了检查通知扩展的代码(其中,一些技巧之后,you can get project-name

+1

您可以使用'hg root'命令返回本地目录名称,并使用'basename'来提取最后一个组件。所以如果你的项目在'/ Users/jrh/code/halo7'中,这会产生'halo7'。 – gavinb

+0

hg root返回本地路径/目录,这可能与回购名称完全不同。 – frankc

+0

@gavinb - Winboys在主板上没有基名? –