MacにMercurialをインストールしてNetBeansから利用

すっかりどっぷりMercurialにハマってしまったので、自宅のMacにもインストールしてみようと思います。さて、ここはやっぱりMacPortsでインストールするべきかと思い、久しぶりにMacportsをアップデートしてみました。

>sudo port selfupdate

なんだかエラーが出ます。そういえばSnow Leopardにアップデートしてから一度もMacPortsを起動していないことを思い出し、これはやっぱりバージョンアップしたせいであるという結論を導きだしました。MacPortsのサイトにいくと、Snow Leopardについて言及していて、対応版1.8.2が出ているようなのでそれをダウンロードしてインストールします。インストール後のアップデートは正常に動作(注意:XCode3.2.1以降がインストールされていないとMacPorts1.8.2が正常に動作しません)したので、早速、Mercurialがあるのかどうか検索してみます。

>sudo port search mercurial

Mercurial @1.4.2を見つけることができたので、これをインストールします。ここまで来たら後はNetBeansからMercurialに対してコミットを実施するだけです。NetBeansの「チーム」->「Mercurial」から「プロジェクトの初期化」を選択して、既存プロジェクトを初期化します。(既存のファイル等が消える訳ではなく、Mercurialリポジトリとして動作するように管理ファイルが設置される、ということです)プロジェクトをCtrl+クリックして「Mercurial」から「コミット」を選択します。ところが、ここで問題が...。

コミットメッセージに日本語を使うと、コミットに失敗するようなのです。すぐに文字コードの問題だということはわかったのですが、Mercurialのコミットの文字コードはどこで設定すればよいのか。マニュアルを調べるとHGENCODINGという環境変数文字コードを設定できるとあります。が、NetBeansからこの設定が見えるのでしょうか?通常、.bashrcとかに設定するとは思うのですが、NetBeansはターミナルから起動する訳ではないので認識しない。NetBeansのパッケージ構成を見ると「Contents/Resources/NetBeans/bin」にnetbeansという起動用のシェルスクリプトがあります。ここにHGENCODINGの設定を行えばうまく認識してくれそうです。起動処理の直前にHGENCODINGの設定を追加します。

export HGENCODING="Shift_JIS"

# in case of macosx, the apple.laf.useScreenMenuBar property should be ideally in the Info.plist file
# but it doesn't get propagated into the executed java VM. 
case "`uname`" in
    Darwin*)
        eval launchNbexec \
            --jdkhome '"$netbeans_jdkhome"' \
            -J-Dcom.apple.mrj.application.apple.menu.about.name=NetBeans \
            -J-Xdock:name=NetBeans \
            '"-J-Xdock:icon=$progdir/../nb6.8/netbeans.icns"' \
            --branding nb \
            --clusters '"$netbeans_clusters"' \
            -J-Dnetbeans.importclass=org.netbeans.upgrade.AutoUpgrade \
            -J-Dnetbeans.accept_license_class=org.netbeans.license.AcceptLicense \
            ${netbeans_default_options} \
            '"$@"'
        ;;
    *)
        eval launchNbexec \
            --jdkhome '"$netbeans_jdkhome"' \
            --branding nb \
            --clusters '"$netbeans_clusters"' \
            -J-Dnetbeans.importclass=org.netbeans.upgrade.AutoUpgrade \
            -J-Dnetbeans.accept_license_class=org.netbeans.license.AcceptLicense \
            ${netbeans_default_options} \
            '"$@"'
        ;;
esac

文字コードShift_JISとします。これはJDK6ではデフォルトの文字コードShift_JISとなっているためです。そのためJDK6上で動作するNetBeansは、特に文字コードを設定しなければShift_JISで動作することになり、コミットメッセージもShift_JISとなります。

これでコミットメッセージに日本語を利用できるようになりました。