Differences between revisions 1 and 2
Revision 1 as of 2007-08-12 08:48:40
Size: 6297
Comment:
Revision 2 as of 2007-08-12 08:52:48
Size: 6390
Comment: sorry, I forgot link to get graphviz.py
Deletions are marked like this. Additions are marked like this.
Line 18: Line 18:
この拡張は Mercurial 0.9.3(おそらくそれ以降でも)で機能します。 Mercurial 0.9.3(おそらくそれ以降とでも)と機能する Graphviz 拡張は、
http://www.lares.dti.ne.jp/~foozy/fujiguruma/scm/graphviz.py から入手可能です。

このページは ["GraphvizExtension"] の翻訳です。

Graphviz 拡張

著者: Katsunori FUJIWARA

概要

この拡張は、 チェンジセットツリーを可視化するための ([http://www.graphviz.org/ Graphviz] の) DOT 言語ソースを生成します。

Graphviz は、 画像(例:*.jpg)ファイルだけでなく、 クライアントサイドのイメージマップも生成できますので、 hg serve と連携する HTML ページを得ることもできます。

Mercurial 0.9.3(おそらくそれ以降とでも)と機能する Graphviz 拡張は、 http://www.lares.dti.ne.jp/~foozy/fujiguruma/scm/graphviz.py から入手可能です。

設定

graphviz.py を python が認識しているディレクトリ配下に配置した場合、 以下の行を設定ファイル(hgrc)に追加することで、 この拡張を有効にすることができます。

[extensions]
graphviz = 

それ以外の場合は:

[extensions]
graphviz = /path/to/graphviz.py

利用方法

hg graphviz [OPTIONS] [limit-spec ...]

limit-spec を指定しない場合、 graphviz は全てのチェンジセットを描画対象とみなします。

描画対象チェンジセットは、 リビジョン範囲(-r オプション参照) ないし 日時範囲(-d オプション参照)の何れかで制限できます。

リビジョン範囲に対しては、 'リビジョン番号'、'tip への相対番号' '短縮チェンジセットID'、'チェンジセットID' ないし'タグ名'のいずれも指定可能です。

日付範囲に対しては、 YYYY-MM-DDThh:mm:ss(中間の TT そのものでなくてはなりません) として知られる XML Schema dateTime フォーマットを使用する必要があります。 しかし、それほど強い制約が掛けられているわけではありませんので、 例えば 2007-99-99T99:99:99 のような指定も可能です。

limit-spec は3つの形式のうちのどれかでなければなりません。

  1. 'Start,End' 形式は対象チェンジセットを 'Start' から 'End' の間のものに限定します。

  2. 'Start,' 形式は対象チェンジセットを 'Start' 以後のものに限定します。

  3. ',End' 形式は対象チェンジセットを 'End' 以前のものに限定します。

注意: End含むものとみなされますので、 例えば 2007 年より後に生成されたチェンジセットを無視する場合は、 2007-12-31T24:00:00 のようなものを指定する必要があります。

graphviz は以下のオプションを認識します。

-r --revision  use revision to limit targets(default)
-d --datetime  use datetime to limit targets
-u --urlbase   url base for client side image map
-a --aliases   file with user name aliases
-f --format    format of changeset label (default: r)
   --hook      hook module to render node attribute

ラベルのフォーマット

可視化されたグラフ中でチェンジセットに相当するノードに描画されるラベルは、 フォーマットを指定可能です。

-f オプションに指定される文字列は、 以下の文字から構成されていなければなりません。

  • u: username(may be aliased)
  • U: username
  • r: revision number
  • s: short-form changeset hash
  • h: changeset hash
  • d: datetime of changeset
  • t: first line of changeset description text

例えば -f rUd を指定した場合、 123/who committed <mail@address>/2007-01-01T00:00:00 がラベルとして描画されます。

ユーザ名エイリアス

ユーザ名がラベルの要素として使用された場合にその長さを低減させるために、 エイリアス設定ファイルを指定できます。 このファイルは、以下のフォーマットの行か、 '#' で始まるコメント行から構成されていなければなりません。

AliasName=ActualName

エイリアス変換は、 u(小文字の u)をラベルフォーマットとして指定した場合に有効になります。

クライアントサイドイメージマップ

例えば、 以下の手順を踏むことで、 ローカルホストのポート 8000 で稼動している hg serve と連携する HTML ページ imagemap.html を生成できます。

% hg graphviz ... -u http://localhost:8000 ... > imagemap.dot

% dot -Tjpg -o imagemap.jpg imagemap.dot

% cat <<END > imagemap.html
<html>
<head><title>Changeset graph between .... </title></head>
<body>
<image src="imagemap.jpg" usemap="_anonymous_0">
END

% dot -Tcmapx imagemap.dot >> imagemap.html

% cat <<END >> imagemap.html
</body>
</html>
END

描画のカスタマイズ

'node' の属性をカスタマイズしたい場合、 --hook オプションでモジュール名を指定してください。 指定されるモジュールは、 以下のような関数定義 (関数名は厳密に attrhook でなければなりません) が含まれていなければなりません。

def attrhook(repository, revision, node, changes):

引数は:

  • repository: 対象リビジョンが属するリポジトリ

  • revision: リビジョン番号

  • node: repository.lookup(revision) で得られたもの

  • changes: repository.changelog.rev(node) で得られたもの

空でない文字列が attrhook から返却された場合、 その文字列は 'node' の属性に結合されますので、 例えば以下のようなコードにより、 特定のユーザが生成したチェンジセットに対応する 'node' を強調することができます。

def attrhook(repository, revision, node, changes):
    return ((changes[1] == 'someone highlighted')
            and 'style = "filled", color = "black", fontcolor = "white"'
            or None)

JapaneseGraphvizExtension (last edited 2009-05-19 19:31:00 by localhost)