リポジトリホスティング使用時の .hgsub 記述
2014年初の、備忘録代わりに「お気に入り」に入れておいたツィートの棚卸しシリーズも、とりあえず本エントリで最後です。
以前、以下の様なエントリを見かけました。
「サブリポジトリ(.hgsub)の使用」と「(事後ビルド等のために hg update 等で多用される)changegroup フックでの失敗」ということを考えると:
あたりが原因ではないかと推測されます。
上記エントリで参照している「Mercurial でのサブリポジトリの利用」中の「連携先 URL 指定のパス形式」や「連携先指定に 'tirvial' subrepo paths が possible でないケース」あたりに詳しく書きましたが、リポジトリホスティングでの公開を前提とする場合、親リポジトリ側の .hgsub 記述では、単純パス形式は使用できないと考えた方が良いでしょう。
さて、そんな中、以下の様な情報も頂きました。
(※ 注意: 後者のツイートの参照先 URL は、Mercurial プロジェクト関連サイトのドメイン移行に伴い、現在は https://www.mercurial-scm.org/ 配下に移動)
.hgsub ファイルに [subpaths] セクションを記述できる事は、このツィートを見てソースを確認するまで、全く気付きませんでした(オンラインヘルプ等での言及もありません)。
この機能は、設定ファイル読み込みに使うクラスを、.hgsub の読み込みに流用することで実現しているようです。
設定の優先順位は、以下の様になっています。
- 設定ファイルの
[subpaths]記述 .hgsubファイル中での[subpaths]記述.hgsubファイル中でのパス記述
但し、[subpaths] はパターンマッチング記述の列挙ですので、条件が合致しない優先順位高位の記述がいくらあっても、優先順位低位の記述を上書きすることはありません。
そのため、親リポジトリの公開先ホスティングサーバ(例: bitbucket)との連携の際に、サブリポジトリの URL を書き換えるような置換記述を、.hgsub ファイルの [subpaths] に、あらかじめ記述しておくことで、一種の fallback として機能させることができます。
詳細は、上記ツィートが参照している "Use 'trivial' subrepo paths where possible" の説明を参照してみてください。