ホームディレクトリを整備
cp -r /etc/skel/ $HOME/
webhomeでhgリポジトリ初期化
printf 'syntax: glob\n*\n' > .hgignore hg init; hg add *; hg ci -m init
鍵生成
ssh-keygen -t rsa
これを中央サーバ側に登録しておき、 クライアント側からまず一回接続。yesで known_hosts に登録。
~/.ssh/config
に
Host server HostName ほんとのサーバ名
マスター側に push してクローン作成。
hg clone koeki-prj ssh://server/koeki-prj
マスター側をhg的上流にするならいったん消して逆方向に clone する。今回は元側に path を定義して利用してみる。
[paths] master = ssh://server/koeki-prj
これで「hg pull master -uv
」
をどこかに仕込んでおけばアップデートできる。
マスター側に更新が入って来たらメイルを流すフックを作る。
マスター側の .hg/hgrc
に。
[hooks] changegroup.mail = .hg/logsend
そしてここで起動している .hg/logsend
を以下のように作る。
#!/bin/sh
rcpt=メイル送信先
PWD=`pwd`
TOP=`dirname $PWD`
MODULE=`basename $TOP`
PATH=/usr/local/bin:$PATH
pipe=/r/cvsroot/var/run/vclog
SUBJECT="Commit to repo:$MODULE on $HOST"
tmpfile=`mktemp /tmp/hglog-XXXXXXXX`
rmtmp () {
rm -f $tmpfile
}
trap rmtmp INT QUIT TERM
hg update -C > /dev/null 2>&1;
(hg log -p -vr $HG_NODE:tip \
| egrep -v '^(changeset|parent|date):' \
| sed 's/^description:$/--------------------------------------------------/' \
| cat -s ) > $tmpfile
chmod +r $tmpfile
echo $tmpfile $rcpt "$SUBJECT" > $pipe
rmtmp
このスクリプトはhgのフックとして動く。hg自体がchroot空間で 動き、そこにはメイル環境がないのでメイル送信できない。 そのため一時ファイルのパス名とメイル送信先を $pipe ファイルに 書き出すのみで終了する。chrootの外、つまり本体空間では $pipe ファイルをreadし続けるスクリプトを起動しておいて、 データが来たらファイルを送信先に送る。