Subversionのpost-commitフックでsvn updateできないときは

Subversion

OSCON : Subversion Best PracticesではWebサイトのsvn updateはpost-commitフックで自動的にやろうといわれています。

私もそれに倣って以下のコードをpost-commitに書いてみたのですが、何度やってもうまくいきませんでした。post-commitフックスクリプト自体は動作しているのですが...。

/usr/local/bin/svn up /path/to/working/directory >> /tmp/svnupdate.log &

そこで同じ境遇の人がいないか探してみたところ、見つけました。

SubversionによるPHP開発環境バージョン管理話 2006.10.03-[Id of Radiance]より。

ところがpost-commitを直接コマンド叩くとどちらの更新も成功するのでワケわからん。シェル内に「whoami」書いて権限調べたりもしたのだが、コミット連動、コマンド直叩きどちらも当然のよーに「root」で動作してる。もーわけわからんナリよキテレツ!

で、コレの対処をどうしたかというと、「svn update /DocumentRoot/*」と言う風に、本来フォルダ指定だけでいけるところをわざわざワイルドカードで中身全指定したら一応は更新されるようになった。

私の環境でもこれで解決。なんとか自動更新されるようになりました。

/usr/local/bin/svn up /path/to/working/directory/* >> /tmp/svnupdate.log &

同記事中では『Windows側(TortoiseSVN側)でファイルを追加→コミットした場合に、post-commitでのupdateで新規ファイルが出力されない状況も発生中』とありますが、私は運良くこの状況には陥っていません。

以下に動作環境を記しておきます。

  • レポジトリ (FreeBSD)
    • FreeBSD 5.4-Release
    • svn, version 1.4.0 (r21228) from ports
  • クライアント (FreeBSD)
    • FreeBSD 5.4-Release
    • svn, version 1.4.0 (r21228) from ports
  • クライアント (Windows)
    • Windows XP Professional sp2
    • TortoiseSVN 1.4.1, Build 7882 - 32bit 2006/11/11 09:34:39

コメント / トラックバック

コメント / トラックバック 2 件

  1. nc31 より:

    自分もまったく同じ問題にあたったのですが、解決に至ったのでフィードバックまで。(当方 Debian 3.1 Sarge + subversion 1.1.4-2 です)

    自分の場合commitしたプロジェクトに日本語ファイル名のファイルが混ざっていたのが原因で、サーバ上でsvn updateをした際に svn: Can't recode string. とエラーが出ていました。
    (これ以外にありがちなパターンだとrepositoryやローカルの.svnディレクトリへのアクセス権の問題の可能性もあるようです)
    最終的に、post-commit内で LANG=ja_JP.UTF=8 /usr/bin/svn update /path/to/working/directory >> logfile 2>&1 のように実行させることにより、問題が回避できるようになりました。

    (以前mrtgを導入した時に逆のパターンで LANG=C mrtg ... とやって実行したことがあったのを思い出してヒントを得ました)

    サーバローカルにログインして実行している時は、デフォルトの言語ロケールが日本語になっていたので、たまたまうまく動いていた模様です。色々わからず苦労したあげく、標準エラーから実行時の環境変数までログファイルに吐かせてやっと原因が把握できました。LANGの指定も、apacheのsvn呼び出し時にSetEnvしてもダメ、post-commitの中で単独で設定してもダメで、本当に気が狂いそうでした。

    こちらのトラブルと同じ原因かどうかわかりませんが、こちらのコンテンツにかなりヒントを頂き助けて頂いたので、とりあえずフィードバックまで。お役に立てば幸いです。

  2. ウェイブ より:

    同じ状況で詰まっておりました。ありがとうございます。(m_ _)m