2005年11月03日
SVNとSJISとUTF8
別件でblogを用意することにしたのだが、今のblosxomはUTF-8で処理するようになってる。SJISに変えるのもいろいろやってみた限りではなんか面倒そうだったので、SVNにSJISでコミットしたあとにUTF-8変換してentriesに配備するフックをかけるようにした。
SVNのpost-commitはこんな感じ。
REPOS="$1" REV="$2" cd 〜/checkout svn update LANG=C svnlook changed -r "$REV" "$REPOS" | sync.pl
svnlookの結果を受けるsync.pl。ひどいコードだが(mkdirやrm -rはピュアPerlコードにしてもいいっちゃいいんだけど)、まぁ動くか。サーバ側では何もコミットされないという前提なので、フラグはA、D、Uしか見てない。
#!/usr/bin/perl
$base = "〜/blosxom/entries";
$org = "〜/checkout";
while (<>) {
chomp;
my($tag, $f) = split(/\s+/, $_, 2);
if ($f =~ /.*\/$/) {
# Directory
if ($tag eq 'A' && ! -d "$base/$f") {
system("mkdir -p $base/$f");
} elsif ($tag eq 'D' && -d "$base/$f") {
system("rm -r $base/$f");
}
} else {
# File
if ($tag eq 'A' || $tag eq 'U' && -f "$org/$f") {
system("nkf --utf8 $org/$f > $base/$f");
} elsif ($tag eq 'D' && -f "$base/$f") {
unlink("$base/$f");
}
}
}
![[hatena]](http://d.hatena.ne.jp/images/b_entry_de.gif)
![[RSS]](/d/rss10.png)