- お知らせ -
  • 当wikiのプログラムコードの表示を直してみました(ついでに長い行があると全体が下にぶっ飛ぶのも修正)。不具合があればBBSまでご連絡下さい。

Mercurial

はじめに Edit

経緯的なもの

  1. Windows版のマルチバイト周りがいろいろと不安
    参考:../日本語ファイル名、日本語コミットログ関係
  2. Cygwin 1.7のLANG=ja_JP.UTF-8で使うとgitと同様に今のところ問題ない
  3. コマンドラインだけだとログ確認やらが大変ヽ(`Д´)ノ
  4. TortoiseHgのLinux版もあるし、確かUI部分はマルチプラットフォームなはず
  5. hgtkというのを使えばいいらしい ←今ココ

↓こんな感じ

mercurial-hgtk-log-on-cygwin.jpg



※一応起動してログは見られましたが、絶賛試行中です!!!

環境 Edit

  • Windows Vista SP2 32bit
  • Cygwin 1.7.7(0.230/5/3) i686 Cygwin
    • export LANG=ja_JP.UTF-8 されている環境
    • Python 2.6.5
    • Mercurial 1.7

あらかじめ、Cygwin環境は整っていて、Cygwinのインストーラーsetup.exeを使いPythonとMercurialはインストールしてあるものとします。

試してみる Edit

hgtkのページ
を参考にしながらインストールしてみます。

まずはpygtkを入れる Edit

hgtkはpygtkに依存するので、Cygwinのsetup.exeでpython-gtk2とかいうのを入れる。

ここでは入れたとする。

Cygwin/Xも入れる Edit

Cygwin/Xを入れないとGUIアプリが起動できない&操作できない
インストールしていないなら、setup.exeでX11 serverやその他(xorg-server, xinit, xorg-docs, X-start-menu-icons)を入れておく

参考:Setting Up Cygwin/X

hgtkのインストール Edit

インストールというかTortoiseHgのリポジトリからソースを入れる形。

1
2
3
4
5
6
7
8
9
10
11
# TortoiseHgを置くための適当なディレクトリに移動
$ cd /path/to/mercurial
# TortoiseHgの安定版のソースを持ってくる
$ hg clone http://bitbucket.org/tortoisehg/stable tortoisehg
  :
  :
# ダウンロードしてきた中に含まれるhgtkをパスが通ったディレクトリに
# シンボリックリンクを貼って置いておく
# ※参考サイトでは、~/bin になってますが個人的な利便性のため/usr/local/binにしてあります。
# 環境に合わせて変えてください
$ ln -s /path/to/mercurial/tortoisehg/hgtk /usr/local/bin

使ってみる Edit

試しに、tortoisehgのリポジトリをのぞいてみる

1
2
3
4
5
6
$ cd /path/to/mercurial/tortoisehg/hgtk
# Xサーバーを起動しておく
$ XWin.exe :0 -ac -multiwindow -dpi 100
$ hgtk log

# 見慣れないウインドウが立ち上がる

行けましたか?

→もし、hgtkが立ち上がらない場合はこちらの問題を参照してください

mercurial-hgtk-log-on-cygwin.jpg

Cygwinで入れたTortoiseHgのアップデート Edit

後日、このインストールしたTortoiseHgをアップデートしたいときは、hg updateでstableに追従していけばよいかと

1
2
3
$ cd /path/to/mercurial/tortoisehg/
$ hg update stable
 :

動かない時の対処 Edit

hgtkがImportError: No module named pygtkで動かない… Edit

結論:pygtk入れる

下記のようなエラー表示

1
2
3
4
5
6
$ hgtk
Traceback (most recent call last):
  File "/usr/local/bin/hgtk", line 30, in <module>
    import pygtk
ImportError: No module named pygtk
$ 

cleverdecode:: command not foundでfatal errorでcloneできない Edit

結論:Windows版のmercurialの設定(hgext.win32textとか、cleverdecode、cleverencodeとか)が残ってたので消す

下記のようなエラーが出た場合:

$ hg clone http://bitbucket.org/tortoisehg/stable tortoisehg
real URL is https://bitbucket.org/tortoisehg/stable
requesting all changes
adding changesets
adding manifests
adding file changes
added 9886 changesets with 14218 changes to 1170 files
updating to branch default
/bin/sh: cleverdecode:: command not found
      1 [main] python 10120 c:\cygwin\bin\python.exe: *** fatal error - unable to remap \\?\c:\cygwin\lib\python2.6\lib-dynload\itertools.dll to same address as parent: 0x440000 != 0xBA0000
Stack trace:
Frame     Function  Args
002283A8  6102749B  (002283A8, 00000000, 00000000, 00000000)
00228698  6102749B  (61177B80, 00008000, 00000000, 61179977)
002296C8  61004AFB  (611A136C, 612426CC, 00440000, 00BA0000)
End of stack trace
      2 [main] python 8380 fork: child 10120 - died waiting for dll loading, errno 11
abort: Resource temporarily unavailable

X serverを起動していてもhgtk logが”fatal error - unable to remap”エラーが出て起動しない Edit

hgtk statusは起動するみたい。

たぶん解決策:

  • Cygwinのプロセスを全部終了して、コマンドプロンプトからashでCygwinのrebaseallをする
  • rebaseallをするも、
    ”FixImage (/usr/x86_64-w64-mingw32/sys-root/mingw/bin/libgcc_s_sjlj-1.dll) failed with last error = 13”
    というエラーが出る場合は、/bin/rebaseallを書き換えて、上記のdllを無視するようにさせる。

例:

コマンドプロンプトにて、

> C:\cygwin\bin\ash.exe /bin/rebaseall
/usr/lib/cygicudata.dll: skipped because nonexistent
/usr/lib/cygicui18n.dll: skipped because nonexistent
/usr/lib/cygicuio.dll: skipped because nonexistent
/usr/lib/cygicule.dll: skipped because nonexistent
/usr/lib/cygiculx.dll: skipped because nonexistent
/usr/lib/cygicutu.dll: skipped because nonexistent
/usr/lib/cygicuuc.dll: skipped because nonexistent
FixImage (/usr/x86_64-w64-mingw32/sys-root/mingw/bin/libgcc_s_sjlj-1.dll) failed
 with last error = 13

で、エラーが出たので、以下のパッチのように/bin/rebaseallを書き換える

1
2
3
4
5
6
7
8
9
10
--- /bin/_rebaseall.old 2011-01-16 18:58:21.803687600 +0900
+++ /bin/rebaseall      2011-01-16 18:58:29.349704800 +0900
@@ -107,7 +107,7 @@
 # Create rebase list
 find /etc/setup -name '*.lst.gz' | xargs gzip -d -c |
     grep -E "\.($Suffixes)\$" |
-    sed -e '/cygwin1\.dll$/d' -e '/cyglsa.*\.dll$/d' -e 's/^/\//' >"$TmpFile"
+    sed -e '/cygwin1\.dll$/d' -e '/cyglsa.*\.dll$/d' -e 's/^/\//' -e '/\/sys-root\/mingw\/bin/d' >"$TmpFile"

 # Append user supplied file list, if any

もう一度rebaseallすると、 ”FixImage〜〜with last error = 13”のエラーは出ずに完了。

rebaseallの代わりにpeflagsallの方がいいかも。その場合は

同様にして、こんな感じで

> C:\cygwin\bin\ash.exe /bin/peflagsall
出力は似た感じ

(参考)原因はこれっぽい:

実際に出たエラー内容:

コンソールに出るエラー

1
2
3
4
5
6
7
8
9
10
11
12
# Xサーバーを起動しておく
$ XWin.exe :0 -ac -multiwindow -dpi 100
$ hgtk log
 :
 1 [main] python 9260 C:\cygwin\bin\python.exe: *** fatal error - unable to remap C:\cygwin\bin\cygglib-2.0-0.dll to same address as parent: 0x19FE0000 != 0x6AA40000
Stack trace:
Frame     Function  Args
00229488  6102749B  (00229488, 00000000, 00000000, 00000000)
00229778  6102749B  (61177B80, 00008000, 00000000, 61179977)
0022A7A8  61004AFB  (611A136C, 61242024, 19FE0000, 6AA40000)
End of stack trace
      2 [main] python 9892 fork: child 9260 - died waiting for dll loading, errno 11

起動は出来たが、Xの画面にこんなエラー画面が出る。

#!python
** Please report this bug to http://bitbucket.org/tortoisehg/stable/issues
** Mercurial version (1.7).  TortoiseHg version (1.9.1+67-c1f759023025)
** Command: log
** CWD: /path/to/mercurial/tortoisehg
** Extensions loaded: convert, mq
** Python 2.6.5 (r265:79063, Jun 12 2010, 17:07:01) [GCC 4.3.4 20090804 (release) 1]
Traceback (most recent call last):
  File "/path/to/mercurial/tortoisehg/tortoisehg/hgtk/hgtk.py", line 74, in dispatch
    return _runcatch(u, args)
  File "/path/to/mercurial/tortoisehg/tortoisehg/hgtk/hgtk.py", line 202, in _runcatch
    return runcommand(ui, args)
  File "/path/to/mercurial/tortoisehg/tortoisehg/hgtk/hgtk.py", line 272, in runcommand
    return _runcommand(lui, options, cmd, d)
  File "/path/to/mercurial/tortoisehg/tortoisehg/hgtk/hgtk.py", line 323, in _runcommand
    return checkargs()
  File "/path/to/mercurial/tortoisehg/tortoisehg/hgtk/hgtk.py", line 277, in checkargs
    return cmdfunc()
  File "/path/to/mercurial/tortoisehg/tortoisehg/hgtk/hgtk.py", line 271, in <lambda>
    d = lambda: util.checksignature(func)(ui, *args, **cmdoptions)
  File "/usr/lib/python2.6/site-packages/mercurial/util.py", line 427, in check
    return func(*args, **kwargs)
  File "/path/to/mercurial/tortoisehg/tortoisehg/hgtk/hgtk.py", line 435, in log
    gtkrun(run, ui, *pats, **opts)
  File "/path/to/mercurial/tortoisehg/tortoisehg/hgtk/hgtk.py", line 332, in gtkrun
    portable_fork(ui, opts)
  File "/path/to/mercurial/tortoisehg/tortoisehg/hgtk/hgtk.py", line 115, in portable_fork
    shell=True)
  File "/usr/lib/python2.6/subprocess.py", line 633, in __init__
    errread, errwrite)
  File "/usr/lib/python2.6/subprocess.py", line 1049, in _execute_child
    self.pid = os.fork()
OSError: [Errno 11] Resource temporarily unavailable

TODO Edit

今後の課題

  • [TODO]: 日本語が見られるかの確認
  • [TODO]: GUIの日本語化表示
  • [TODO]: Pythonのiniparse入れて設定できるように
  • [TODO]: 見た目がTortoiseHgと比べてダサイ?

参考サイト Edit


Show recent 10 comments. Go to the comment page.

  • "fatal error - unable to remap"の問題が解決してない気がする(たまに出る) -- TOBY 2011-01-16 (Sun) 21:55:19
Name:


Attach file: filemercurial-hgtk-log-on-cygwin.jpg 214 download [Information]
Front page   Edit Freeze Diff Backup Upload Copy Rename Reload   New Pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2011-01-16 Sun 20:27:13 JST (2501d)