2012-01-27 10 views
3

を押すとMercurialは[サブパス]含む絶対パスがメインリポジトリのデフォルトのパスに追加されます。Windows上のMercurial 2.0.2実行

私.hgrcで

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

そして、私の.hgsubで:

subrepo/lib = MYREPOS/lib 

Iプッシュを行うと、サブレポのプッシュ・パスは、それの連結ではなく、絶対パスより、メインリポジトリへのパスです - で出力される。

pushing to https://server/repos/main 
pushing subrepo subrepo\lib to https://server/repos/main/http%3A//server/repos/lib 
私が期待した

:「絶対性やrelativeness」サブレポパスの右手の.hgsubでのパスではなく、それがマップされた値によって決定されますので、それは

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

ですか?たとえば、MYREPOS/libは相対パスであるため、マップされたパスは相対パスとして扱われますか?

答えて

3

サブリポジトリのロジックが変更されましたbetween 1.9 and 2.0。手順は以下のようになります。

  1. .hgsubにおける相対パスの場合は、
  2. は、この変更する前に、この最後のパス

に再マッピングルールを適用し、メインリポジトリのパスでそれに参加し、私たちは希望:再マップパスがrelatiある場合

  1. .hgsub
  2. からパスに再マッピングルールを適用します次に、メインのリポジトリパスに接続します

だから、MYREPOS/libは最初の手順では相対パスとみなされます。したがって、サブレポートのフルパスは

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

であり、再マッピングパターンは引き続きトリガーされます。これは、プッシュURLの途中にhttp://...が表示される理由を説明しています。ただし、フォールバックがあり、古い動作に戻ります。あなたのパターンは

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

である場合、それは新しいステップ2で何も一致文句を言わない - それは唯一のパスの先頭にMYREPOSを再マップします。これに気づき、古いアルゴリズムを使用します!

関連する問題