secretbase.log

.NET/C#/Pythonなど

第3回 #TokyoMercurial に参加してきました (hgsubversionの紹介)

概要

第2回に引き続き参加してきました。 Mercurialに関する何かをやる会で、基本もくもく会です。

hgsubversion のテスト環境についてもくもく

    • f:id:cointoss1973:20120416224058j:image:w360

今回は、事前に hgsubversion について調べたことを発表する予定だったので、”もくもく”は、hgsubversionのテストコードを動作させることを目的としました。


hgsubversion のテスト(Windows編)

最初は、TortoiseHg + hgsubversion がメインの動作環境なので、Windows上で動作させようとしたのだが、import mercurial でエラー。モジュールパスが足りないようです。
TortoiseHgの場合、C:\Program Files\TortoiseHg にパスを通せば良いということで、PYTHONPATHに設定。

$ python
Python 2.6.6 (r266:84297, Aug 24 2010, 18:46:32) [MSC v.1500 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', 'c:\\Python26\\lib\\site-packages\\setuptools-0.6c11-py2.6.egg', 'c:\\Python26\\lib\\site-packages\\nose-0.11.0.dev-py2.6.egg', 'c:\\Python26\\lib\\site-packages\\coverage-3.5.1-py2.6-win32.egg', 'C:\\Program Files\\TortoiseHg', 'C:\\Windows\\system32\\python26.zip', 'c:\\Python26\\DLLs', 'c:\\Python26\\lib', 'c:\\Python26\\lib\\plat-win', 'c:\\Python26\\lib\\lib-tk', 'c:\\Python26', 'c:\\Python26\\lib\\site-packages']
>>>
>>> import mercurial
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named mercurial
>>>

んー、zipファイルにmercurialモジュールがあるようなのですが、ここで断念。

2012/04/18 追記

@さんのつぶやきを試してみると、import mercurial はできるようになりました。しかし、import urllib でエラーが出るようになってしまいました

>>> import mercurial
>>>
>>> import urllib
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "urllib.pyo", line 26, in <module>
  File "socket.pyo", line 46, in <module>
  File "_socket.pyo", line 12, in <module>
  File "_socket.pyo", line 10, in __load
ImportError: DLL load failed: %1 は有効な Win32 アプリケーションではありません。

https://gist.github.com/2399390/a91cb6f5fb16293231bf4262c0a26a0ab26ec9ff

ただ、python が 32bit で TortoiseHg が 64 bit なのでそのあたりの影響がありそうです。



hgsubversion のテスト(Linux編)

hgsubversion自体のテストだから、Linuxでもいいのでは?というLinuxでテストすればLinuxに必要なモジュールをインストールして hgsubversion のテストを行いました。

  • インストール
$ sudo apt-get install build-essential apache2-dev libsvn-dev libaprutil1-dev
  • nose によるテスト実行
tkondou@zion3:~/hgext/hgsubversion$ nosetests
..............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
----------------------------------------------------------------------
Ran 494 tests in 417.032s

OK
tkondou@zion3:~/hgext/hgsubversion$ 

hgsubversion について

職場はSubversionが基本なので、SubversionのクライアントとしてMercurialを使うことができるすばらしいエクステンション hgsubversionについて紹介。
hgsubversion のインストール方法や、基本的に使用方法、制限事項などをまとめた発表スライドは下記にアップしています。

スライドについて流れの中で質問がありいくつか不明点があるので記しておきます。

  • hg側でブランチを作った場合、SVN反映されないが、pushはできるのかどうか

hg qpush で rej されてしまう場合の対処について

懇親会では、途中で作業しかけのコミットをhg qimport 、hg qpop にて中断し、別の緊急作業を実施し、 hg commit , hg pullで他の人の成果を取り込み、hg rebase, hg push 後、 中断していた hg qpush した際、コンフリクトがあると rejectされてしまう。本当はマージ(rebase)したいのだけどどうすればいいんだろうという悩みをMercurialの神に相談していました。

  • 神:作業ごとにリポジトリを分ければいいのでは?
    • ...(ん〜、めんどい←失礼)
  • 神:作業ごとにブランチを作ればいいのでは?
    • そうですね。名前付きブランチはまだ積極的に使ってないですが考えています。
  • 神: mq なら secret にすれば push されないよ
    • おおー

結論からいうと、やりかけの作業を qimport した際、 phase を secret にしておいて、緊急作業を行えば、secret の changeset は push されないため、気にせず割り込み作業ができそうという結論に至りました。フジワラさんありがとうございました。
また、MQ に import した際、デフォルトを secret にすることもできるとのことです。


最後に

今回も、Mercurialコミッタ、TortoiseHgコミッタ、TortoiseBzrコミッタを始めレベルの高い参加者の方が多かったです。ただ基本もくもく会ですので、Mercurial を初めて触るという方も数人いて、それぞれがマイペースで Mercurial に慣れ親しむことができる"ゆるふわ"な会です。次回の開催は別件とかぶりそうで残念ですがまた楽しみにしています。特に主催者の @ さんお疲れ様でした。

入門Mercurial Linux/Windows対応

入門Mercurial Linux/Windows対応