‘mercurial’ タグのついている投稿

Eclipse JunoでMercurialEclipseがエラーを出す問題

EclipseでMercurialEclipseを使っているのですが、Junoにアップデートしてから事あるごとにポップアップでエラーが表示されて困っていました。

ヒストリーを表示したときや
An error has occurred. See error log for more details.
com.vectrace.MercurialEclipse.history.GraphLogTableViewer cannot be cast to org.eclipse.ui.part.PageBookView$SelectionProvider
PerspectiveをJavaに切り替えた時などに発生していました。

同じ現象がこちらで現在進行中ですが
https://bitbucket.org/mercurialeclipse/main/issue/320/exception-on-history-when-using-eclipse

MercurialEclipse 2.0.1.v201210021536
というバージョンに問題があるようです。

ところがこのバージョン、公式のリポジトリにはなく、調べてみたら、以下のリポジトリを有効にしていると入るようです。
http://cbes.javaforge.com/update

Window→Preferences→Install/Update→Available Software Sitesでこのリポジトリを除外して、公式
でアナウンスされている
http://mercurialeclipse.eclipselabs.org.codespot.com/hg.wiki/update_site/stable
を登録すれば解決でした。

MercurialEclipse    2.0.0.201208160020
がインストールされました。

もし、すでにv201210021536などの新しいバージョンが入ってしまっている場合はHelp→About Eclipse→Installation Details→Installation Historyから、古い日付を選択してMercurialEclipseをRevertしてください。


hg cloneでcertificate verify failed

httpsのリポジトリからcloneしようとしたらSSLのverifyエラーが発生しました。

PS C:\repo> hg clone https://repository.sample.com/hg/test/ C:\repo\test
abort: error: _ssl.c:490: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

環境はWindows、サーバのSSL証明書はオレオレ証明書です。

解決策はさっくりとverify無視すればOKです。

    --insecure          do not verify server certificate (ignoring
                        web.cacerts config)
PS C:\repo> hg clone https://repository.sample.com/hg/test/ C:\repo\test --insecure

Warningは出ますが、これで使えます。

push/pull時もinsecure付けないといけないのは難点ですね。

ちゃんと解決する方法は公式ドキュメントに書いてあるっぽいのですが、気力なくなってしまったのでそのうち…

CACertificates – Mercurial


ローカルで作成していたリポジトリをリモートサーバーに設置する方法

個人でローカルのMercurialを使って開発していたけど、リモートサーバーに置きたくなった場合の作業です。

基本的には、ローカルのリポジトリファイル一式をリモートサーバーに持って行ってhg cloneするだけでOKです。
とりあえず最終状態をコミットしておきます。

$ cd test_local
$ hg commit -m "move to remote"
$ tar cvzf test_local.tar.gz ./test_local

で、test_local.tar.gzをリモートサーバーに転送します。

リモートサーバーでは、適当に/home以下にでも配置して展開します。今回はApacheを動かしているwwwユーザのhomeディレクトリで展開します。

$ cd /home/www
$ tar xvzf test_local.tar.gz
$ chmod www:www -R ./test_local

他のリポジトリが置いてある場所と同じ場所(今回は/var/lib/hg)に移動します。

$ cd /var/lib/hg
$ mkdir test_local
$ cd test_local
$ hg clone /home/www/test_local .

.hg/hgrcは新しいパスに上書きされます。ここからはpushしないので、消してしまっても大丈夫だと思います。

で、hgweb.configのpathsを追加します。

[paths]
test_local = /var/lib/hg/test_local

サーバ側はこれだけです。

ローカル側は、hg pullにソースパスを指定すればそこから差分を取得できます。

が、面倒なので.hg/hgrcを編集して、hg pullコマンドだけでpullできるようにします。

[paths]
default = https://user1:password@repository.sample.com/hg/test_local

ユーザ名とパスワードもURLに含めることによって認証の手間も解決できます。


httpでアクセスできるMercurialサーバを作る

サーバはCentOS 5.8です。Mercurialは2.2.2を使います。

まずは下準備で、Mercurialをインストールします。yum install mercurialでインストールできるバージョンは古いので、easy_installを使います。

# yum install gcc python python-devel python-setuptools
# easy_install mercurial

PythonとMercurialがインストールされているか確認します。以下のコマンドで何もエラーがでなければOKです。

# python
>>> import mercurial
>>> [Crtl+D]

Mercurialのリポジトリからhgweb.cgiを探します。自分の環境ではMercurialをeasy_installでインストールしたのでhgweb.cgiが入っていませんでした。

なので、リポジトリから落としてきます。

http://selenic.com/hg/file/85a358df5bbb/hgweb.cgi

以前は複数のリポジトリを公開するためには、hgwebdir.cgiというファイルを使うことになっていましたが、統合されたようで、hgweb.cgiでどちらもできるようになっています。

下記の日本語訳のページは、情報が古いので注意してください。

JapaneseCGI_Install – Mercurial

英語ページを参照するのが正しいです。

PublishingRepositories – Mercurial

Apache用にwwwユーザを作ってあるので、/home/www/hgweb.cgiに設置しました。hgweb.cgiを開いて、configの行を変更します。

config = "/home/www/hgweb.config"

hgweb.cgiには実行権限を付けておきます。

# chmod u+x /home/www/hgweb.cgi

同じディレクトリにhgweb.configを作成します。

[web]
encoding = UTF-8

[paths]
test = /var/lib/hg/test

リポジトリのパスは/var/lib/hg以下に設置することにしました。ドキュメントでは/home/user/hgの下に置くことになっています。

# mkdir /var/lib/hg
# chown www:www /var/lib/hg
# su www
$ cd /var/lib/hg
$ mkdir test
$ cd ./test
$ hg init

wwwユーザがhgを使えるようにしておきます。/home/www/に.hgrcを作成してユーザ情報を書き込みます。

$ vi ~/.hgrc
[ui]
username = webadmin <webadmin@sample.com>

で、/var/lib/hg/testに適当にファイルを作ってコミットします。コミットがひとつもないと、Webからアクセスできません。

$ touch index.html
$ hg add index.html
$ hg commit -m "first commit"

次にApacheの設定です。ScriptAliasをVirtualHostの中にでも書いておきます。

ScriptAlias /hg "/home/www/hgweb.cgi"

ここまでできたら、Apacheを再起動します。

# apachectl restart

これで、http://repository.sample.com/hg/testのようにアクセスできます。ブラウザでも、hg cloneコマンドでも可能です。

リポジトリを追加するときは、/var/lib/hg以下にディレクトリを新規作成して、そのディレクトリでhg initを実行、/home/www/hgweb.configに追記の手順です。

次に認証を追加します。Apacheの設定ファイルの、先ほどのScriptAliasの下にLocationディレクティブを追加します。

<Location /hg>
    AuthType Basic
    AuthName "Mercurial repositories"
    AuthUserFile /home/www/hg/hgusers
    AuthGroupFile /home/www/hg/hggroups
    Require valid-user
</Location>

ユーザとグループで管理できるようにしました。(グループ作りましたけど意味はなかったです)

# su www
$ mkdir ~/hg
$ cd ~/hg
$ htpasswd -c ./hgusers user1

同じ場所にhggroupsファイルも作成してグループを定義します。svnのdavのようにここでリポジトリのアクセス権限を設定したりすることはできません。

testgroup:user1

グループの書き方はこちらを参照のこと。

ユーザー認証によるアクセス制限(ベーシック認証編)(2/2)

webからのpushができるようにします。/home/www/.hgrcにセクションを追加します。

[web]
allow_push = *

この設定は各リポジトリの.hg/hgrcに書いても大丈夫のようです。そうすれば、レポジトリごとに制御できます。

問題はグループごとにアクセスできるリポジトリを制御することなのですが、これは簡単にはできないようです。

ユーザごとには読み込み制御が可能です。allow_readを使います。

この場合は、/var/lib/hg/test/.hg/hgrc(なければ作成)にwebセクションを書きます。

[web]
allow_read = user1

これで大丈夫です。トップページのリストにも、allow_readに含まれていないユーザはリポジトリが表示されません。allow_readは書かなければallow_read=*としたことと同じになります。他にもdeny_readが使えます。

参考

configuration – Mercurial set per user rights – Server Fault

それと、httpsを使わない場合はpush_ssl = falseをhgweb.configのwebセクションに書いておく必要があります。httpsでアクセスさせる場合はそのままでOKです。


Windows 7 x64にMercurialからgitを操作できるhg-gitをインストールする

Windows 7 x64にhg-gitをeasy_installから入れようとして、ハマったことのメモです。

hg-gitについてはこちら。
Hg-Git Mercurial Plugin

コマンドプロンプトから
C:\> C:\Python27\Scripts\easy_install.exe hg-git
C:\> C:\Python27\Scripts\easy_install.exe -Z hg-git
でインストールできます。(-Zオプションを付けないと、hg_git-0.3.2-py2.7.eggに圧縮されてしまうので、あとでmercurial.iniにパスを指定できなくなる)

error: Setup script exited with error: Unable to find vcvarsall.bat

まずはvcvarsall.batが見つからないと怒られます。これはVisual C++ 2008 Express Edition with SP1をインストールすればOKです。2010は使えないようなので、2008をインストールします。
Visual Studio 2008 Express | Microsoft Visual Studio
ダウンロードリストからC++を選んでダウンロードしてください。

C:\Python27>Scripts\easy_install.exe hg-git
Searching for hg-git
Best match: hg-git 0.3.2
Processing hg_git-0.3.2-py2.7.egg
hg-git 0.3.2 is already the active version in easy-install.pth

中略

  File "C:\Python27\lib\distutils\msvc9compiler.py", line 299, in query_vcvarsall
    raise ValueError(str(list(result.keys())))
ValueError: [u'path']

で、次はValueError: [u’path’]のエラーが出たので、調べると、PythonのIssueに上がっている問題のようです。パッチが出ていますが、未だに取り込まれていない様子。

Issue 7511: msvc9compiler.py: ValueError when trying to compile with VC Express – Python tracker

ここから、vcvars4.diff(最新のdiff)をダウンロードします。

パッチを充てたいので、Windowsで動くpatchを探すと、

UnxUtils | Free software downloads at SourceForge.net

ここからダウンロードできるようです。

が、なぜかpatch.exeが管理者権限を要求するので、ちょっと怖いので結局手作業でmsvc9compiler.pyをdiffに従って編集しました。まぁ、大した量ではないので…



2012/04/18追記:

コメント欄で原因と対策を教えていただきました。Windowsがpatch.exeというファイル名を勝手にブロックするようです。patchという文字列が入っていて、実行可能形式の拡張子(exeとかscrとか)だと発動するようなので、p.exeなどにファイル名を変更すれば大丈夫です。

パッチを当てられないWindows VISTA

ちなみに、install.exeやsetup.exe、update.exeなども同じ原因で権限を要求されます。

MSDNでの公式情報はこちら。

New UAC Technologies for Windows Vista

で、再度実行すると、また新しいエラーが出ました。

Reading http://launchpad.net/dulwich
Best match: dulwich 0.8.3
Downloading http://samba.org/~jelmer/dulwich/dulwich-0.8.3.tar.gz
Processing dulwich-0.8.3.tar.gz
Running dulwich-0.8.3\setup.py -q bdist_egg --dist-dir c:\users\***\appdata\local\temp\easy_install-ghb21p\dulwich-0.8.3\egg-dist-tmp-sc0we9
error: Setup script exited with error: Visual Studio Express: need 64-bit tools from the SDK

Windows SDKの64bit版C++ Compilerをインストールしろ、ということなのですが、罠があります。最新のSDKをインストールしても解消しません。

MathWorks 日本 – How can I set up Microsoft Visual Studio 2008 Express Edition for use with MATLAB 7.7 (R2008b) on 64-bit Windows? – MATLAB & Simulink

こちらの情報によると、「Windows SDK for Windows Server 2008 and .NET Framework 3.5」か、「Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1」でないとダメのようです。

今回は「Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1」をインストールして成功しました。SDKのインストールの最後に致命的エラーとか表示されましたが、特に問題はなかったようです。

これで再度、easy_install hg_gitを実行すれば、

Installed c:\python27\lib\site-packages\dulwich-0.8.3-py2.7-win-amd64.egg

Finished processing dependencies for hg-git

となって、インストールがやっと成功しました。

最後に%userprofile%\mercurial.iniを開いて、

[extensions]

bookmarks =

hggit = C:\Python27\Lib\site-packages\hg_git-0.3.2-py2.7.egg\hggit

のようにhggitの場所を指定してやればOKです。