TokyoMercurial #3 行ってきた / WinMergeのインスタンスマネジメント

TokyoMercurial#3 - Togetter

Mercurial派にすり寄るべく、4/14に開催されたTokyoMercurial #3に参加してきました。
もくもく会と言いつつちっとももくもくにならないのはもはや定番って感じ。

やったこと

仕事ではMercurialを使ってない分経験が少ないので、まずはとにかくMercurialとMQで何か作ろうということで、ちょうどWinMerge*1に欲しい機能があったのでそれを実装してみることに。
オリジナルのソースはSVNなのでhgsubversionでMercurialに持ってきてます。

とりあえずの完成版のソースはこちら。当日中には完成しませんでしたが、まあなんちゃってもくもく会なので仕方ない(言い訳)。
なんてことのないログですが、MQによる履歴の改変とか色々試した結果です。
Bitbucket

で、何を実装したかというと、

WinMergeインスタンスマネジメント

WinMergeには「複数のインスタンスを起動しない」というモードがあって、これをONにすると全てのDiffが1つのWinMergeウインドウ内で開くようになります。(タブインターフェイスになる)
大量のDiffを一度に表示するときとかデスクトップが散らからなくて便利なんですが、かと言って何もかもが1ウインドウにまとまってしまうのは不便なことも多いのです。
例えば、VCS使うときでも、diffを表示するときとコンフリクトの解消を行うときは別のウインドウを起動したいし、まったく関係ない作業をする時はやっぱり別のウインドウにしたい。かといって全部ばらばらのウインドウにするとデスクトップが散らかりすぎるし。

というのがあって、/i、/groupという2つのコマンドラインオプションを追加しました。

/i これを指定すると、「複数のインスタンスを起動しない」モードの場合でも強制的に新しいウインドウでオープンする
/group グループ名 グループ名ごとにひとつのウインドウが起動する。
(同じグループ名を指定したもの同士は同じウインドウでオープンする)

Mercurialで使うなら、グローバルな設定で

[extdiff]
cmd.winmerge = C:\Program Files\WinMerge\WinMergeU.exe
opts.winmerge = /group mercurial

とか、リポジトリごとの設定で

[extdiff]
cmd.winmerge = C:\Program Files\WinMerge\WinMergeU.exe
opts.winmerge = /group リポジトリ

とかしておくとなかなか快適なかんじ。


時間がなくなっちゃったのでTokyoMercurial #3の感想とかはまたあらためて。

*1:Windowsで開発する人ならだいたいみんな知ってるWindows向け差分表示ツール