-

ホームディレクトリのドットファイルをSubversionで管理

今までホームディレクトリにあるドットファイルRCSで一応履歴を取っていたが、id:secondlifeさんのココを見てまねしよーということでsvnに移行した。

現バージョンをそのままsvnにぶっ込んでもよいのだけれど、せっかく今まで書いてきたログを捨てるのもなんかもったいない、ということでsvnのログとして移行することに。
rcs2svn.pl というのがあるので、これを使わせてもらう。

準備

RCSのコミット日時をsvnにもセットする(rcs2svn.plの--timeオプションをつけた場合)ために、リビジョン属性であるsvn:dateを変更するので、svnリポジトリ側でRevision Property Changeを許可する。
このためには、SVNリポジトリのhooksディレクトリに pre-revprop-change を作る。hooksディレクトリに元からあるテンプレート(.tmpl)をコピー(.tmplを取る)して、実行属性を。

# cd /path/to/repos/hooks
# cp pre-revprop-change.tmpl pre-revprop-change
# chmod +x pre-revprop-change

revprop-change が成功するためには exit 0 するだけでよい。条件によってrevprop changeを許可しないならexit 1すればよし。一応、自分はユーザ名だけチェックしといたけども。書き方はこのファイル自体のコメントに全部書いてある。

REPOS="$1"
REV="$2"
USER="$3"
PROPNAME="$4"
ACTION="$5"
if [ "$USER" = morimo ]; then exit 0; fi
exit 1

rcs2svn.pl

は、svnの指定したURLから、いったんカレントディレクトリにチェックアウトしてしまうので、ホームディレクトリ以外の空の作業ディレクトリをカレントにしてやるのが吉。
自分はrcs2svnworkというディレクトリを作り、リポジトリ上のディレクトリごとに順番に、ワーキングディレクトリをクリアしながら順にコミットした。ログは過去Linuxで生きていた関係でEUC-JPなので、UTF-8にlvでフィルタ。
以下手順

% mkdir rcs2svnwork; cd rcs2svnwork
% mkdir RCS
% cp ~/RCS/.emacs,v RCS/
% perl ~/rcs2svn.pl --time --filter-message="lv -Ie -Ou" -url svn+ssh://snow/svn/repos/dotfiles/emacs ~/RCS/.emacs,v --go
... RCSのリビジョンの数だけコミットされる
% rm -rf * .*
% mkdir RCS
% cp ~/RCS/.wl* RCS/
% perl ~/rcs2svn.pl --time --filter-message="lv -Ie -Ou" -url svn+ssh://snow/svn/repos/dotfiles/wl RCS/.wl* --go
... RCSのリビジョンの数だけコミットされる

あと、bash, zsh, vim... と繰り返し。


・・・
RCS使ってる(た)人で、ログを残したいという奇特な人のみに役に立つという。