それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Git並に、それ以上に使いやすい。mercurialをCGIで動かす。

Gitは多機能だけど、なんかシンプルさが足りない。Mercurialを使ってる。

mercurialはGITのライバル

Mercurialとは,Pythonで実装された,分散リポジトリ形式の構成管理ツールで,OpenJDK や MozillaOpenSolaris 等を始めとする多くのプロジェクトで採用されています。
Mercurialではじめる分散構成管理(藤原克則)

既にLinuxカーネルの原著作者であるLinus Torvaldsも同様の目的でGitの開発を開始していたが、MackallはLinux kernel Mailing List上でMercurialの優位性(データを差分の形式で保持することにより、リポジトリのサイズを節約している、等)を訴え、Torvaldsと論争を繰り広げたこともあった。
(wikipedia)

SVNやgithubのようにブラウジングしたい。

SVNのようにディレクトリ構造を持って、ブラウザでみることが出来ると便利なんだけど。
hgはコマンドがSubversionに類似でわかりやすい。けど、コマンドたたかないと、みられない。
つまり、コマンド覚える必要がある。面倒だ。敷居を下げたい。

hgweb.cgiというツールが用意されている。

hgwebdirをつかうと、レポジトリの中が見渡せて便利。

hgwebdirの環境

python
mercurial 1.0x以上
mod_cgi

mercurialインストール

pythonのeasy_install経由が楽です。
sudo easy_install -U mercurial

2009-05-13の最新版は1.2.1でした。

Ubuntuにインストール
sudo aptitude install python
sudo aptitude install python-dev
sudo aptitude install python-setuptools # ← easy_install です。
sudo easy_install -U mercurial

2009-05-13のUbuntu-APTでは

Mercurialはバージョンが0.95なので、hgwebdir.cgiを動きませんでした。

hgwebdir.cgiをインストール

hgwebdir.cgiを入手

インストールファイルから
sudo updatedb
locate hgweb |grep cgi
/usr/share/doc/mercurial/examples/hgwebdir.cgi
/usr/share/doc/mercurial/examples/hgwebdir.fcgi
cp /usr/share/doc/mercurial/examples/hgwebdir.cgi /var/www/hg/
サーバーから
wget http://www.selenic.com/repo/hg-stable/raw-file/tip/hgwebdir.cgi
hgwebdir.cgiを起動する。

mercurialはインストール済みなら、hgwebdir.cgiを探してApacheの実行環境に設置する。

.htaccessを追加しCGIを起動する。

.htaccess
Options +ExecCGI
AddHandler cgi-script .cgi
Order Allow,Deny
Allow from all
DirectoryIndex ./hgwebdir.cgi

hgwebdirの基本設定。

hgwebdirの基本設定はレポジトリの.hg/hgrcと、hgweb.confの二つで行います。

hgweb.conf

「*」(アスタリスク)を使うことで複数のレポジトリを簡単に登録できて楽チン。

hgweb.config
[paths]
trunk = /var/www/repos/trunk/*

レポジトリを作る。

cd /var/www/repos/trunk
mkdir files
cd files
hg init

レポジトリへPUSH出来るようにする。

 vim ./trunk/files/.hg/hgrc

これで、各レポジトリ毎に設定する。

SSLをOFFにする。

SSLをOFFにして、PUSHを許可する。

.hg/hgrc
  1 [web]
  2 push_ssl= false 
  3 allow_push = *  
  4 

ZIPでレポジトリwgetできるようにする。

.hg/hgrc
  1 [web]
  2 push_ssl= false 
  3 allow_push = *  
  4 allow_archive = zip,gz,bz2

レポジトリの追加。

hgwebdir.cgiで管理するレポジトリの追加。

hgweb.config
[paths]
trunk = /var/www/repos/trunk/*
takuya = /home/takuya/public/repos/

"*"を使うと、まとめて登録できるから楽です。

複数レポジトリ登録した結果。

`-- trunk
    |-- files
    |   `-- .hg/hgrc
    |-- bookmacro
    |   `-- .hg/hgrc
    |-- emeditor
    |   `-- .hg/hgrc
    `-- test