secretbase.log

.NET/C#/Pythonなど

Windows上でソースコードから開発版TortoiseHg をビルドしてみる

Mercurial & TortoiseHg Advent Calendar 2013 - connpass の 8日目のエントリです*1

TortoiseHg を 使っているとちょっと改良してみたいなぁと感じることもありますが、Windows上のビルド環境構築はけっこう面倒だったりしますね。Windows 上で環境をスクラッチでソースコードからビルドしてみましたのでご紹介します。

f:id:cointoss1973:20131224133445p:plain

環境構築の概要

Windows 上での TortoiseHg のビルドは、 thg-winbuild リポジトリを用います。*2

手順は、TortoiseHg の thg-winbuild リポジトリの README に記載されている内容を参考にしています。
https://bitbucket.org/tortoisehg/thg-winbuild/src

ここでは Windows 7 の 32-bit および 64-bit を準備します。

ビルド環境


それでは、はじめましょう。

Mercurial ビルドに必要なもの

まずは、Mercurial をビルドするために必要な環境を準備しましょう。

Python 2.7.6

Windows用のインストーラーからインストールします。ここでは 2.x系の最新である 2.7.6 をインストールします。

32-bit http://www.python.org/ftp/python/2.7.6/python-2.7.6.msi
64-bit http://www.python.org/ftp/python/2.7.6/python-2.7.6.amd64.msi

  • インストール先

C:\Python27
C:\Python27-x64


C++ Compiler

Visual Studio 2008 Express Edition を入れましょう

  • Visual Studio 2008 Express Edition CD(DVD)イメージ版のダウンロード

http://go.microsoft.com/?LinkId=9348306

Visual Studio 2008 は Python 2.7 の場合の組み合わせです。(MinGW/MSYS は使わないほうが良いです)

gettext

下記からセットアッププログラムを最新版をダウンロードします
http://gnuwin32.sourceforge.net/packages/gettext.htm

gettext-0.14.4.exe が最新。


py2exe

http://sourceforge.net/projects/py2exe/
http://sourceforge.net/projects/py2exe/files/py2exe/0.6.9/

32-bit py2exe-0.6.9.win32-py2.7.exe
64-bit py2exe-0.6.9.win64-py2.7.amd64.exe

上記 exe を実行してインストール。

Windows Installer XML

WiX の最新安定板を用いてよいでしょう。
ちなみに WiX38.exe が現時点の最新ですのでこれを入れます。*4
http://wix.codeplex.com/releases/view/115492


setuptools

こちらも PyPI で提供されているパッケージになります。
http://pypi.python.org/pypi/setuptools

Windows の場合は、下記手順でインストール可能です。
https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py

python ez_setup.py を実行しましょう。

C:\Python27\python.exe ez_setup.py
C:\Python27-x64\python.exe ez_setup.py

docutils

PyPIで提供されている Pythonパッケージ のひとつです。
そして easy_install docutils を実行すればOK。

C:\Python27\Scripts\easy_install.exe docutils

Sphinx (docutils, jinja2, pygments, etc)

こちらも PyPIで提供されているPythonパッケージ。
sphinxをインストールします。

C:\Python27\Scripts\easy_install.exe sphinx
C:\Python27-x64\Scripts\easy_install.exe sphinx

ドキュメントのビルドに必要な環境準備

MiKTeX (to build PDF docs)

setup-2.8.3553.exe をダウンロードし実行したところ、2.8はもうサポートが切れているといったメッセージが出て入らない。最新2.9 インストーラーをダウンロードしインストール。

HTML Help Workshop (to build CHM docs)

htmlhelp.exe をインストール。


TortoiseHgのビルド・インストーラーに必要なソフトウェア

PyQt 4.8 or later

http://www.riverbankcomputing.co.uk/software/pyqt/download
Pythonのバージョンとあわせたバイナリをダウンロード。
PyQt4-4.10.3-gpl-Py2.7-Qt4.8.5-x32.exe

SVN

TortoiseSVN http://tortoisesvn.net/downloads.html
TortoiseSVNインストール時に、 svn のコマンドライン版を選択しインストールしておく。

comtypes (no longer optional)

  • 32-bit

http://sourceforge.net/projects/comtypes/files/comtypes/0.6.2/
http://sourceforge.net/projects/comtypes/files/comtypes/0.6.2/comtypes-0.6.2.win32.exe/download

  • 64-bit

http://sourceforge.net/projects/comtypes/files/comtypes/0.6.2/comtypes-0.6.2.zip/download
http://sourceforge.net/tracker/?func=detail&aid=3036368&group_id=115265&atid=692940

64-bitの場合は、ソースコードからインストールしましょう。
上記パッチは trunk に取り入れられているので、svnのtrunkからインストールします。

svn checkout https://svn.code.sf.net/p/comtypes/code/trunk comtypes-trunk
cd comtypes-trunk
C:\Python27-x64\python.exe setup.py install

Subversion Python bindings (no longer optional)

https://bitbucket.org/tortoisehg/thg-winbuild/downloads/svn_1.7.5_py27_x86.zip
https://bitbucket.org/tortoisehg/thg-winbuild/downloads/svn_1.7.5_py27_x64.zip
zip を解凍し、 svn と libsvn フォルダを site-packages 以下にコピーする

C:\Python27\Lib\site-packages
C:\Python27-x64\Lib\site-packages

以上で必要なビルドに必要なソフトウェアの準備が完了しました。


ビルド手順

ソースコード取得

コマンドプロンプトで下記コマンドを実行。

hg clone https://bitbucket.org/tortoisehg/thg-build
cd thg-build
python setup.py 

ビルドに必要なリポジトリソースコードをcloneします。けっこう時間がかかるのでコーヒーでも飲みましょう。

スクリプト調整

thg-build/winbuild/setup.py の下記 try_paths の引数に 2.9 のパスを追加しておきます。

    if not pdflatex:
        found = try_paths([r'\MiKTeX 2.7\miktex\bin\Pdflatex.exe',
                           r'\MiKTeX 2.8\miktex\bin\Pdflatex.exe',
                           r'\MiKTeX 2.9\miktex\bin\Pdflatex.exe'])

ビルド

set LANGUAGE=en
cd winbuild
"C:\Python27\python.exe setup.py --thg-dev" → x86用のmsiパッケージがビルド
"C:\Python27-x64\python.exe setup.py --thg-dev" → x64用のmsiパッケージがビルド

※もし プロキシ設定(http_proxy)などビルドコンフィグレーションが必要な場合は、build.ini ファイルにセクションを追加してください。

最終成果物(msi)は、 thg-build\output 以下に msi ファイルが生成されます。

その他

もし mercurial など tortoisehg でビルド対象のパッケージがすでにインストールされていたら該当パッケージを別名にするか削除するかしておきましょう。

参考

最新TortoiseHg の各ソフトウェアバージョン TortoiseHg 2.10.1 時点
記バージョンですが、ここでは最新開発版をビルドしました。


入門TortoiseHg + Mercurial

入門TortoiseHg + Mercurial

*1:大遅刻><

*2:このリポジトリから setup.py にて内部的に必要なリポジトリを clone しますので他のリポジトリは意識する必要はありません。

*3:Windows 8 は未確認です

*4:最近 WiX 3.8がリリースされました

TortoiseHg のワークベンチから快適なターミナルを起動する(Windows)

Mercurial Advent Calendar 2013 2日目は、TortoiseHgのワークベンチから好きなターミナルの起動をできるようにしてみたいと思います。

f:id:cointoss1973:20131202181813p:plain

Windows上でコマンド入力するterminalはいくつか選択肢があります。
基本は OS標準添付の cmd(コマンドプロンプト)であるがこれはとても使いづらいですね。
特に UNIX (Linux) 上のターミナルの開発経験が長い人はこれを痛感していることでしょう。

はじめに

今年はあまりTortoiseHgを触る機会が少なかった気がします。たまにバージョンアップするワークベンチから起動する端末のconsole2が起動しなくなりました(どうやら端末の設定の方法が変わったようです)。しかたなくcmdを使っていましたが、やはり不便なのでconsole2を起動する方法を調べました。

環境

  • Windows 7 Professinal 64-bit
  • console2 2.00b148
  • TortoiseHg 2.10
  • msysgit 1.7.9

TortoiseHg からターミナルを起動する

今年リリースされたどこかのバージョンからTortoiseHgのターミナルの設定の仕様が変わっていました。
デフォルトの状態では、インストールしている状態に応じて、設定可能なターミナルが選択するUIに変わっていました。
(従来はGUI上で設定を直接行っていた)

f:id:cointoss1973:20131202182323p:plain

私は、console2を愛用しているのでこれを使おうと思いますが、この一覧にはありません。
マニュアルをざっとみましたが、設定の方法がみつからない。
ソースコードrc および ソースコードあたりを見てみると、どうやら、 hgrc 内の [terminal-tools] セクションにて設定することができるようです。

console2 とは

私は、console2 + msysgit (1.7.9 UTF-8対応する前の最終版)を使用しています。console2 単体でcmdの置き換えができるだが、シェルとして自由に好きなシェルを登録したタブ切り替えで使用することができる。例えば、MSYS, msysgit, PowerShell, Visual Studio 2012 console など目的に応じてシェルを起動できるので気に入っています。
console2のIME入力対応パッチも出ているため、下記手順で導入でいます。

64-bit OS を使っているので、 x64 にしてみました*1

hgrc (mercurial.ini) (ターミナルを追加する)

terminal-tools のセクションに追加することで、プルダウンメニューから選択することができるようになります。
ここでは、あらかじめ 32-bit用と 64-bit 用を追加しておきます。

[tortoisehg]
shell = console2-x64

[terminal-tools]
# console2
console2.priority = -6
console2.executable-win = c:\console2\Console.exe
# console2 x64
console2-x64.priority = -7
console2-x64.executable-win = c:\console2-x64\Console.exe

f:id:cointoss1973:20131202181437p:plain

日本語およびカラーの表示に対応する

関連する .bashrc と .hgrc (mercurial.ini) を示しておきます。
この設定で、msysgit上で日本語表示と cmd 上のカラー表示ができます。

.bashrc (関連部分を抜粋)

alias ls='ls --color=auto  --show-control-chars'
export LANG=ja_JP.UTF-8
export LESSCHARSET=utf-8

.hgrc (関連部分を抜粋)

[tortoisehg]
shell = console2-x64

[terminal-tools]
# console2
console2.priority = -6
console2.executable-win = c:\console2\Console.exe
# console2 x64
console2-x64.priority = -7
console2-x64.executable-win = c:\console2-x64\Console.exe

[extensions]
color=
graphlog=
pager=
win32mbcs=

[pager]
#pager = less -FRSX
pager = C:\msysgit\msysgit\bin\less.exe -f -FRSX
#attend = annotate, diff, cat, help, glog, log, status
attend = annotate, diff, cat, help, glog, log, status

[color]
#mode = auto
mode = ansi

pager の指定を 絶対パスを使うことで cmd 上でも動作するようにしています。*2
color の mode は ansi を指定します。
cmd 上では、 set LESSCHARSET=utf-8 してから実行しています(環境変数に設定すると良いかも)

下記のような感じになります。左はmsysgitで、右はcmdです。
f:id:cointoss1973:20131202181536p:plain

明日は、@ianMLewis さんです。では、はりきってどうぞ!

入門TortoiseHg + Mercurial

入門TortoiseHg + Mercurial

*1:いままでは 32-bit 版をなんとなく使っていました

*2:昔は tpager extension を使う必要がありましたが、いまは 同梱の pager extension + color extension の組み合わせでカラー表示できます。

PyCharm と Mercurial の連携

本日の #TokyoMercurial で少し PyCharm と Mercurial の連携について調べてみました。diff画面がなかなかカッコイイので紹介します。

試したバージョンは、下記です。

準備 (hg init相当)

PyCharm上でリポジトリをつくることもできます。プロジェクトを普通に作成し、その後リポジトリに追加する手順です。
f:id:cointoss1973:20131019175619p:plainf:id:cointoss1973:20131019175624p:plainf:id:cointoss1973:20131019175636p:plainf:id:cointoss1973:20131019175642p:plain

ファイル追加 (hg add 相当)

普通にファイル追加すると、リポジトリに追加するかどうか聞かれます。追加すると もちろん hg add されます。
f:id:cointoss1973:20131019175649p:plainf:id:cointoss1973:20131019175656p:plain

差分 (hg diff)

コミットする前には差分を確認しますが、PyCharm上でリポジトリとの差分を確認ができます。
いくつかコミットしたり新規に追加したりすると下記のような差分表示となります。
青色が変更点で、緑色が追加の箇所。なかなかわかりやすい表示ですね。
f:id:cointoss1973:20131019175827p:plain
新規登録の場合は下記の表示。
f:id:cointoss1973:20131019175835p:plain

ちなみに、TortoiseHg+Winmergeだとこんな感じの差分表示になります。
f:id:cointoss1973:20131019175844p:plain

コミット (hg commit)

基本的にはファイルやディレクトリやプロジェクトを右クリックすると出てくるMercurialのメニューから Commit メニューを選択すればOKです。
コミット時にいろいろ選べるようです。
f:id:cointoss1973:20131019175854p:plain

ファイルの状態 (hg status)

ファイルの色で状態がわかるようです。
青が変更で、緑が追加。diffの表示の色と同じです。
f:id:cointoss1973:20131019180240p:plain
TortoiseHgを使っているのでピンと来ない表示ですが慣れてくると色で状態がわかってくるのかもしれません。

まとめ

今回できなかったこととしては、push/pullや、作業領域の切り替えなどありますが、通常頻繁に使う操作だとdiffを見ることが多いと思います。ファイル追加とdiffはエディタの延長で自然にできる感じがします。

また、PyCharm側でLocalHistoryとして変更履歴がありまして、ここからRevert(変更内容の復旧)ができるので頻繁なコミットをしなくても良いので便利かもしれません。
f:id:cointoss1973:20131019181657p:plain

分散バージョン管理の機能比較まとめ

DVCSで有名なものですと、 Git , Mercurial, Bazaar があります。
最近では、Veracity という分散バージョン管理も出てきました。どのように違ってどういう基準で選ぶと良いか悩みますね。これらの違いはなんでしょうか?
そこで、比較資料をまとめてみました。

バージョン管理ソフトウェアの比較資料

従来の集中型を含めたバージョン管理ソフトウェアの比較資料

Gitポケットリファレンス

Gitポケットリファレンス

入門TortoiseHg + Mercurial

入門TortoiseHg + Mercurial

入門TortoiseHg+Mercurial 書評

Mercurialコミッタのフジワラさん(id:flying-foozy)から、"入門TortoiseHg+Mercurial"を頂きましたのでこのエントリで紹介させていただきます。

入門TortoiseHg + Mercurial

入門TortoiseHg + Mercurial

  • 第1部 1人での作業
  • 第2部 チームでの作業
  • 第3部 より高度な使い方
  • 第4部 補遺
http://www.shuwasystem.co.jp/products/7980html/3710.html

どんな人を対象としているか

この本の対象読者は、(1)履歴管理が始めてな人 (2)CVS/Subversionを使用している人 (3)Mercurialを使用している人 です。

私自身は(2)CVS/Subversionを使用している人に該当していました。

TortoiseHg を使うひとつの理由

SubversionをWindowsで使っている方 (TortoiseSVNが多いでしょう)で、流行りの分散バージョン管理が気になっている方も多いと思います。
Mercurialに出会い会社に導入した大きな理由として、Windows上での快適な操作を目的としたところがあります。
分散バージョン管理の中で最も有名なGitは、コマンドライン前提の設計でエンジニア寄りであり、履歴管理は”手段”と捉えた場合に導入コストも安くないです。そういった理由でMercurial(TortoiseHg)を選ぶ人も多いです。

TortoiseHgとTortoiseSVNの違い

TortoiseHgとTortoiseSVNの違いはなんでしょうか。もちろんSVNMercurialという大きな違いはあるのですが、GUIを使用する際の心構えとしてTortoiseSVNは、エクスプローラ統合の右クリックメニューからの操作が主だと思います。
これはファイルやフォルダに対する操作を行う考え方です。一方、TortoiseHgでは、”ワークベンチ”といって、一つ(または複数)のリポジトリに対する操作を包括的に行うことができるGUIをどーんとメインに起動してそこから操作を行うことが多いです。
コミットツリーも視覚的に見れます。このあたりのメンタルモデルの違いは念頭に置くとよいと思います。*1

また、Windowsの場合、TortoiseHgのみインストールすれば、Mercurialコマンドも同梱されますので便利です(最近のTortoiseSVNではコマンドラインをインストールすることもできます)

本書の読み方

補遺にインストール手順が書いてあります。まずはTortoiseHgをインストールしましょう。最低限の初期設定をしてあとは一人から始めましょう。
本書籍では、そういった最初の導入を一人で始め、チームで行うやり方、頭から順番に読むことで、少しずつ身につけることができます。
もちろんTortoiseHgはGUIですので、豊富な画面もついていますので、理解しやすいです。

またファイルを間違って登録してしまったことを取り消したいといったやりたい状況別に読むこともできます。
"第2章 うっかりミスを取り消す"はあらかじめ読んでおくと安心ですね。

慣れてきたら、ひとりでも、デスクトップPCとノートPC間や、会社と自宅間での履歴反映をやってみると、マージの経験値があがるでしょう。

本書で、ぜひ TortoiseHgとMercurial の世界に足を踏み入れてみてください。良い意味で戻ることはできなくなるでしょうから。

関連記事

*1:SVNでいうRapidSVNに近いですね

OSPN Press 「オープンソース」を使ってみよう Mercurial 編 に寄稿しました

「オープンソース」を使ってみよう (第28回 Mercurial 編) に寄稿しました。

  • Windows ユーザ
  • バージョン管理を知っているが使ったことがない

方を対象として、記事を書きました。
Windows上でバージョン管理を初めてみてはいかがでしょうか?


また、オープンソースカンファレンス2013 Tokyo/Spring - オープンソースの文化祭!mercurial-users.jp のコミュニティも参加しますのでこちらもよろしくお願いします。

TortoiseHg にて .hgignore を編集しよう

TortoiseHg Advent Calendar 2012 - connpass 13日目になります。今日は TortoiseHg で .hgignore を編集してみましょう。

.hgignore

.hgignore の1行目(1行目じゃなくても途中からでもOKです)に記載する syntax:glob がなんだっけなぁと忘れることがよくありました*1
TortoiseHgでは、.hgignore を作成することができます。

コマンドプロンプトから thg hgignore で起動

$ thg hgignore

で起動します。
hgignore ファイルに追加する グロブ形式の場合、 *.o だったり *~ ファイルなど 構成管理ファイル対象から除外します。
f:id:cointoss1973:20121213232028p:plain

他のリポジトリですが、右側に構成管理対象外のファイルが表示されますので、それを見ながら設定することができます。
f:id:cointoss1973:20121213232036p:plain

さいごに

hgignore の記述形式を忘れた時に便利かもしれません。hg help hgignore で見られるのでそれでもいいのかもしれません。

*1:syntax:re で正規表現による記載もできます