88171.net

GitでBlosxomに記事を投げる

Blogging --and, indeed, any online publishing-- should be as simple as typing away in your favourite text editor and hitting Save.

blosxom :: the zen of blogging

この潔さはBlosxomの美点なんだけど、デバイスもネットワークも多様化したこのご時世だからこそ、手持ちの端末でいつでもどこでも快適にSSHできるとは限らないし、手元でMacDownみたいに素敵なエディタを使いたいことだってある。

そこでナウいエンジニアの皆様が大好きな 「Gitでpushしてapplicationをdeploy」 を応用してみましょう、と。

ファイルの更新時刻

まずいきなり細かい話から始めると、今回Blosxomには一切手を入れてなくて、単に$blosxom::datadirにGitリポジトリを指定しているだけ。 なので、ファイルの更新時刻をきちんと管理しないとGitが書き換えまくって大変なことになる。

これにはrsync付属のgit-set-file-timesをベースに、コミットのauthor dateに基づいて全ファイルの更新時刻を再設定するように少しだけ手を入れたスクリプトを使っている。

なぜわざわざcommitter dateでなくauthor dateを見ているのかと言うと、コマンドラインで簡単に上書きできるから。 更新時刻を変えるまでもないようなほんのちょっとした修正は、--dateオプションでauthor dateを変えずにこっそりコミットしたりしている。 あと意味合い的にもauthorの方が適当なんじゃないかと思うけど、そこはよくわからない。

リポジトリ構成と設定

結果的に、リポジトリ構成はこんな感じ。

リポジトリ構成のイメージ

真ん中のbareリポジトリのpost-receiveフックはこう。まあこれはみんなやってるのと同じ。

#!/bin/sh
cd /path/to/repo/for/blosxom && git --git-dir=.git pull

Blosxomが参照するnon-bareリポジトリのpost-mergeフックはこう。scripts/に前述のスクリプトがコミットしてあって、それを叩いている。

#!/bin/sh
scripts/git-set-file-times

post-mergeフックには他にも、記事の更新時に走らせたい処理を書いてもいい。うちではエントリキャッシュの削除を仕込んでる。


これで、ローカルからgit pushするだけでBlosxomに記事を投げることができるようになった。

草稿はどう管理したものかと悩んだけれど、結局は安直にドットファイルにして隠している。いちいちトピックブランチ切るのも面倒だし。

勢い余って手元のiOSデバイスたちにWorking Copyで環境を整えたりもしたけれど、機会があれば書くかもしれない。

ネタが10年古い。