ふと、 subversion リポジトリを mercirual にコンバートして見ようとして、思ったより上手くいかなかったので正規化を試みる。
対象になっているのは、昔集積した個人リポジトリで、大体は正しかったのだが、一部 /branches/ だの /releases/ の直下にブランチ名、リリース名なしでプロジェクトディレクトリがあったり、古いものを /finished/ とか作って放り込んであったので、この階層をなんとかする。
段取りとしては、svnadmin dump して sed で調整。Node-path: だけだと Node-copyfrom-path: で問題がおこるので sed -e '@-path: XXX@-path: YYY@' とか。 さらにXXX を YYY/ZZZ とかにしようとすると、ディレクトリがないとやはり破綻するので、それは諦めて dump ファイルを vi で編集して微調整。
ディレクトリの追加は、あるリビジョンに、てきとーに
Node-path: brances/XXX Node-kind: dir Node-action: add Prop-content-length: 10 Content-length: 10 PROPS-END
の部分を複製して追加(このブロックは複数あっても構わないので)。
結局、うかつに mv して tags/ にだけ存在させると怪しいことになる(タグがあって実体がない)。branches/ に捨てるのが得策。
その他の、 hg の小技:Git使いがMercurial使いに転職するとき設定しておくべきMercurial拡張 - TIM Labs