mercurialのhgwebをWSGIで動かす

ブログ放置しまくりでした。
久しぶりに書いてみます。

僕はメインにmercurialを使っています。
ただマルチプルヘッドが増えてきたり、ブランチが複雑になってきたりするとCUIだとgraphlogが結構見辛くなってきます。

なのでブラウザからgraphが見れるようにしましょうってことです。
まぁTortoiseHgやMacHgを使う手はあるんですがインストールしないといけない欠点があります。

では早速やってみましょう。

対象のマシンはCentOS6.2です。
mercurialはインストール済みとします。

まずソースを公式から拾ってきます。
mercurialのバージョンが古すぎると動かないかもしれません。
その場合はバージョンをあげるかソースのバージョンを下げましょう。

http://mercurial.selenic.com/downloads/

僕の環境ではhg --versionが2.1.1、使ったソースがMercurial 2.3.1 source releaseでした。

ユーザーはhoge前提とします。
ダウンロードしたら解凍します。

$ wget http://mercurial.selenic.com/release/mercurial-2.3.1.tar.gz
$ tar -xvzf mercurial-2.3.1.tar.gz

hgwebの設定ファイルを作ります。

$ cd mercurial-2.3.1
$ vi hgweb.config

適当に書きます。

[web]
encoding = "UTF-8"  # ブラウザで見た時に日本語が文字化けするので必要

[paths]
project1 = /home/hoge/repo1
project2 = /home/hoge/repo2

保存したら、hgweb.wsgiファイルを編集します。

$ vi contrib/hgweb.wsgi
# An example WSGI for use with mod_wsgi, edit as necessary
# See http://mercurial.selenic.com/wiki/modwsgi for more information

# Path to repo or hgweb config to serve (see 'hg help hgweb')
#config = "/path/to/repo/or/config"
# さきほど作ったconfigファイルのパスを指定
config = "/home/hoge/mercurial-2.3.1/hgweb.config"

# Uncomment and adjust if Mercurial is not installed system-wide
# (consult "installed modules" path from 'hg debuginstall'):
#import sys; sys.path.insert(0, "/path/to/python/lib")
# 自分の環境に合わせてpathを追加。
# 元々パスが通ってれば直す必要ないと思います。
import sys; sys.path.insert(0, "/usr/lib64/python2.6/site-packages")

# 以下省略

今回はApacheのmod_wsgiを使ってWSGIを動かしているのでApacheのconfファイルを修正します。

# vi /etc/httpd/conf.d/wsgi.conf
LoadModule wsgi_module modules/mod_wsgi.so
WSGIPythonHome /usr/local
WSGIPassAuthorization On

WSGIScriptAlias /repo /home/hoge/mercurial-2.3.1/contrib/hgweb.wsgi

# ローカル環境以外からは見えないように制限したいので
<Location /repo>
  Order Deny,Allow
  Deny from all
  Allow from 192.168.0.0/24
</Location>

これで
http://サーバーのURL/repo
にアクセスすればリポジトリの一覧が出てくると思います。
エラーが出る場合はApacheのerror_logを参考にして下さい。