hg convert --splicemap でリポジトリ変換時に履歴を繋ぐ #mercurialjp
このエントリは Mercuiral Advent Calendar 2012 の25日目です。
またまたid:flying-foozyさんからネタを提供していただきました。長かったMercurial Advent Calendarもこれが最後です。
単にhg convert
で変換してみる
リポジトリ変換を行うhg convert
。ブランチのあるsubversionのリポジトリで変換を行うとマージの無い履歴が出来ます。
$ hg convert -s svn -d hg http://svn.apache.org/repos/asf/commons/proper/dbcp/ apache-commons-dbcp-no-splicemap # https://bitbucket.org/troter/apache-commons-dbcp-no-splicemap
変換したリポジトリのグラフはこんな感じでマージが無いです。
--splicemap で履歴にマージを作る
この履歴、マージが無いので--splicemap
を使って無理矢理作って見ましょう。(というのも、DBCPはtrunkに変更を入れて、その変更をbranchに取り込むという方式、つまりgraftする運用なのでマージは不要なのです。)
slipemapファイルには二つの書式が有ります。今回はマージの場合を使います。
対象のリビジョン 対象のリビジョンの親1 # ブランチングの場合 対象のリビジョン 対象のリビジョンの親1 対象のリビジョンの親2 # マージの場合
splicemap
先ほど変換したリポジトリの dbcp-hg/.hg/shamap
を参考にDBCP_1_4_x_BRANCH
の分だけ作って見ます。
svn:13f79535-47bb-0310-9956-ffa450edef68/commons/proper/dbcp/trunk@1039158 svn:13f79535-47bb-0310-9956-ffa450edef68/commons/proper/dbcp/trunk@1028593 svn:13f79535-47bb-0310-9956-ffa450edef68/commons/proper/dbcp/branches/DBCP_1_4_x_BRANCH@1039158 svn:13f79535-47bb-0310-9956-ffa450edef68/commons/proper/dbcp/trunk@1055296 svn:13f79535-47bb-0310-9956-ffa450edef68/commons/proper/dbcp/trunk@1039158 svn:13f79535-47bb-0310-9956-ffa450edef68/commons/proper/dbcp/branches/DBCP_1_4_x_BRANCH@1055296 svn:13f79535-47bb-0310-9956-ffa450edef68/commons/proper/dbcp/trunk@1056867 svn:13f79535-47bb-0310-9956-ffa450edef68/commons/proper/dbcp/trunk@1055296 svn:13f79535-47bb-0310-9956-ffa450edef68/commons/proper/dbcp/branches/DBCP_1_4_x_BRANCH@1056867 svn:13f79535-47bb-0310-9956-ffa450edef68/commons/proper/dbcp/trunk@1088644 svn:13f79535-47bb-0310-9956-ffa450edef68/commons/proper/dbcp/trunk@1084406 svn:13f79535-47bb-0310-9956-ffa450edef68/commons/proper/dbcp/branches/DBCP_1_4_x_BRANCH@1088645 svn:13f79535-47bb-0310-9956-ffa450edef68/commons/proper/dbcp/trunk@1096257 svn:13f79535-47bb-0310-9956-ffa450edef68/commons/proper/dbcp/trunk@1096256 svn:13f79535-47bb-0310-9956-ffa450edef68/commons/proper/dbcp/branches/DBCP_1_4_x_BRANCH@1096255 svn:13f79535-47bb-0310-9956-ffa450edef68/commons/proper/dbcp/trunk@1096260 svn:13f79535-47bb-0310-9956-ffa450edef68/commons/proper/dbcp/trunk@1096257 svn:13f79535-47bb-0310-9956-ffa450edef68/commons/proper/dbcp/branches/DBCP_1_4_x_BRANCH@1096259 svn:13f79535-47bb-0310-9956-ffa450edef68/commons/proper/dbcp/trunk@1096546 svn:13f79535-47bb-0310-9956-ffa450edef68/commons/proper/dbcp/trunk@1096260 svn:13f79535-47bb-0310-9956-ffa450edef68/commons/proper/dbcp/branches/DBCP_1_4_x_BRANCH@1096543 svn:13f79535-47bb-0310-9956-ffa450edef68/commons/proper/dbcp/trunk@1096549 svn:13f79535-47bb-0310-9956-ffa450edef68/commons/proper/dbcp/trunk@1096546 svn:13f79535-47bb-0310-9956-ffa450edef68/commons/proper/dbcp/branches/DBCP_1_4_x_BRANCH@1096550 svn:13f79535-47bb-0310-9956-ffa450edef68/commons/proper/dbcp/trunk@1096567 svn:13f79535-47bb-0310-9956-ffa450edef68/commons/proper/dbcp/trunk@1096549 svn:13f79535-47bb-0310-9956-ffa450edef68/commons/proper/dbcp/branches/DBCP_1_4_x_BRANCH@1096567 svn:13f79535-47bb-0310-9956-ffa450edef68/commons/proper/dbcp/trunk@1096570 svn:13f79535-47bb-0310-9956-ffa450edef68/commons/proper/dbcp/trunk@1096567 svn:13f79535-47bb-0310-9956-ffa450edef68/commons/proper/dbcp/branches/DBCP_1_4_x_BRANCH@1096570 svn:13f79535-47bb-0310-9956-ffa450edef68/commons/proper/dbcp/trunk@1097625 svn:13f79535-47bb-0310-9956-ffa450edef68/commons/proper/dbcp/trunk@1097170 svn:13f79535-47bb-0310-9956-ffa450edef68/commons/proper/dbcp/branches/DBCP_1_4_x_BRANCH@1097630 svn:13f79535-47bb-0310-9956-ffa450edef68/commons/proper/dbcp/trunk@1098458 svn:13f79535-47bb-0310-9956-ffa450edef68/commons/proper/dbcp/trunk@1097625 svn:13f79535-47bb-0310-9956-ffa450edef68/commons/proper/dbcp/branches/DBCP_1_4_x_BRANCH@1098459 svn:13f79535-47bb-0310-9956-ffa450edef68/commons/proper/dbcp/trunk@1222740 svn:13f79535-47bb-0310-9956-ffa450edef68/commons/proper/dbcp/trunk@1214435 svn:13f79535-47bb-0310-9956-ffa450edef68/commons/proper/dbcp/branches/DBCP_1_4_x_BRANCH@1222742 svn:13f79535-47bb-0310-9956-ffa450edef68/commons/proper/dbcp/trunk@1302397 svn:13f79535-47bb-0310-9956-ffa450edef68/commons/proper/dbcp/trunk@1222740 svn:13f79535-47bb-0310-9956-ffa450edef68/commons/proper/dbcp/branches/DBCP_1_4_x_BRANCH@1302423
このsplimemapをつかってリポジトリを変換し直して見ましょう。
% hg convert -s svn -d hg http://svn.apache.org/repos/asf/commons/proper/dbcp/ --splicemap dbcp-splicemap apache-commons-dbcp-use-splicemap # https://bitbucket.org/troter/apache-commons-dbcp-use-splicemap
変換したリポジトリのグラフを見るとDBCP_1_4_x_BRANCH
からtrunk
にマージしているグラフになっていますね。
--datesortでスリムにする
さて、先ほど変換したリポジトリですが、DBCP_1_4_x_BRANCH
のコミットが連続している為、グラフが左右にぐわーっと広がっています。これはhg convert
はデフォルトで--branchsort
で履歴をソートするからです。
マージを組み込むとこのソートだと不便なので、--datesort
を使って日付順にしてみましょう。
% hg convert -s svn -d hg http://svn.apache.org/repos/asf/commons/proper/dbcp/ --splicemap dbcp-splicemap --datesort apache-commons-dbcp-use-splicemap-datesort # https://bitbucket.org/troter/apache-commons-dbcp-use-splicemap-datesort
変換したリポジトリのグラフを見てみましょう。Mercurialのリポジトリの様にいい感じになってますね。
まとめ
リポジトリ変換時に履歴を整形する --splicemap
について紹介しました。また、履歴のソート順を制御する--branchsort
と--datesort
に付いても触れました。
hg convert
には他にも--branchmap
や--authormap
など様々な方法でリポジトリの変換方法を制御出来ます。
詳しくはhg convert
のマニュアルを参照して、きれいに変換してあげてください。