心魅 - cocoromi -

半角スペース時々全角

さくらインターネットでmercurialを使う

sakura mercurialググるとそこそこヒットする。
でも一カ所のやり方だけをまねてもうまくいかなかったから、まとめる。


目標:
1.sshしてhgコマンドが使えるようにする
2.ssh経由のhgリポジトリとして動作するようにする

1.sshしてhgコマンドが使えるようにする

これはすぐできる。
http://www.dodgson.org/omo/t/?date=20070519
ここの、「入手 展開 インストール」をそのまま実行。


そのまま、local/binにPATHを通しても良いのだが、目標2でちょっとやっかいなことが起きるので
$HOMEに$HOME/local/binへのリンクを貼る

cd
ln -s local/bin bin


もしすでに$HOME/binが存在するならhgコマンドのリンクだけ貼っても良い。

cd
ln -s local/bin/hg bin/hg
hg init hoge

とかやって動けばOK

2.ssh経由のhgリポジトリとして動作するようにする

さて、1で動くようになったhgを使ってリポジトリを初期化しcloneしようとするとmercurialモジュールが無いと怒られる。

$ hg clone ssh://foo@wwwXXX.sakura.ne.jp/SOME_REPOS_PATH

remote: Traceback (most recent call last):
remote:   File "/home/foo/bin/hg", line 10, in ?
remote:     from mercurial import commands
remote: ImportError: No module named mercurial
abort: no suitable response from remote hg!


これはssh経由でリモートのhgを実行するときに、ユーザ定義の環境変数などが読み込まれないのが原因。
#.zshrcや.bashrcなどが読み込まれない


これをクリアするためにpythonの設定をする。
http://www.emptypage.jp/notes/pymods-on-sakura.html#ID000301
ここが大変参考になる。
おそらくここに掲載されているどの手法を使ってもうまく行くが、"アイデアその2、user モジュールのからくりを使う"を採用したらうまく行った。

cd
vi .pythonrc.py
#!/usr/bin/env python

import sys
if not '/home/foo/local/lib/python' in sys.path:
        sys.path.append('/home/foo/local/lib/python')
cd
cd bin
vi hg
#!/usr/local/bin/python
#
# mercurial - scalable distributed SCM
#
# Copyright 2005, 2006 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to theterms
# of the GNU General Public License, incorporated herein by reference.

#ここ追加
import user

from mercurial import commands

commands.run()

パスは適宜変えてほしい。