2006-06-28 (Wed) [長年日記]

Tailor

必要に迫られてTailorというPython実装のツールを触ってる。これはCVSやSVNのように分散リポジトリに対応していないVCツールでも、リポジトリを相互に同期できるようにした優れもののツールだ。

リモートリポジトリをローカルリポジトリに落として、家でローカルリポジトリを相手にオフラインで開発とかできる。オンラインになったときに後で同期すればよい。

このツールの非常に優れた点は多数のVCツールをサポートしていて、お互いに同期ができること。CVSからSVNの移行にも使える。かなりマイナーなVCツールにも対応してる。元々はDarcs向けのツールだったようだ。

例によってソースは後藤さんより>sync-up 作業の効率アップのために

対応VC

  • Darcs
  • Subversion
  • Monotone
  • CVS
  • Bazaar-NG
  • Mercurial
  • Git (Cogito)

そんで単純と思われる SVN <-> SVN を試しているんだが svn:ignoreで無視して削除したとこのファイルでエラーが出るなぁ。地雷踏んだかしら。

おお〜。最新のversion 0.9.23 から0.9.19に落としたら動いたぞぅぅ。0.9.23の SVN <-> SVNにはなんかしら問題あるということで。ひとつひとつのcommitを再現してくれるのでこれは便利だ。リポジトリがリモートでもcommit権さえあれば同期できるのも魅力。

さらに触ってたら0.9.23でも動作した。勘所をメモ。

  • 途中で失敗して、やりなおす時は必ずtailor.stateファイルを消す
  • source側のworking copyはrev 1をcheckoutする
  • LANGを日本語にしてると失敗するかも?

使い方

http://localhost/repos/kozuchiのsourceリポジトリの内容をのtargetリポジトリへcommitして同期する場合。両方SVNを想定。subdirを分けるとrsyncも必要っぽい。

 # working copyの準備

 # sourceリポジトリのworking copyをcheckout
 $svn co -r 1 http://localhost/repos/kozuchi src

 # targetリポジトリのworking copyをcheckout
 $svn co file:///home/koichiro/repos/local/kozuchi dst

 # tailorの設定ファイルを出力
 $ ./tailor --verbose --source-kind svn --target-kind svn
   --repository http://localhost/repos/kozuchi
   --module / --revision INITIAL --target-repository file:///home/koichiro/repos/local/kozuchi
   --use-svn-propset --target-module / kozuchi > kozuchi.tailor

 # kozuchi.tailorを編集して先のworking copyをそれぞれのsubdirとして設定する
 # 設定ファイルは後述

 # tailorを実行
 $ LANG=C ./tailor -v --configfile kozuchi.tailor

kozuchi.tailor

 [DEFAULT]
 use-propset = True
 verbose = True

 [project]
 target = svn:target
 start-revision = INITIAL
 root-directory = /home/koichiro/tmp/tailor-0.9.19
 state-file = tailor.state
 source = svn:source

 [svn:target]
 module = /
 repository = file:///home/koichiro/repos/local/kozuchi
 subdir = dst

 [svn:source]
 module = /
 repository = http://localhost/repos/kozuchi
 subdir = src