【问题标题】:mercurial: any command or python api to get repository namemercurial:任何命令或 python api 来获取存储库名称
【发布时间】:2013-07-05 22:09:13
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: mercurial


    【解决方案1】:

    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}"
    

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

    【讨论】:

    • 这解释了为什么它看起来如此基本但我找不到明显的解决方案。谢谢!超级答案!
    【解决方案2】:

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

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

    【讨论】:

    • 可以使用hg root命令返回本地目录名,使用basename提取最后一个组件。因此,如果您的项目位于/Users/jrh/code/halo7,这将产生halo7
    • hg root 返回本地路径/目录,可能与 repo 名称完全不同。
    • @gavinb - Winboys 怎么样,在董事会上没有基本名字?
    • @frankc 正如 Martin 上面指出的那样,唯一的 repo 名称本身并没有规范的定义。它只是按照惯例,通常是 repo 名称。
    • @LazyBadger 您始终可以安装 CygWin 以在 Windows 上获得完整的 *nix 命令行工具套件。否则,您也许可以使用 DOS shell 中的某些 %~ 功能(请参阅computerhope.com/forhlp.htm)。
    猜你喜欢
    • 1970-01-01
    • 2015-05-01
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    • 2012-06-14
    相关资源
    最近更新 更多