2012-01-27 86 views
3

當運行水銀2.0.2在Windows含絕對路徑附加到主倉庫的默認路徑:水銀[子路徑]推

在我的.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 

是不是因爲「絕對或相對性」子回購路徑是由.hgsub右手路徑,而不是把它映射到值確定的?例如,MYREPOS/lib是相對的,因此映射的路徑將被視爲相對的,無論它是否是?

回答

3

子庫的邏輯改變了between 1.9 and 2.0。現在的程序是:

  1. 如果.hgsub路徑是相對的,則與主存儲庫路徑加入吧
  2. 申請重新映射規則,這最後的路徑

這種變化之前,我們將:

  1. 申請重新映射規則的路徑從.hgsub
  2. 如果重新映射路徑是relati ve,然後將其加入主存儲庫路徑

所以你說得對,MYREPOS/lib在第一步被看作是相對路徑。因此,子庫的完整路徑爲

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

並且您的重新映射模式仍會觸發。這解釋了爲什麼您在推送網址中間看到http://...。但是,有一個後備將恢復到舊的行爲。如果你的模式是

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

那麼它不會在新的第2步匹配任何 - 它只會在路徑的開始重新映射MYREPOS。我們注意到這一點,並使用舊的算法!