Chapter 14
Adding functionality with extensions

Mercurial からにはされていますさを利用してソフトウェアいやすさをします

しかし Mercurial 利用杓子コマンド利用めるようなことはしませんイクステンションこののものはプラグインばれることもありますとしてすることができるのですつかのイクステンションについては にしています

ではMercurial 利用つかのイクステンションについてそのイクステンションするわれるみについてれようといます

14.1 Improve performance with the inotify extension

Mercurial 100 くなることにがあるのでしたらぜひこのんでください

Mercurial であってもでをしますXXXX 接続XXXX えばhg statusコマンドにはファイルするためにリポジトリてのディレクトリファイルするです くの Mercurial コマンドではとしていますえばhg diffコマンド較機 1 ることでらかにされていないファイルしてコスト実施されることをしていま

ファイルなことなので Mercurial ギリギリのところまでこの部分してきましたしかし hg statusには有無るためにコストシステムコ Mercurial にあるファイルするがあるという事実しようがありませんきさのリポジトリではこのにはがかかります

きさをすべく150,000 ファイルするリポジトリったいずれのファイルされていなであってもhg statusには10します

くの OS ファイル通知えていますビスプログラムしておくことでとなるファイルする生成といったイベントする都度 OS 通知をしてくれますLinux ではinotifyれるネルコンポネント通知します

Mercurial inotify イクステンションネルinotify することでhg statusコマンドします inotify イクステンションつのからされていますモン部分バックグラウンドすることで inotify ネルコンポネントから通知りますモン部分Mercurial コマンドからの接続けます inotify イクステンションファイルシステム代替として とするため Mercurial そのものをしますモンリポジトリするしているのでリポジトリディレクトリファイルすることしにすことができま

べたとおり Mercurial では150,000 ファイルするリポジトリでのhg status10しま したinotify イクステンションにすることでする1000 0.1  までできまし

める以下してください

inotify イクステンション2007 5 では Mercurial されていませ 3 ので イクステンションしてですがにはそれだけのがあります

inotify イクステンションMercurial スコへのパッチinotify サブシステムPython バインディング ライブラリつのからされています

: inotify Python バインディングライブラリにはありますつは pyinotify ばれるものでつかの Linux ディストリビュション python-inotify というされていますするにはバグ いのでこのライブラリ使うべきではありません

めるにたってはしているインストMercurial するのがいでしょうTo get going, it’s best to already have a functioning copy of Mercurial installed. XXXXXX

: 以下”Mercurial インス みの Mercurial えることになりますこれはです
  1. inotify Python バインディングリポジトリしますビルドおよびインストってください
    1  hg clone http://hg.kublai.com/python/inotify
    2  cd inotify
    3  python setup.py build --force
    4  sudo python setup.py install --skip-build
  2. Mercurial crew リポジトリしますMercurial Queues によりcrew リポジトリカルコ 4 パッチてるinotify パッチリポジトリしてください
    1  hg clone http://hg.intevation.org/mercurial/crew
    2  hg clone crew inotify
    3  hg clone http://hg.kublai.com/mercurial/patches/inotify inotify/.hg/patches
  3. Mercurial Queues イクステンションmq利用であることをしてくださいMQ 利用したことが ずは12.5  んでください
  4. inotify カルリポジトリしてhg qpushコマンド -a オプション使しててのinotify パッチ してください
    1  cd inotify
    2  hg qpush -a

    hg qpushエラメッセしたせずにコミュニティけをめてくださ

  5. パッチMercurial ビルドおよびインストします
    1  python setup.py build --force
    2  sudo python setup.py install --skip-build

パッチされたMercurial できてしまえばinotify イクステンションにするためになこと hgrcファイル以下することだけです

1  [extensions]
2  inotify =

inotify イクステンションされるとリポジトリとするコマンド回起Mercurial モンしますモンリポジトリごとにされます

モンはひそやかにされバックグラウンドけますinotify イクステンションにしたリポ ジトリつかのコマンドしたプロセスればネルからの通知Mercurial からのわせの っているhg プロセスることができるです

inotify イクステンションにしたでもリポジトリにおける Mercurial コマンド回起Mercurial コマン 程度されますこれはモンによる態走なためでネルからの通知 となりますしかしこれてのコマンドどんなにさなサイズリポジトリ あってもえてくなっているですリポジトリきければきいほどえてきくされることでしょ inotify モンどんなサイズリポジトリであっても瞬時させることができま

hg inserveコマンドによりモンすることもできますでのによりモン にすることができますこのコマンドinotifyイクステンションになっている 使です

inotify イクステンション使しているにはコマンドがそれしてくなっているけば Mercurial わらないです

とりわけコマンドならずです inotify イクステンション有無なるえるとしてをしてください

14.2 Flexible diff support with the extdiff extension

Mercurial hg diffコマンドunified をそのままします

1  $ hg diff
2  diff -r 77cc4812a4a6 myfile
3  --- a/myfile Mon Jul 20 21:58:44 2009 +0000
4  +++ b/myfile Mon Jul 20 21:58:44 2009 +0000
5  @@ -1,1 +1,2 @@
6   The first line.
7  +The second line.

使いたいextdiff イクステンションいでしょうextdiff イクステンションにより えばグラフィカル利用できるようになります

extdiff イクステンションMercurial されているので利用できますhgrcファイル[extensions] セクション イクステンションにするするだけでいのです

1  [extensions]
2  extdiff =

このによりhg extdiffコマンド利用になりますがではこのコマンドみのhg diffコマン unified システムdiff コマンドにより生成します

1  $ hg extdiff
2  --- a.77cc4812a4a6/myfile 2009-07-20 21:58:44.000000000 +0000
3  +++ /tmp/extdiff3rhJme/a/myfile 2009-07-20 21:58:44.000000000 +0000
4  @@ -1 +1,2 @@
5   The first line.
6  +The second line.

みの hg diffコマンドにはしませ 5 オプション してもシステム6 とにシステムdiff コマンドなるからです

making snapshotまれていることからもすることができますがhg extdiffコマンドスツリするスナップショットしますスナップショッ リビジョンのものでディレクトリにおけるリビジョンのもので 7 hg extdiffコマンドはこれらのスナップショットディレクトリこれらのディレクトリにして分表 そのディレクトリします行効つのリビジョンのあるディレクトリファイル ナップショットだけがされます

スナップショットディレクトリとなるリポジトリちます/quux/bar/foo というリポジト スナップショットディレクトリfoo となりますするチェンジセット ID があるスナッ プショットディレクトリにはチェンジセット ID されますa631aca1083f するスナップショットディレクトリ foo.a631aca1083f となりますディレクトリ現行するスナップショットチェンジセット ID されま せんのでこのではfoo というになりまするためにhg extdiffてみ ましょうヘッダスナップショットディレクトリまれているのにくことでしょ

hg extdiffコマンドにはつのオプションがあります -p オプションシステムdiffコマンド代替として使 される分表プログラムします -o オプションhg extdiff分表プログラムするオプショ デフォルトでは -Npruされdiff 使するにのみちますしますそれではhg extdiffコマンドみのhg diffコマンドいますのでオプションオプション文法 リビジョンするしたいファイルなどはみのhg diffじようにできま

として、(hg diffによるunified わりにシステムdiff コマンドによる context -c プション使デフォルトではなくcontext -C オプションでの 5 する方法しま

1  $ hg extdiff -o -NprcC5
2  *** a.77cc4812a4a6/myfile Mon Jul 20 21:58:45 2009
3  --- /tmp/extdiff3rhJme/a/myfile Mon Jul 20 21:58:44 2009
4  ***************
5  *** 1 ****
6  --- 1,2 ----
7    The first line.
8  + The second line.

グラフィカルですkdiff3 します

1  hg extdiff -p kdiff3 -o ’’

利用する分表コマンドディレクトリえないでもスクリプト使うことでそのできます そのようなスクリプトによるmq イクステンションinterdiff コマンド13.9.2  してくださ

14.2.1 Defining command aliases

hg extdiffコマンド利用する分表コマンドオプションえておくのはですのでextdiff イクステン ション使する分表コマンドしいオプションするしいコマンドできるようになっていま

しいコマンドのためになのはhgrcファイル[extdiff] というセクションするだけ ですこのセクションではコマンドすることができます以下kdiff3 コマンドする します旦定してしまえばhg kdiff3するだけでextdiff イクステンションkdiff3 しま

1   [extdiff]
2  cmd.kdiff3 =

のようににしたextdiff イクステンションしたコマンドすべきプログラム なしますしかしこれらのしているはありません以下ではkdiff3 するコマンドhg wibbleというしています

1  [extdiff]
2  cmd.wibble = kdiff3

分表プログラムデフォルトオプションすることができますopts.いてオプション たいコマンドしてください以下ではvim エディタDirDiff する hg vimdiffコマンドしてい ます

1  [extdiff]
2  cmd.vimdiff = vim
3  opts.vimdiff = -f ’+next’ ’+execute "DirDiff" argv(0) argv(1)’

14.3 Cherrypicking changes with the transplant extension

Brendan チャットでのいが

14.4 Send changes via email with the patchbomb extension

くのプロジェクトではリポジトリコミットするリングリスト稿してレビュっていますリポジトリへのアクセスたないからのするたす がいるプロジェクトもあります

Mercurial patchbomb イクステンション利用することでレビュのためのによるになりま このイクステンションパッチされチェンジセットつのされることに由来 ていますによるルボックスにとって bombingのようであることから “patchbomb” ばれています

patchbomb イクステンションいつものようにhgrcへの程度だけです

1  [extensions]
2  patchbomb =

イクステンションにしたならばhg emailというたなコマンド利用になります

hg emailコマンド -nオプションけてしてみることです -n オプション きのわずにされるであろうしますにざっと であることをしたならば -nオプションきでhg emailコマンドしてくださ

hg emailコマンドMercurial コマンドリビジョンですえば以下ではリビジョン 7 から tip までのてのリビジョンリビジョン 7 および tip みますされます

1  hg email -n 7:tip

リポジトリすることもできますリビジョンしでリポジトリしたhg emailコマンド リポジトリしないカルリポジトリてのリビジョンしますリビジョンないし -b オプションによるブランチ することでされるリビジョンすることができます

アドレスしないhg emailそのにはhg emailめてきますLinux Unix ライクシステム利用しているこれらのヘッダにはreadline 利用 )。

リビジョンだけをするhg emailコマンドではコミットメッセする サブジェクト利用します

リビジョンするhg emailコマンドチェンジセットしますこの しようとするしたきのれとしてしま

14.4.1 Changing the behaviour of patchbombs

によるてのプロジェクトじわけではいことからpatchbomb イクステンション コマンドでのオプションによるつかの実施します