Trac 月 1.6.0 から Trac Lightning 3.1.1 にアップグレードしたら Subversion へのコミットでエラー

先日に引き続き、Trac 月 1.6.0 から Trac Lightning 3.1.1 にアップグレード中です。


上書きインストールだと上手くいかなかったので、

  1. Trac 月のデータをバックアップ
  2. Trac 月をアンインストール
  3. Trac Lightning をインストール
  4. projects をバックアップデータで上書き
  5. trac.ini を編集
  6. upgrade.bat 実行

を行ったところ、trac-admin の repository resync はエラー出なくなったし、マルチリポジトリも使えるようになりました。


これで一件落着と思っていたのに、リポジトリの変更をコミットしようとしたらエラー…。Subversion でコミットしたときに実行されるフックスクリプトが変わっていたのが原因みたいでした。

上記ページで紹介されているスクリプトを配置してみましたが、追加してコミットすると MERGE っていうエラー。さらに、削除してコミットすると Trac に反映されませんでした。


仕方ないので

  1. Trac Lightning で新規にプロジェクトを作成
  2. 作成したプロジェクトからフックスクリプトをコピー
  3. コピーしたフックスクリプトに書かれているプロジェクト名を変更

という手順で回避。この手順を検証時に毎回やるのは面倒なので、Python でスクリプト書いて、少しだけ楽してみました。

# -*- coding: utf-8 -*-

import glob
import os

TRAC_LIGHT_HOME = "C:/TracLight"
PROJECTS_DIR = TRAC_LIGHT_HOME + "/projects"
SVN_DIR = PROJECTS_DIR + "/svn"

def generate_file(project_name, hook_path):
    try:
        file = open(hook_path, "w")
        file.write("::Call the TRAC post-commit hook\n\n")
        file.write("set PROJECT=%s\n" % project_name)
        file.write("set TRAC_LIGHT_HOME=C:\\TracLight\n")
        file.write("set PYTHONHOME=C:\\TracLight\\python\n")
        file.write("set TL_PROJECT_HOME=C:\\TracLight\\projects\n\n")
        file.write("set TRAC_ENV=%TL_PROJECT_HOME%\\trac\\%PROJECT%\n\n")
        file.write(":: -- Retrieve the information that Subversion gave to the hook\n")
        file.write("set REPOS=%1\n")
        file.write("set REV=%2\n")
        file.write('"%PYTHONHOME%\\Scripts\\trac-admin.exe" "%TRAC_ENV%" changeset added "%REPOS%" "%REV%"\n')
    finally:
        file.close()
    print(u"'%s' を更新しました。" % hook_path)

list = glob.glob(SVN_DIR + "/*")
for path in list:
    if not os.path.isfile(path):
        # フォルダのとき
        hook_path = path + "/hooks/post-commit.bat"
        project_name = os.path.basename(path)
        generate_file(project_name, hook_path)


フックスクリプトを修正することで、リポジトリのコミットもできるようになったし、Trac と連携させている複数のリポジトリのコミット内容をタイムラインやリポジトリブラウザで見れるようになりました。その他、Trac の機能は一通り動いたので、今度こそ作業終了であってほしいところです。