Changes between Initial Version and Version 1 of TracRepositoryAdmin


Ignore:
Timestamp:
09/18/14 10:48:12 (10 years ago)
Author:
trac
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • TracRepositoryAdmin

    v1 v1  
     1= リポジトリ管理 = #RepositoryAdministration 
     2[[PageOutline(2-3)]] 
     3 
     4== クイックスタート == #QuickStart 
     5 
     6 * リポジトリの管理は、 "リポジトリ" (英語版では "Repository") 管理パネル、 `trac-admin` または、 [wiki:TracIni#repositories-section trac.ini] の `[repositories]` セクションで管理します。 
     7 * 各リポジトリの post-commit フックに `trac-admin $ENV changeset added $REPO $REV` を実行するよう設定して下さい。さらに、リポジトリのリビジョンのプロパティが変更されたときのために、 post-revprop-change フックに `trac-admin $ENV changeset modified $REPO $REV` を追加してください。 
     8 * `[trac] repository_sync_per_request` オプションを empty 値に設定し、リクエスト毎の同期を行なわないようにします。 
     9 * Subversion のフックを実行するユーザが Trac environment に対して書き込み権限を持っていることを確認して下さい。もしくは、一時的に権限を高める `sudo` のようなツールを使って下さい。 
     10 
     11== リポジトリを指定する == #Repositories 
     12バージョン 0.12 から Trac は 1 つの Trac Environment に対して 1 つ以上のリポジトリを扱えるようになりました。 0.12 以前の [wiki:TracIni trac.ini] の `[trac]` セクションの `repository_dir` と `repository_type` オプションでリポジトリを指定する方法もサポートしていますが、 2 つの新しいメカニズムにより、 Trac Environment にリポジトリを追加することができます。 
     13 
     14リポジトリのエイリアスを定義することも可能です。エイリアスは実際のリポジトリへの "ポインタ" となります。これはリポジトリの名前変更を行なったときに古い名前へのリンク切れを防ぐのに便利です。 
     15 
     16各リポジトリに関連したいくつかの属性があり、リポジトリのロケーション、名前、リポジトリブラウザでどのように表示されるかを定義できます。下記の属性がサポートされています: 
     17 
     18||='''属性''' =||='''概要''' =|| 
     19||`alias` ||\ 
     20||リポジトリは 実在するリポジトリへのエイリアスとなる `alias` 属性を 1 つ持っています。すべての TracLinks はエイリアスされたリポジトリを解決するためにエイリアスを参照します。複数の間接参照はサポートされていません。従って、エイリアスは常に実在するリポジトリをポイントしなければなりません。 `alias` 属性と `dir` 属性は相反するものです。 || 
     21||`description` ||\ 
     22||`description` 属性で指定されているテキストは、リポジトリブラウザ内のそのリポジトリのトップレベルのエントリの下部に表示されます。 WikiFormatting をサポートします。 || 
     23||`dir` ||\ 
     24||`dir` 属性はファイルシステム内におけるリポジトリのロケーションを指定します。これは以前に設定していた `[trac] repository_dir` と一致するものです。 `alias` 属性と `dir` 属性は相反する設定です。 || 
     25||`hidden` ||`true` に設定すると、リポジトリブラウザのインデックスのページから見えなくなります。それでもなお、リポジトリをブラウズすることはできますし、リポジトリを参照するリンクは有効です。 || 
     26||`type` ||`type` 属性はリポジトリが使用しているバージョン管理システムのタイプを設定します。 Trac は Subversion を当初からサポートしており、プラグインを使用して他のシステムをサポートします。もし `type` 属性が指定されていなかったら、 `[trac] repository_type` オプションの値が使用されます。 || 
     27||`url` ||`url` 属性はリポジトリからチェックアウトするときに使用するルートのURLを指定します。指定された場合、 "リポジトリ URL" リンクがリポジトリブラウザのナビゲーションコンテキストに追加されます。 URL はツールにコピーすることができるので、ワーキングコピーを作るときに使用できます。 || 
     28 
     29リポジトリの `name` 属性と`alias` 属性または `dir` 属性は必須項目です。他の項目はオプションです。 
     30 
     31リポジトリを追加した後、そのリポジトリのキャッシュは `trac-admin $ENV repository resync` コマンドで再同期されなければなりません。 
     32 
     33 `repository resync <repos>`:: 
     34   Trac とリポジトリを再同期する。 
     35 
     36 
     37=== ファイル (`trac.ini`) を使用した設定 === #ReposTracIni 
     38リポジトリとリポジトリの属性は [wiki:TracIni#repositories-section trac.ini] の `[repositories]` セクションで設定することができます。すべてのキーは `{name}.{attribute}` という規則で構成されていて、キーに対応する値は、等号 (`=`) で区切られています。デフォルトのリポジトリの名前は empty になります。 
     39 
     40`trac.ini` でリポジトリを設定する主たる利点は、グローバルな設定から継承できることです ( TracIni の [wiki:TracIni#GlobalConfiguration グローバルな設定 ] 参照 ) 欠点は、 `trac.ini` をパースするのに使用されている `ConfigParser` クラスの制限事項として、リポジトリ名が常に小文字しか受け付けないということです。 
     41 
     42下記の例では `project`, `lib` という 2 つのSubversion リポジトリが定義し、デフォルトのリポジトリとして `project` にエイリアスが設定されています。これは以前に Trac Environment が単一のリポジトリ ( `project` リポジトリ ) だったものを、複数のリポジトリに変換した際の典型的な使用例です。エイリアスは設定変更前から存在するリンクが `project` リポジトリを解決できることを保証します。 
     43{{{ 
     44#!ini 
     45[repositories] 
     46project.dir = /var/repos/project 
     47project.description = This is the ''main'' project repository. 
     48project.type = svn 
     49project.url = http://example.com/svn/project 
     50project.hidden = true 
     51 
     52lib.dir = /var/repos/lib 
     53lib.description = This is the secondary library code. 
     54lib.type = svn 
     55lib.url = http://example.com/svn/lib 
     56 
     57.alias = project 
     58}}} 
     59Note: `name.alias = target` の場合、 `name` を `target` リポジトリへのエイリアスにします。他の方法がありません。 
     60 
     61=== データベースを使用した設定 === #ReposDatabase 
     62リポジトリは (trac.ini ファイルではなく) データベース内でも設定することができます。 "バージョンコントロール" (英語版では "Version Control") 配下の "リポジトリ" 管理パネル、もしくは `trac-admin $ENV repository` コマンドを使用します。 
     63 
     64管理パネルは Trac Environment 内に定義されているすべてのリポジトリのリストを表示します。リポジトリ、エイリアスの追加、リポジトリの属性の編集、リポジトリの削除ができます。 `trac.ini` に定義されているリポジトリもまた表示されますが、編集はできません。 
     65 
     66以下の [wiki:TracAdmin trac-admin] コマンドはコマンドラインからリポジトリを操作する際に使用します。 
     67 
     68 `repository add <repos> <dir> [type]`:: 
     69   `<dir>` にあるリポジトリ `<repos>` を Trac に追加し、オプションとして、リポジトリのタイプを指定します。 
     70 
     71 `repository alias <name> <target>`:: 
     72   リポジトリ `<target>` のエイリアス `<name>` を設定します。 
     73 
     74 `repository remove <repos>`:: 
     75   リポジトリ `<repos>` を削除します。 
     76 
     77 `repository set <repos> <key> <value>`:: 
     78   リポジトリ `<repos>` の属性 `<key>` と `<value>` を設定します。 
     79 
     80Note: デフォルトリポジトリはの名前は空文字列です。したがって、 `trac-admin` をシェルから起動させたときは、おそらくクオートする必要があるでしょう。代替手段として、例えば `trac-admin` を対話モードで起動しているときは、代わりに "`(default)`" を使用することができます。 
     81 
     82 
     83== リポジトリの同期 == #Synchronization 
     84Trac 0.12 以前では、HTTP リクエストが発生するたびに Trac が持つキャッシュとリポジトリの同期処理を行なっていました。このアプローチは効果的ではなく、複数のリポジトリを扱う上ではもはや実用的ではありません。この理由から、 post-commit フックを利用した明示的な同期処理が追加されました。 
     85 
     86リポジトリの変更を監視する拡張ポイントを定義するインタフェース ''(IRepositoryChangeListener)'' が追加されました。このインタフェースの呼び出しは、チェンジセットが追加または修正されたときの post-commit フックをトリガーとしています。コミット時に何かしらのアクションを実行するプラグインで使用することができます。 
     87 
     88=== Mercurial リポジトリ === #MercurialRepositories 
     89このドキュメントを書いている時点では、 Mercurial 導入時の同期作業やフックは必要ではありません - 詳細は [http://trac.edgewall.org/ticket/9485 本家チケット 9485] を参照して下さい。 
     90 
     91=== 明示的な同期 === #ExplicitSync 
     92これは推奨するリポジトリの同期方法です。 [wiki:TracIni#trac-section trac.ini] の `[trac]  repository_sync_per_request` オプションを empty 値に設定する必要があります。そして、各リポジトリの post-commit フック内で `trac-admin` を呼び出すようにします。さらに、リポジトリでリビジョンのメタデータを変更することが許されているならば、 post-revprop-change フックにも同様に `trac-admin` を呼び出すように設定します。 
     93 
     94 `changeset added <repos> <rev> [...]`:: 
     95   Trac に 1 つ以上のチェンジセットがリポジトリに発生したことを知らせる。 
     96 
     97 `changeset modified <repos> <rev> [...]`:: 
     98   Trac に 1 つ以上のチェンジセットに対するメタデータの変更がリポジトリに加えられたことを知らせる。 
     99 
     100引数 `<repos>` にはリポジトリ名 ( デフォルトのリポジトリには "`(default)`" を使用する ) または、リポジトリへのパスを指定します。 
     101 
     102Note: もし PYTHON_EGG_CACHE のロケーションをデフォルトから変更している場合、 trac-admin を起動する前にウェブサーバと同じ値の PYTHON_EGG_CACHE を環境変数として設定しないといけないかもしれません。詳細については、 [wiki:TracPlugins Trac プラグイン] を参照して下さい。 
     103 
     104下記は、 Subversion の完璧な post-commit と post-revprop-change スクリプトの一例です。特定の環境用に編集、そして適切な実行権を付けて 各リポジトリの `hooks` ディレクトリにおいてください。 UNIX における (`post-commit`) 例: 
     105{{{#!sh 
     106#!/bin/sh 
     107export PYTHON_EGG_CACHE="/path/to/dir" 
     108/usr/bin/trac-admin /path/to/env changeset added "$1" "$2" 
     109}}} 
     110Note: Ubuntu では /usr/bin/trac-admin を指定せずに以下のように指定ができます: 
     111{{{#!sh 
     112#!/bin/sh 
     113export PYTHON_EGG_CACHE="/path/to/dir" 
     114trac-admin /path/to/env/ changeset added "$1" "$2" 
     115}}} 
     116Windows における (`post-commit.cmd`) の例: 
     117{{{#!application/x-dos-batch 
     118@C:\Python26\Scripts\trac-admin.exe C:\path\to\env changeset added "%1" "%2" 
     119}}} 
     120 
     121Subversion の post-revprop-change フックはとても似たものになります。 UNIX における (`post-revprop-change`) の例: 
     122{{{#!sh 
     123#!/bin/sh 
     124export PYTHON_EGG_CACHE="/path/to/dir" 
     125/usr/bin/trac-admin /path/to/env changeset modified "$1" "$2" 
     126}}} 
     127Windows における (`post-revprop-change.cmd`) の例: 
     128{{{#!application/x-dos-batch 
     129@C:\Python26\Scripts\trac-admin.exe C:\path\to\env changeset modified "%1" "%2" 
     130}}} 
     131 
     132上記の UNIX の変数は、 Subversion のコミットの実行ユーザが Trac に対して、書き込み権限があると仮定したもので、リポジトリと Trac の両方がウェブサーバを使って、動作している一般的な設定に基づいています。もし、ウェブサーバ経由以外での方法でリポジトリにアクセス (例: `svn+ssh://` ) しているならば、 `trac-admin` を別の権限で起動 (例: `sudo` コマンド ) しなければならないかもしれません。 
     133 
     134Note: Subversion のフックで `trac-admin` を呼び出すことは、クライアントサイドにおいては、コミットとログの編集操作に時間がかかってしまうことになります。非同期な方法で行なうために、 `trac-admin` で始まる [http://trac.edgewall.org/browser/trunk/contrib/trac-svn-hook contrib/trac-svn-hook] を使いたいと思うかもしれません。スクリプトもまた何回もの安全性のチェックと使い方のアドバイスを行なっているので、フックを設定したりテストするのはずっと簡単なことかもしれません。まだ Windows 用の `trac-svn-hook.bat` に匹敵するものはありませんが、スクリプトは Cygwin の bash で起動することができます。 
     135 
     136より詳しい情報は、Subversion 本の [http://svnbook.red-bean.com/en/1.5/svn.reposadmin.create.html#svn.reposadmin.create.hooks フックについて] を参照して下さい。他のリポジトリのタイプでは異なるフックの設定が必要です。 
     137 
     138Git フックは、 Git リポジトリの同期と同じように使用することができます。`.git/hooks/post-commit` に以下を追加します: 
     139{{{#!sh 
     140REV=$(git rev-parse HEAD) 
     141trac-admin /path/to/env changeset added <my-repository> $REV 
     142}}} 
     143 
     144Mercurial では、 Trac にアクセスされるリポジトリ毎の `.hgrc` ファイルに以下を追加します。 ([trac:TracMercurial] が Trac の `plugins` ディレクトリにインストールされている場合、 [source:plugins/0.13/mercurial-plugin/tracext/hg/hooks.py hooks.py] をダウンロードし、どこかアクセス可能な場所に格納してください) : 
     145{{{#!ini 
     146[hooks] 
     147; If mercurial-plugin is installed globally 
     148commit = python:tracext.hg.hooks.add_changesets 
     149changegroup = python:tracext.hg.hooks.add_changesets 
     150 
     151; If mercurial-plugin is installed in a Trac plugins directory 
     152commit = python:/path/to/hooks.py:add_changesets 
     153changegroup = python:/path/to/hooks.py:add_changesets 
     154 
     155[trac] 
     156env = /path/to/env 
     157trac-admin = /path/to/trac-admin 
     158}}} 
     159 
     160=== リクエスト毎の同期処理 === #PerRequestSync 
     161もし post-commit フックが使用できないならば、その環境ではリクエスト毎の同期処理を設定することができます。この場合、 [wiki:TracIni#trac-section trac.ini] のオプション `[trac] repository_sync_per_request` に同期対象のリポジトリをカンマ区切りでリストしなければなりません。 
     162 
     163Note: この場合、チェンジセットのリスナの拡張ポイントは呼び出されません。それゆえ、使用しているプラグインは正しく動かないかもしれません。 
     164 
     165 
     166== 単一リポジトリからの移行手順 (Subversion) == #Migration 
     167下記の手順は、 Subversion における単一リポジトリから複数のリポジトリの設定へ変更するための典型的な移行方法になります。 
     168 
     169 1. `[trac] repository_dir` オプションからリポジトリのデフォルトの設定を削除する。 
     170 1. メインとなるリポジトリを名前付きのリポジトリとして登録する。 
     171 1. メインのリポジトリを再同期する。 
     1721. post-commit フックと post-revprop-change フックをメインのリポジトリに設定し、 `[trac] repository_sync_per_request` オプションに empty 値を設定します。 
     173 1. デフォルトリポジトリとしてメインリポジトリに alias 属性を追加します。 (`name` は除外。つまり、`.alias = main`)。これは移行前に作成されたすべてのリンクがメインリポジトリを解決できることを保証します。 
     174 1. ステップ 2,3,4 を他の "名前付きの" リポジトリに対して必要に応じて繰り返します。 
     175 
     176== 単一リポジトリからの移行手順 (Mercurial) == #MigrationMercurial 
     177下記の手順は、 Mercurial における単一リポジトリから複数のリポジトリの設定へ変更するための典型的な移行方法になります。このドキュメントを執筆している時点では、 Mercurial 導入時の同期作業やフックは必要ではありません - 詳細は [http://trac.edgewall.org/ticket/9485 本家チケット 9485] を参照して下さい。 
     178 
     179 1. TracMercurial プラグインを最新バージョンにアップグレードします。 
     180 1. デフォルトリポジトリの設定を trac.ini の `[trac] repository_dir` オプションから削除します。 
     181 1. メインとなるリポジトリを名前付きのリポジトリとして追加します。 
     182 1. デフォルトリポジトリとしてメインリポジトリに alias 属性を追加します。 (`name` は除外。つまり、`.alias = main`)。これは移行前に作成されたすべてのリンクがメインリポジトリを解決できることを保証します。 
     183 1. ステップ 3 を他の "名前付きの" リポジトリに対して必要に応じて繰り返します。 
     184 
     185== トラブルシューティング == #Troubleshooting 
     186 
     187=== trac-post-commit-hook はもはや機能しません === #trac-post-commit-hook 
     188 
     189今では、 `tracopt.ticket.commit_updater.*` のオプションのコンポーネントを使用しなければなりません。 Web からの管理の一般設定配下のプラグインパネルか trac.ini の [TracIni#components-section "[components]"] セクションを直接編集することによって有効にすることができます。上記で説明している [#ExplicitSync 明示的な同期] を確実に行なってください。