チェンジログ
============

.. module:: changelog.dialog
	:synopsis: チェンジログを表示するダイアログ

チェンジログビューア (別名:リポジトリエクスプローラ) はリポジトリのリビジョン履歴を可視化し、
チェンジセットに対して様々な操作をするのに使用され、リビジョン履歴をグラフ化し、
親/子リビジョンの関係を表示します。また各リビジョンにおいてどのファイルが変更さたのか、
さらに変更内容についても見ることができます。

.. figure:: figures/log.png
	:alt: チェンジログ

	ツールバーを非表示にしたチェンジログビューア

チェンジログビューアには各種機能を実行したり、
他のツールを起動したりするためのメニューバーがあります。

	:guilabel:`ツール`
		TortoiseHg の各種ツールを別プロセスで起動します。
	:guilabel:`表示`
		オプション機能の表示切り替えと、表示内容の再読み込みします。
	:guilabel:`リビジョン`
		リポジトリ内の特定のチェンジセットを選択します。
	:guilabel:`同期`
		リポジトリ同期機能 (後述) に関する操作をします。
	:guilabel:`ヘルプ`
		システム既定のウェブブラウザでチェンジログビューアに関するヘルプを開きます。
		また TortoiseHg のバージョン情報を表示します。

ツールバーボタンを左から順に見ていきます：

	:guilabel:`再読み込み`
		リビジョン履歴を再読み込みします (別のウィンドウでコミットした時など)。
	:guilabel:`マークをリセット`
		リビジョングラフの新規・受信・送信リビジョンを表すマークを消して再読み込みします。
	:guilabel:`同期ツール`
		同期ツールを開きます。他のリポジトリとチェンジセットのやり取りできます。
	:guilabel:`MQ`
		MQ パネルの表示を切り替えます。このボタンは MQ 拡張機能がユーザによって
		有効化されているときのみ表示されます。
	:guilabel:`コミット`
		コミットダイアログを別プロセスで起動します。
	:guilabel:`リポジトリ検索`
		リポジトリ検索ツールを別プロセスで起動します。
	:guilabel:`リカバリ`
		リカバリツールを別プロセスで起動します。
	:guilabel:`ウェブサーバ`
		ウェブサーバツールを別プロセスで起動します。
	:guilabel:`シェルフ`
		シェルフダイアログを別プロセスで起動します。
	:guilabel:`さらにリビジョンを読み込む`
		チェンジセット一覧に次の N 件のリビジョンを読み込みます。
	:guilabel:`全リビジョンを読み込む`
		チェンジセット一覧に残りすべてのリビジョンを読み込みます。


同期バー
--------

.. figure:: figures/syncbar.png
	:alt: 同期バー

	チェンジログビューアのリポジトリ同期機能

左から順に

	:guilabel:`受信`
		指定されたリポジトリからチェンジセットをダウンロードして一時的なバンドル
		ファイルとして保存した後、プレビューモードに切り替えます。
		リビジョングラフでは受信したチェンジセットの横に下向きの矢印が表示されます。
	:guilabel:`取り込み`
		プレビュー中のバンドルをローカルのリポジトリに取り込みます (プル)。
		このボタンはバンドルのプレビュー中にのみ有効になります。
		プル後の操作が設定されている場合、取り込み完了後に実行されます。
	:guilabel:`破棄`
		プレビュー中のバンドルを破棄して、プレビューモードから抜けます。
		このボタンはバンドルのプレビュー中にのみ有効になります。
	:guilabel:`プル`
		指定されたリポジトリからチェンジセットをプルし、プル後の操作 (update, fetch,
		または rebase) が実行されます。
	:guilabel:`インポート`
		インポートダイアログを開いてパッチを取り込みます。
	:guilabel:`送信`
		指定されたリポジトリに送信されるチェンジセットを確認します。
		リビジョングラフでは送信されるチェンジセットの横に上向きの矢印が表示されます。
	:guilabel:`プッシュ`
		指定されたリポジトリにチェンジセットをプッシュします。
	:guilabel:`メール送信`
		指定したリポジトリへのチェンジセットをメールで送信します。
	:guilabel:`中止`
		現在の操作を中止します。このボタンは送信チェンジセットの確認中 (incoming)
		にのみ有効になります。

:guilabel:`中止` ボタンの右側には閲覧中のリポジトリに設定されたすべてのリモートリポジトリ
を含むコンボボックスがあります。デフォルトのリポジトリパスが設定されている場合は
起動時にそれが自動的に選択されます。リポジトリパス設定の詳細については
`hg.1.html#urls <https://www.selenic.com/mercurial/hg.1.html#urls>`_
をご覧ください。

さらにその右側には :guilabel:`プル後の操作` コンボボックスがあり、
同期バーによるプル操作が完了した後に実行する処理を選択することができます。
:guilabel:`更新` (update) 以外の操作として :guilabel:`リベース` (rebase)
と :guilabel:`取得` (fetch) がありますが、それぞれ rebase 拡張機能と
fetch 拡張機能を有効化しない限りリストには表示されません。

:guilabel:`プル後の操作` コンボボックスの右側は :guilabel:`設定` ボタンになります。
このボタンを押すとリポジトリ設定ダイアログの :guilabel:`同期` タブが開かれ、
素早くプル後の操作やリポジトリパスを設定することが可能になっています。

リポジトリ同期機能によってチェンジログビューアが起動した後に追加された
チェンジセットはリビジョングラフでは緑色の星印が表示されます。
これにはコミット、プルされたチェンジセット、適用されたパッチなどを含みます。

.. note::
	緑色の星印が表示された新規チェンジセットを通常表示に戻すには
	:guilabel:`表示 -> マークをリセット` を使用してください。


フィルタバー
------------

.. figure:: figures/searchbar.png
	:alt: フィルタバー

	チェンジログビューアのフィルタ機能

フィルタバーを使えばチェンジセットに素早くフィルタをかけることができます。
左から順に

	:guilabel:`全て`
		すべてのチェンジセットを表示します。実質的にはすべてのフィルタを解除します。
	:guilabel:`タグ`
		タグの付いたチェンジセットのみ表示します。
	:guilabel:`祖先`
		現在選択しているチェンジセットの祖先にあたるチェンジセットのみを表示します。
		このフィルタはチェンジセットが選択されているときのみ有効になります。
	:guilabel:`親リビジョン`
		作業ディレクトリの親リビジョンのみを表示します。
		マージ作業中でない限り常に1つのチェンジセットのみが表示されます。
	:guilabel:`ヘッド`
		リポジトリのヘッドリビジョン (子リビジョンを持たないチェンジセット)
		のみを表示します。
	:guilabel:`マージ`
		リポジトリのマージリビジョン (2つの親リビジョンを持つチェンジセット)
		のみを表示します。
	:guilabel:`マージを非表示`
		マージリビジョンの表示を切り替えるトグルボタンです。他のフィルタと併用できる
		ようにするためラジオボタンではありません。
	:guilabel:`ブランチ`
		選択したブランチに属するリビジョンのみを表示するフィルタです。
		コンボボックスにはリポジトリ内のブランチ名が含まれますが、
		:guilabel:`リポジトリ設定 -> チェンジログ -> 削除済みブランチ`
		の設定が適用されています。
	:guilabel:`カスタムフィルタ`
		最後のコンボボックスはその横にあるテキストボックスに入力するタイプの
		フィルタです。

カスタムフィルタはまず最初にフィルタの種類をコンボボックスで選択し、
テキストボックスに条件を入力してエンターキーを押すことで適用されます。

	:guilabel:`リビジョンの範囲`
		入力されたテキストをリビジョンの範囲として解釈します。詳細は
		`hg.1.html#revisions <https://www.selenic.com/mercurial/hg.1.html#revisions>`_
		をご覧ください。
	:guilabel:`ファイル名パターン`
		入力されたテキストを glob パターンとして解釈します。
		*regexp:* を先頭に付加することで正規表現パターンとして解釈されます。詳細は
		`hg.1.html#patterns <https://www.selenic.com/mercurial/hg.1.html#patterns>`_
		をご覧ください。
	:guilabel:`キーワード`
		入力されたテキストをチェンジセットのメタデータ (ユーザ名、コミットメッセージなど)
		にマッチするキーワードとして解釈します。
	:guilabel:`日付`
		入力されたテキストを日付の範囲として解釈します。詳細は
		`hg.1.html#dates <https://www.selenic.com/mercurial/hg.1.html#dates>`_
		をご覧ください。
	:guilabel:`ユーザ名`
		入力されたテキストをユーザ名 (コミッタ) として解釈します。

フィルタ条件の入力エリアはコンボボックスになっており、
ダイアログを開いている間は入力履歴を保持します。
ドロップダウンリストを開いて項目を選択するとフィルタが適用されます。


リビジョングラフ
----------------

グラフ列はリポジトリのリビジョン間の親子関係を表示します。この列は読み込まれている
チェンジセットを可視化するのに必要な幅が自動的に決定されます。チェンジログビューア
全体の表示を保つために表示幅には制限が設けられていますが、読み込み完了後に変更する
ことができます。


実行速度への影響
----------------

チェンジログビューアには巨大なリポジトリで使うべきではない機能がいくつかあります。

There are some Repository Explorer features that should probably be
avoided in large repositories.

* :menuselection:`表示 -> ブランチで色分け`
	このオプションはグラフ描画のために各リビジョンごとにブランチ名を取得する必要があり、
	リビジョン一覧の読み込み速度の低下を招きます。

* :menuselection:`表示 -> コンパクトグラフ`
	このオプションを有効にすると通常のグラフ描画速度より遅くなります。
	またグラフにおけるリビジョン間の接続が不正確になります。
	その意味でグラフの正確さかグラフの横幅の節約のどちらを取るかによります。

* リビジョン一覧の :guilabel:`変更` 列
	巨大な作業コピーを持つリポジトリにおいてこの列を表示することは実行速度の面で高くつきます。
	チェンジログビューアの起動だけでなく、スクロール速度も低下します。


リビジョンの右クリックメニュー
------------------------------

グラフパネルのリビジョンを選択して右クリックするとリビジョンの右クリックメニューが
表示されます：

	:guilabel:`GUI 差分ツールで表示`
		指定された GUI 差分表示ツールでこのチェンジセットを開きます。
	:guilabel:`変更点の表示`
		チェンジセットブラウザでこのチェンジセットを開きます。
	:guilabel:`ローカルとの差分`
		GUI 差分表示ツールでこのチェンジセットと作業ディレクトリの内容の差分を表示します。
	:guilabel:`ハッシュ値のコピー`
		このリビジョンの完全なハッシュ値をクリップボードにコピーします。
	:guilabel:`更新...`
		作業ディレクトリをこのリビジョンにおける内容に更新します。 [#rcm1]_
	:guilabel:`マージ...`
		このリビジョンとマージします。 [#rcm2]_
	:guilabel:`バックアウト...`
		選択中のリビジョンをバックアウトするチェンジセットを作成します。
	:guilabel:`元に戻す`
		作業ディレクトリの親リビジョンを変更せずに、このリビジョンの内容に戻します。
		十分注意して使用してください。
	:guilabel:`エクスポート`
		:guilabel:`パッチの作成...`
			このリビジョンの変更点を含んだパッチを作成します。
		:guilabel:`メールで送信...`
			このリビジョンの変更点をメールで送信します。 [#rcm3]_
		:guilabel:`バンドルの作成...`
			選択中のリビジョンから tip リビジョンまでのすべてのリビジョンを含むバンドルを作成します。
		:guilabel:`アーカイブに保存...`
			このリビジョンでアーカイブダイアログを開き、リポジトリのバックアップを作成します。
	:guilabel:`タグ`
		:guilabel:`タグの追加/削除...`
			TortoiseHg のタグ編集ダイアログを開きます。
		:guilabel:`ブックマークの追加/移動/削除...`
			TortoiseHg のブックマークダイアログを選択中のリビジョンで開きます。
			*このメニューは boomarks 拡張機能が有効なときにのみ表示されます。*
		:guilabel:`ブックマークの名前変更...`
			TortoiseHg のブックマーク名変更ダイアログを開きます。
			*このメニューは boomarks 拡張機能が有効なときにのみ表示されます。*
	:guilabel:`Mercurial Queue`
		:guilabel:`MQ にインポート`
			選択中のリビジョンを MQ にインポートします。
			qbase リビジョンまたはヘッドリビジョンにのみ有効です。
			*このメニューは mq 拡張機能が有効なときにのみ表示されます。*
		:guilabel:`削除...`
			選択中のリビジョンとそのすべての子孫にあたるリビジョンをリポジトリから削除します。
			[#rcm4]_ *このメニューは mq 拡張機能が有効なときにのみ表示されます。*
	:guilabel:`ローカルに移植`
		選択中のリビジョンを現在の作業ディレクトリの親リビジョンの上に移植 (transplant)
		します。 *このメニューは transplant 拡張機能が有効なときにのみ表示されます。*
	:guilabel:`Bisect`
		:guilabel:`リセット`
			Bisect の状態をリセットします。
			詳しくは後述の `bisect <#id10>`_ のセクションを参照してください。
		:guilabel:`Good としてマーク`
			選択中のリビジョンを Good としてマークします。
		:guilabel:`Bad としてマーク`
			選択中のリビジョンを Bad としてマークします。
		:guilabel:`テストをスキップ`
			選択中のリビジョンのテストをスキップします。

リビジョンを選択した後、別のリビジョンの上で右クリックすると先ほどとは異なる
右クリックメニューが表示されます。このメニューにはリビジョン範囲を扱うコマンドが
含まれています。

	:guilabel:`選択中のリビジョンとの差分`
		リビジョン範囲で累積された変更をステータスビューアで開きます。
		これは変更点の中から特定のファイルへの変更だけを取り出して保存するのに便利です。
	:guilabel:`選択中のリビジョンとの GUI 差分表示` [#rcm5]_
		リビジョン範囲で累積された変更を GUI 差分表示ツールで開きます。
	:guilabel:`この範囲をメールで送信`
		リビジョン範囲でメール送信ダイアログを開きます。
	:guilabel:`この範囲をバンドル`
		リビジョン範囲を含むバンドルファイルを作成します。
	:guilabel:`この範囲をパッチとして保存...`
		リビジョン範囲のチェンジセットを個別のパッチとして保存します。
	:guilabel:`マージ...` [#rcm6]_
		このリビジョンと選択中のリビジョンをマージします。もしどちらのリビジョンも
		チェックアウトされていない場合はマージ作業を始める前に最初に選択したリビジョンに更新されます。
		作業ディレクトリがクリーンでない場合、この操作は失敗します。
	:guilabel:`この範囲をローカルに移植`
		リビジョン範囲のチェンジセットを現在の作業ディレクトリの親リビジョンの上に移植
		(transplant) します。
		*このメニューは transplant 拡張機能が有効なときにのみ表示されます。*
	:guilabel:`選択中のリビジョンの上にリベースする`
		このリビジョンを選択中のリビジョンの上にリベースします。
		*このメニューは rebase 拡張機能が有効なときにのみ表示されます。*
	:guilabel:`この範囲を MQ にインポート`
		リビジョン範囲のチェンジセットを MQ にインポートします。
		*このメニューは mq 拡張機能が有効なときにのみ表示されます。*

.. [#rcm1]	選択したリビジョンが指定された状態で TortoiseHg の更新ダイアログが開きます。
.. [#rcm2]	選択したリビジョンが指定された状態で TortoiseHg のマージダイアログが開きます。
.. [#rcm3]	選択したリビジョンが指定された状態で TortoiseHg のメール送信ダイアログが開きます。
.. [#rcm4]	strip コマンドは削除したリビジョンを後で再適用できるようにバンドルファイルとして
			保存します。詳細は `こちら <https://www.mercurial-scm.org/wiki/EditingHistory>`_
			を参照してください。
.. [#rcm5]	:menuselection:`ユーザ設定 --> TortoiseHg --> GUI 差分表示コマンド`
.. [#rcm6]	選択中のリビジョンが現在の作業ディレクトリの親リビジョンであるときのみ有効になります。


ファイルの右クリックメニュー
----------------------------

左下にあるファイル一覧のファイル名の上で右クリックすると、そのファイルの
右クリックメニューが表示されます：

	:guilabel:`GUI 差分表示`
		このファイルを GUI の差分表示ツールで開きます。
	:guilabel:`ローカルとの差分`
		このファイルと作業ディレクトリの該当ファイルの差分を視覚的に表示します。
	:guilabel:`エディタで表示`
		このファイルを GUI のエディタで開きます。 [#flcm1]_
	:guilabel:`ファイルに保存...`
		このファイルを指定された場所に保存します。
	:guilabel:`履歴の表示`
		このファイルが変更されたすべてのリビジョンを表示します。 [#flcm2]_
	:guilabel:`行ごとの履歴を表示`
		このファイルの行ごとの変更履歴を表示します。
	:guilabel:`元に戻す`
		このファイルを作業ディレクトリに取り出します。 [#flcm3]_

.. [#flcm1]	:menuselection:`ユーザ設定 --> TortoiseHg --> GUI エディタ`
.. [#flcm2]	ファイルの履歴を変更しない単純な変更のみ表示し、削除されたファイルなどは
				表示されません。
.. [#flcm3]	新しいファイル内容は作業ディレクトリへの変更として反映されるので、
				コミットが必要になります。


チェンジセットブラウザ
----------------------

チェンジセットブラウザは動作速度向上のため通常1つのファイルの差分のみ表示します。
一度にすべてのファイルの差分を表示したい場合は :guilabel:`[すべてのファイル]` を
クリックしてください。またチェンジセットブラウザは最大差分サイズを超えるファイル
は表示せず飛ばします。詳しくは
:menuselection:`ユーザ設定 --> TortoiseHg --> 最大差分サイズ`
を参照してください。 :menuselection:`表示
-> 最大差分サイズ制限を無視` を使用すると一時的にこのオプションを無効化できます。

チェンジログビューアとリポジトリ検索ツールは単一のリビジョンまたはいくつかの
リビジョン範囲が連結された差分を表示するためにチェンジセットブラウザを開きます。
チェンジセットブラウザはコミットツールやシェルフツールにとても良く似ています。
左側には変更されたすべてのファイルが一覧表示され、右側の差分パネルには変更箇所が
行ごとに表示されます。

'変更差分モード' で開いた場合、表示しているチェンジセットからファイルまたは
ファイル内のハンクを選択して特定の変更点を抽出し、ツールバーの
:guilabel:`名前を付けて保存` ボタンからそれらをパッチとして保存できます。
これはリポジトリから必要な変更のみを取り出すのに非常に効率的な方法です。
チェンジセットブラウザはキーボードショートカットの :kbd:`Ctrl-C` に
対応しているため、ハイライトされているハンクをクリップボードにコピーできます。

残念ながら TortoiseHg にはまだ変更点を取り込むためのダイアログが用意されていないため、
これらについてはコマンドラインから :command:`hg import` を実行してください。


コミットメッセージの解析
------------------------

TortoiseHg 1.0 からチェンジログビューアはコミットメッセージ内のチェンジセットのハッシュ値、
ウェブサイトの URL、バグ管理システムの識別番号を認識して下線を引きます。
下線が引かれた部分はクリック可能なリンクになります。

16進数 (0-9a-f) の12文字または40文字の連続した文字列はすべてチェンジセットのハッシュ値と見なされ、
そのチェンジセットへのリンクになります。
開いているリポジトリにそのチェンジセットが存在すれば、クリックすることで移動できます。

ウェブサイトの URL も同様にクリック可能なリンクになり、システム既定のブラウザで開かれます。

バグ番号のリンクは設定ファイルの tortoisehg セクションが設定されているときに有効になります。
今のところ1度に1つのバグ管理システムしか登録できませんが、通常はリポジトリの :file:`.hg/hgrc`
ファイルに記述します。設定項目は issue.regex と issue.link の2つです。
issue.regex でバグ番号を切り出すための正規表現を定義し、
issue.link でどのような URL を生成するかを定義します。

issue.regex では正規表現のグループ機能を使うことができ、グループでマッチした文字列は
{n} (n は非負整数) を issue.link に含めることで展開されます。
{0] は issue.regex によるマッチ全体、 {1} は最初のグループを参照します。
{n} トークンが issue.link に含まれていない場合、マッチ全体が issue.link
文字列の最後に追加されます。

設定例： ::

	BitBucket:
	issue.regex = #(\d+)\b
	issue.link = https://bitbucket.org/<your project and repo>/issue/{1}/

	Mercurial:
	issue.regex = \bissue(\d+)\b
	issue.link = https://bz.mercurial-scm.org/show_bug.cgi?id={1}


Bisect
------

TortoiseHg 1.0 から、どのチェンジセットにおいてバグが入り込んだのかを調べる
Bisect 機能に対応しました。まず、バグが確認されているもっとも新しいチェンジセットに
"Bad" のマークを付け、次にバグがないとわかっているもっとも古いチェンジセットに
"Good" のマークを付けます。そしてテストを実行して作業ディレクトリの親リビジョンが
"Good" なのか "Bad" なのかをマークします。すると Bisect
は別の可能性のあるチェンジセットに更新します。もしそれ以上可能性のある
リビジョンがない場合は問題のリビジョンが見つかったことを知らせます。

リビジョンに "Good" または "Bad" のマークを付ける際、
そのチェンジセットをチェックアウトする必要はありません。

より自動的な Bisect を実現するには Mercurial をコマンドラインから使用し、
作業ディレクトリの構成でビルドしてテストを実行し、0 (成功)、125 (スキップ)、
127 (中断)、または "Bad" (0、125、127以外)
を返す自動化されたテストを提供する必要があります。
詳しくは :command:`hg bisect` コマンドのヘルプを参照してください。


キーボードショートカット
------------------------

:kbd:`Ctrl-P`
	作業ディレクトリの親リビジョンに移動します
:kbd:`Ctrl-D`
	GUI の差分表示ツールで選択中のチェンジセットを表示します
:kbd:`Ctrl-R`
	表示内容を再読み込みします
:kbd:`Ctrl-G`
	指定リビジョンに移動します


オプション設定
--------------

チェンジログビューアには TortoiseHg 設定ダイアログのチェンジログタブから変更できる
いくつかのオプション項目があります。

	:guilabel:`コミッタの色分け`
		チェンジセットをコミッタごとに色分けします
	:guilabel:`改行を無視してログを表示`
		コミットメッセージの改行を無視して、最大80文字まで表示します
	:guilabel:`読み込むログの件数`
		一度に読み込むリビジョンの件数
	:guilabel:`ハッシュ値のコピー`
		選択時にリビジョンのチェンジセット ID (ハッシュ値) をクリップボードにコピーします。
		廃止予定。
	:guilabel:`削除済みブランチ`
		リポジトリでブランチ名一覧を作成する際に無視するブランチ名をカンマ区切りで指定します。
	:guilabel:`ブランチの色:`
		ブランチ名とその色を "branch:#XXXXXX" の形式で空白文字区切りで指定。
		ブランチ名に含まれる空白文字とコロン(":")はバックスラッシュ("\")で
		エスケープする必要があります。同様に他の文字についても、例えば "\u0040"
		はアットマーク("@")にデコードされ、"\n" は改行になります。
	:guilabel:`非表示タグ:`
		非表示にしたいタグ名を空白区切りで指定。便利な使用例："qbase qparent qtip"
		を設定することで MQ 拡張機能が使用するタグを隠すことができます。
	:guilabel:`折り畳み`
		チェンジセットのヘッダ情報を折り畳み可能にします。このオプションを有効にした場合、
		ヘッダ情報の部分は固定表示になります。

特定のコミッタに指定した色を割り当てたい場合は :file:`Mercurial.ini` ファイルに
次の設定を追加してください： ::

	[tortoisehg]
	authorcolor.コミッタ名 = color

またチェンジログビューアは TortoiseHg ページの以下の設定も反映されます：

	:guilabel:`タブ文字の幅`
		コメント情報の表示でタブ文字1つあたりいくつの空白に展開するかを指定します
	:guilabel:`最大差分サイズ`
		表示する最大の差分ファイルサイズ
	:guilabel:`差分を画面下部に表示`
		ファイル一覧の下に差分表示パネルを配置する


コマンドラインからの実行
------------------------

チェンジログビューアはコマンドラインから起動することもできます： ::

	hgtk log [OPTIONS] [FILE]

	aliases: history

	changelog viewer

	options:

	 -l --limit  limit number of changes displayed

	use "hgtk -v help log" to show global options

.. vim: noet ts=4
