彷徨えるフジワラ

年がら年中さまよってます

リポジトリホスティング使用時の .hgsub 記述

2014年初の、備忘録代わりに「お気に入り」に入れておいたツィートの棚卸しシリーズも、とりあえず本エントリで最後です。

以前、以下の様なエントリを見かけました。

「サブリポジトリ(.hgsub)の使用」と「(事後ビルド等のために hg update 等で多用される)changegroup フックでの失敗」ということを考えると:

あたりが原因ではないかと推測されます。

上記エントリで参照している「Mercurial でのサブリポジトリの利用」中の「連携先 URL 指定のパス形式」や「連携先指定に 'tirvial' subrepo paths が possible でないケース」あたりに詳しく書きましたが、リポジトリホスティングでの公開を前提とする場合、親リポジトリ側の .hgsub 記述では、単純パス形式は使用できないと考えた方が良いでしょう。

さて、そんな中、以下の様な情報も頂きました。

(※ 注意: 後者のツイートの参照先 URL は、Mercurial プロジェクト関連サイトのドメイン移行に伴い、現在は https://www.mercurial-scm.org/ 配下に移動)

.hgsub ファイルに [subpaths] セクションを記述できる事は、このツィートを見てソースを確認するまで、全く気付きませんでした(オンラインヘルプ等での言及もありません)。

この機能は、設定ファイル読み込みに使うクラスを、.hgsub の読み込みに流用することで実現しているようです。

設定の優先順位は、以下の様になっています。

  1. 設定ファイルの [subpaths] 記述
  2. .hgsub ファイル中での [subpaths] 記述
  3. .hgsub ファイル中でのパス記述

但し、[subpaths] はパターンマッチング記述の列挙ですので、条件が合致しない優先順位高位の記述がいくらあっても、優先順位低位の記述を上書きすることはありません。

そのため、親リポジトリの公開先ホスティングサーバ(例: bitbucket)との連携の際に、サブリポジトリの URL を書き換えるような置換記述を、.hgsub ファイルの [subpaths] に、あらかじめ記述しておくことで、一種の fallback として機能させることができます。

詳細は、上記ツィートが参照している "Use 'trivial' subrepo paths where possible" の説明を参照してみてください。