Windowsのコンソールで PagerExtension が動作しない問題を追いかける¶
Mercurial Advent Calendar 2011 が実施されるということで、忙しいのにエントリーしてしまった9日目担当の清水川です。勢い大事ね。どこかから結婚式レポート書けとか聞こえてきますが、それはまた近いうちに。
さて、この記事書き始めた時点で担当日の23時20分を過ぎてる訳ですが、間に合うんでしょうか?
私の.hgrc¶
とりあえず.hgrcを晒しておきます。Windowsで使っているのでそこかしこにWindows向けの記述がありますが大して設定はしていませんね:
[ui]
username = Takayuki SHIMIZUKAWA
merge = winmergeu
editor = "C:\Program Files\vim73\vim.exe"
[tortoisehg]
vdiff = winmergeu
tabwidth = 4
editor = C:\Program Files\vim73\gvim.exe
fontcomment = メイリオ,10,-1,5,50,0,0,0,0,0
fontlist = メイリオ,9,-1,5,50,0,0,0,0,0
fontlog = メイリオ,10,-1,5,50,0,0,0,0,0
fontoutputlog = メイリオ,8,-1,5,50,0,0,0,0,0
[alias]
pp = pull -u
pr = pull --rebase
ba = branches -a
[extensions]
rebase =
graphlog =
transplant =
mq =
record =
histedit = C:\Users\taka\hg\hg_histedit.py
Pager拡張 on Windows¶
Windows向けネタということで、Windowsのコンソールでhgコマンドを使う上で便利になるようにPager拡張(PagerExtension)をWindowsで使うためのhackを書こうと思ったのですが、結局うまく動作しませんでした。
Pager拡張は、画面スクロールしてしまうような長い出力(hg log
とか)をページング表示できるようにする機能です。Unixなどでは .hgrc (Mercurial.ini) に以下のように書いて有効にします。
[pager]
pager = LESS='FSRX' less
[extensions]
pager =
詳しい使い方は PagerExtension に書いてありますが、これはWindowsではうまく動作しません。 pager = LESS='FSRX' less
の部分を pager = more
と書いたりvim.exeを指定してみたりいろいろやってみたのですがうまくいきません。以下のようにエラーが表示されるばかりです:
C:\\Project\\sphinx-doc\\sphinx-jp> hg log
** unknown exception encountered, please report by visiting
** http://mercurial.selenic.com/wiki/BugTracker
** Python 2.6.6 (r266:84297, Aug 24 2010, 18:13:38) [MSC v.1500 64 bit (AMD64)]
** Mercurial Distributed SCM (version 2.0)
** Extensions loaded: rebase, graphlog, transplant, mq, record, histedit, pager
(ああ、この記事の締め切りまであと30分です)
PagerExtension はどこにあるの?¶
私の環境ではTortoiseHGをインストールしてパスを通してコンソールからhgコマンドを使用しています。TortoiseHGのインストール先にはhg.exeなどと一緒にlibrary.zipが置かれていて、Pythonのコードはすべてこの中に入っています。Mercurialの拡張系はこのzipの中のhgextディレクトリに入っているので、.hgrcの [extensions] セクションの pager = というのはつまりここにある pager.pyo を有効にしているわけですね。
C:\Develop\TortoiseHg\library.zip
+ hgext
+ pager.pyo
拡張子 pyo は最適化されたバイトコードなのでこれを読んでもよくわかりません。library.zipにはpager.pyは入っていなかったので、pager.pyを読みたければ別途ソースコードを入手する必要があります。
で、このpager.pyを入手して、夕食前に30分ほど眺めていたのですが、拡張の作法とかよくわからないので、結局よくわかりませんでした。
WindowsではPager拡張は動作しないのか?¶
ちょっとGoogleで検索してみたところ、 http://mercurial.selenic.com/bts/issue1677 にIssueが上がっており、2011/6/5に「MLでレビューしてほしい」というコメントがありますが、MLの方では http://www.selenic.com/pipermail/mercurial/2011-June/038602.html のようにレビュー依頼のメールが投稿されたまま誰も見てくれていないようです。
誰かパッチ動作確認してあげればいいのにね、と思いつつ、Windowsのコンソール向けの修正パッチなんて需要が少ないのでしょう。しょうがないですね。自分も時間がとれないので・・ね。
(締め切りまであと3分!)
まとめ¶
つかれました。眠いです。
明日は、10日目担当 @gab_km さん、よろしくお願いします。
追記(12/09 24:40)¶
前述のpatchはMercurial-1.6の頃のものだったので2.0.1向けに書き直して以下に置きました。 まだ動作が怪しいのでもうちょっと直そうかな・・そのうち・・・