subpathsを使ったリポジトリをcloneする方法

2012/01/25 追記
Mercurial 2.0 以降は これ を参照

subrepoを使わない場合とか、subrepoを使ってもsubpathsを使ってない場合なら、リポジトリは普通にcloneできる。ただしsubrepoかつsubpathsを使っていると、普通にcloneすると失敗する。

何故かというと、subpathsはhgrcにsubrepoが参照するリポジトリのパスを格納しているから。
cloneしてもhgrcは作成されず、hgrcは自分で作成しないといけない。

なのでhgrcにsubpathsを格納しつつpullすれば、cloneと同じような効果が得られる。
ただし毎回手打ちでやるのも面倒なので、バッチファイルを用意してみた。2段階までネストに対応。

リポジトリ(トップ、ネスト1段階目、ネスト2段階目)のパスと、ネストしたリポジトリを格納するディレクトリを変更すれば使えるはず。ディレクトリ構成はこんな感じ.

PATH_TO_TOP
├─.hg
├─SECOND_DIR
    ├─.hg
    ├─THIRD_DIR
        ├─.hg
@ECHO OFF
SET ROOT_DIR=%~DP0
SET TOP_REPO=PATH_TO_TOP
SET SECOND_REPO=PATH_TO_SECOND
SET THIRD_REPO=PATH_TO_THIRD


SET TOP_HGRC=%ROOT_DIR%\.hg\hgrc
SET SECOND_HGRC=%ROOT_DIR%\SECOND_DIR\.hg\hgrc


:CREATE_TOP
hg init
ECHO [paths]>%TOP_HGRC%
ECHO default = %TOP_REPO%>>%TOP_HGRC%
ECHO;>>%TOP_HGRC%
ECHO [subpaths]>>%TOP_HGRC%
ECHO subrepo_second = %SECOND_REPO%>>%TOP_HGRC%


:CREATE_SECOND
IF NOT EXIST %ROOT_DIR%SECOND_DIR MKDIR %ROOT_DIR%SECOND_DIR
CD /D %ROOT_DIR%SECOND_DIR
hg init
ECHO [paths]>%SECOND_HGRC%
ECHO default = %SECOND_REPO%>>%SECOND_HGRC%
ECHO;>>%SECOND_HGRC%
ECHO [subpaths]>>%SECOND_HGRC%
ECHO subrepo_third = %THIRD_REPO%>>%SECOND_HGRC%


:UPDATE
CD /D %ROOT_DIR%
hg pull
hg update -C


:END
PAUSE