【问题标题】:Mercurial [subpaths] containing absolute path is appended to main repo's default path when pushing推送时将包含绝对路径的 Mercurial [子路径] 附加到主仓库的默认路径
【发布时间】:2012-01-27 12:40:34
【问题描述】:

在 Windows 上运行 Mercurial 2.0.2:

在我的 .hgrc 中:

[subpaths]
MYREPOS/(.*) = https://server/repos/\1

在我的 .hgsub 中:

subrepo/lib = MYREPOS/lib

当我进行推送时,子仓库的推送路径是它到主仓库的路径的串联,而不是绝对路径 - 输出是:

pushing to https://server/repos/main 
pushing subrepo subrepo\lib to https://server/repos/main/http%3A//server/repos/lib

我早就料到了:

pushing to https://server/repos/main
pushing subrepo subrepo\lib to https://server/repos/lib

是不是因为子 repo 路径的“绝对性或相对性”是由 .hgsub 中的右侧路径决定的,而不是它映射到的值?例如,MYREPOS/lib 是相对的,因此映射的路径将被视为相对,不管是不是?

【问题讨论】:

    标签: mercurial mercurial-subrepos


    【解决方案1】:

    子存储库逻辑已更改between 1.9 and 2.0。现在的程序是:

    1. 如果.hgsub 中的路径是相对的,则将其与主存储库路径连接
    2. 将重新映射规则应用于此最终路径

    在此更改之前,我们会:

    1. 将重映射规则应用到来自.hgsub 的路径
    2. 如果重新映射的路径是相对的,则将其与主存储库路径连接

    所以你是对的,MYREPOS/lib 在第一步中被视为相对路径。因此,子存储库的完整路径是

    https://server/repos/main/MYREPOS/lib
    

    并且您的重新映射模式仍然会触发。这解释了为什么您会在推送 URL 的中间看到 http://...。但是,有一个 fallback 会恢复到旧的行为。如果你的模式是

    ^MYREPOS/(.*) = https://server/repos/\1
    

    那么它不会匹配新步骤 2 中的任何内容——它只会在路径的开头重新映射 MYREPOS。我们注意到这一点并使用旧算法!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-19
      • 2019-06-11
      • 2012-02-02
      • 1970-01-01
      • 2011-05-16
      相关资源
      最近更新 更多