第 2 章「ワークスペース管理の概要」で説明したように、ワークスペースはワークスペース管理システムの基本となる概念です。個々の開発者に割り当てられるワークスペースによって、各開発者はほかの開発者の作業と並行して独自に作業を進めることができます。ワークスペースについての定義は、「ワークスペース」を参照してください。
この章では、ワークスペースの具体的な側面、およびワークスペースの構成、作成、操作、管理を行うためのワークスペース管理コマンドについて説明します。
この章は、以下の節で構成されています。
ワークスペース管理ツールによって管理されているワークスペースとは、 Codemgr_wsdata というディレクトリを持つディレクトリ階層のことです。ワークスペース管理ツールは、該当ワークスペースに関連するデータ (メタデータ) を Codemgr_wsdata ディレクトリ下のファイルに格納します。ワークスペース管理コマンドは、Codemgr_wsdata ディレクトリの有無によって、ディレクトリがワークスペースであるかどうかを判別します。
TeamWare ワークスペース管理ツールには、Codemgr_wsdata ディレクトリに格納されている情報を管理するために必要なさまざまな機能が用意されています。通常、手動での変更はお勧めしませんが、まれに、特定のファイルを手動で変更することが必要になる場合があります。ただしその場合も、編集する各ファイルの形式を理解して、形式を変更することのないように注意してくだい。表 6-1 に、Codemgr_wsdata ディレクトリに含まれる各ファイルおよびディレクトリの概要を示します。これらのファイルの形式に関する詳細は、各ファイルの man(4) のマニュアルページを参照してください。
表 6-1 Codemgr_wsdata ディレクトリの内容
ファイル名またはディレクトリ名 |
説明 |
---|---|
access_control |
access_control ファイルには、あるワークスペースに対してワークスペース管理ツールのトランザクションやコマンドを実行できるユーザーを制限するための情報が収められています。ワークスペースが作成されると、同時にデフォルトのアクセス制御ファイル (access_control)も作成されます。詳細は、「ワークスペースへのアクセス制御」を参照してください。 |
args |
args ファイルはブリングオーバーおよびプットバックトランザクションのコマンドによって管理するファイルです。この中にはファイル、ディレクトリ、および FLP 引数のリストが収められています。args ファイルには最初、ワークスペースの作成時に指定された引数が収められています。以降のブリングオーバーまたはプットバックトランザクションでユーザーが引数を明示的に指定すると、コマンドは args ファイルにすでに存在する引数よりも新しい引数のほうが広い範囲であるかどうかを判別し、広範囲であれば古い引数を新しい引数と置き換えます。 |
backup/ |
backup ディレクトリは、ワークスペース管理ツールがブリングオーバーあるいはプットバックトランザクションの実行結果を破棄して、実行前の状態に戻すときに使用する情報を格納する場所です。詳細は、「ブリングオーバーまたはプットバックの取り消し」を参照してください。 |
children |
children ファイルには、該当ワークスペースの子ワークスペースのリストが格納されます。子ワークスペースの名前は作成ブリングオーバートランザクションの実行時に該当ワークスペースの children ファイルに書き込まれます。ワークスペース管理ツールは、このファイルを参照して子ワークスペースのリストを入手します。ワークスペースを削除または移動したり、あるいは親を変更した場合、ワークスペース管理ツールはその親ワークスペースに存在する children ファイルを更新します。 |
conflicts |
conflicts ファイルは、その時点で衝突のあるワークスペースのファイルリストを保持するためのものです。衝突に関する詳細および衝突の解決方法については、第 8 章「衝突の解決」を参照してください。 |
history |
history ファイルには、あるワークスペースに影響を与えたトランザクションや更新ファイルの処理記録が収められます。詳細は、「ワークスペースに関するコマンド履歴の表示」を参照してください。 |
locks |
ワークスペースの一貫性を保持するため、ワークスペース管理ツールは、ブリングオーバー、プットバック、取り消しトランザクションの実行時に対象ワークスペースをロックします。ロックは各ワークスペースごとに locks ファイルに記録されます。ワークスペース管理ツールは、ワークスペースに何らかの操作を加えるときには、その前に locks ファイルを参照してロックの有無を確認します。「ワークスペースのロックによる整合性の保持」を参照してください。 |
nametable |
nametable ファイルには、SCCS ファイル名 (該当ワークスペースからの相対パス名) と、32 ビット 16 進ワードで表現される一意の数が 4 つずつ登録されたテーブルが収められています。このテーブルの各エントリは改行文字で区切られています。ワークスペース管理ツールは、ブリングオーバーおよびプットバックトランザクションでこの nametable ファイルを使用することによって、名前が変更されているファイルに対する処理速度を向上させます。このファイルが利用できない場合には、次のプットバックまたはブリングオーバートランザクションの実行時に自動的に再作成されます。「ファイルの名前変更、移動、または削除」を参照してください。 |
notification |
notification ファイルは、通知要求を登録するためのものです。この機能によって、ワークスペース管理ツールは、該当ワークスペースに関連するイベントの発生を検出し、電子メールメッセージを送信できます。「ユーザーへのワークスペース変更通知」を参照してください。 |
parent |
parent ファイルには、ワークスペースの親ワークスペースのパス名が収められます。作成ブリングオーバートランザクション、または (該当ワークスペースがワークスペース作成コマンドで作成されたために親を持たない場合は) 親の変更によって作成されます。ワークスペース管理ツールは、このファイルを参照してワークスペースの親を判別します。ワークスペースの削除、移動、あるいは親の変更を行なった場合、ワークスペース管理ツールは、その子ワークスペースの parent ファイルを更新します。 |
putback.cmt |
putback.cmt ファイルは、最後に中止されたプットバックトランザクションのコメントテキストを一時的に保持するキャッシュとして働きます。プットバックトランザクションが中止されると、コメントは廃棄されます。そこでワークスペース管理ツールは、トランザクションを再実行したときに元のテキストを取り出すことができるように、putback.cmt ファイルにコメントをキャッシュしておきます。 |
ワークスペースは次の 2 とおりの方法で作成できます。
「ワークスペース管理」ウィンドウで「ファイル」⇒「ワークスペース作成」を選択して、明示的に作成する方法。
作成ブリングオーバートランザクションで、まだ存在しない子ワークスペースにファイルをコピーすることによって、暗黙に作成する方法。この場合、子ワークスペースが作成された後、指定されたファイルがコピーされます。
「ファイル」⇒「ワークスペース作成」を選択すると、新しいワークスペースを作成できます。「ワークスペースディレクトリ」フィールドに新しいワークスペースのルート (最上位) ディレクトリの名前を入力し、「了解」ボタンをクリックします。
作成しようとするワークスペースがすでにディレクトリ階層として存在している場合、ワークスペース管理ツールは最上位ディレクトリに Codemgr_wsdata ディレクトリを追加し、ワークスペース表示区画にそのアイコンを表示することで、その既存ディレクトリをワークスペースに変換します。
ディレクトリが存在しない場合には、ワークスペース管理ツールによって、最上位ディレクトリと Codemgr_wsdata ディレクトリの両方が新規に作成されます。
「トランザクション」メニューから「作成ブリングオーバー」を使用すると、親ワークスペースからまだ存在しない子ワークスペースにファイルをコピーすることができます。子ワークスペースはこのトランザクションで自動的に作成されます。詳細は、「新しい子ワークスペースの作成 (作成ブリングオーバー)」を参照してください。
オンラインヘルプの「新規ワークスペースの作成」でも、手順について説明しています。このヘルプ項目を参照するには、「ヘルプ」 ⇒ 「ヘルプの目次」⇒「プロジェクトの開始」を選択してください。
ワークスペースを削除するには、ワークスペース表示区画にあるアイコンを選択してから、「編集」⇒「削除」を選択します。
「削除」サブメニューを選択すると、ワークスペースを削除するための次の 2 つのメニューが表示されます。
「ソースと Codemgr_wsdata ディレクトリ」 ワークスペースの内容をサブディレクトリまで含めて再帰的に削除します。削除を確認するメッセージが表示されます。
「Codemgr_wsdata ディレクトリのみ」 Codemgr_wsdata サブディレクトリだけを削除します。対応するアイコンがワークスペース表示区画から削除され、ワークスペースがワークスペースでない通常のディレクトリに変わります。
いずれの場合もワークスペース管理ツールは、親および子ワークスペース内のレコードを自動的に更新して、該当ワークスペースの削除を反映させます。
ワークスペースはディレクトリであるため、そのパス名を変更することによって、階層内での位置を移動することができます。ワークスペースの移動は、次の 2 とおりの方法で行うことができます。
ワークスペース表示区画で目的のワークスペースの名前を変更する方法。
名前を変更するワークスペースアイコンのテキスト部分をクリックすると、「名前変更」ダイアログが開きます。「新ワークスペース名」フィールドに名前を入力して「了解」ボタンをクリックします。
「編集」⇒「名前変更」を選択する方法。
選択されているワークスペースのパス名は、「新ワークスペース名」フィールドに入力した名前に変更されます。
これらの方法では、ワークスペースのパス名を変更するほか、親および子ワークスペースに存在するいくつかのデータファイルが更新され、新しい名前が書き込まれます。これらのデータファイルについては、「ワークスペースのメタデータディレクトリ」を参照してください。
ワークスペースの名前変更や移動を行うときに、mv コマンドは使用しないでください。
ワークスペース管理ツールによる名前変更は、ワークスペースの親および子の中のファイルを移動し、Codemgr_wsdata/history ファイルにこのイベントを記録します。
mv コマンドを使用して誤ってワークスペースを移動あるいは名前変更した結果、そのワークスペースが本来の親または子から孤立してしまった場合、ワークスペース管理ツールの名前変更機能を使用して、これらのワークスペースを正しい関係に戻すことができます。
たとえば、mv コマンドを使用してワークスペースの名前を A から B に変更してしまった場合には、次の手順で元の関係に直します。
ワークスペース管理ツールの名前変更コマンドを使用して、名前を B から C に変更する。
ワークスペース管理ツールは、このワークスペースの新しい名前 (C) を親および子ワークスペースで更新します。このとき、時間を節約するために同じデバイス上のパス名を使用してください。
名前変更コマンドを使用して名前を C から B に戻す。
これで、すべてが元の関係に戻ります。
第 2 章「ワークスペース管理の概要」で説明したように、親子関係はワークスペース階層を結合する縦糸のようなものです。ワークスペース管理ツールを使用して、ユーザーが自由にこの関係を変更することができます。
この節では、ワークスペースの親を明示的に変更する方法について説明します。親の変更は、更新ブリングオーバーまたはプットバックトランザクションの実行時に、新しい親のパス名を指定することによって暗黙に行うことも可能です。詳細は、第 7 章「ワークスペース間でのファイルのコピー」の更新ブリングオーバーおよびプットバックトランザクションの説明を参照してください。
ワークスペースの親を変更する方法について説明します。
ワークスペースの親をワークスペースアイコンの操作で変更できます。ワークスペース表示区画でワークスペースアイコンを選択し、Shift キーを押したまま新しい親ワークスペースのアイコン上にドラッグします。表示に新しい関係が反映されます。
変更を確認するメッセージが表示されます。
ワークスペースの親は、ワークスペース表示区画でアイコンを選択して「編集」⇒「親の変更」を選択することによって、変更することもできます。このコマンドを実行すると、「親の変更」ダイアログが開きます。
このダイアログの「親ワークスペースディレクトリ」フィールドに新しい親ディレクトリの名前を入力して、「了解」ボタンをクリックします。ワークスペース表示区画に新しい関係が反映されます。
「親ワークスペースディレクトリ」フィールドに親ワークスペースの名前を指定しなかった場合、そのワークスペースは孤児、つまり親のないワークスペースになります。この場合も、ワークスペース表示区画には新しい状態が反映されます。
ワークスペースの親を一時的または永久的に変更する必要があるのは、次のような場合です。
新しいプロジェクト階層 (新しい最上位レベルのワークスペース) を作成するため
開発製品のリリース 1 が完成し、リリース 2 の開発準備を行わなければならない場合を考えてみましょう。この場合、次の作業が必要になります。
「ファイル」⇒「ワークスペース作成」を使用して、リリース 2 用の新しい (空の) ワークスペースを作成する。
「親子関係の変更方法」で説明した 2 つの方法のいずれかで、リリース 2 用のワークスペースをリリース 1 用のワークスペースの新しい親にする。
プットバックトランザクションを使用して、リリース 2 用のワークスペースにファイルをコピーする。
リリース 1 用のワークスペースの親を元の親に変更する。
新規リリースに機能を移動するため
特定のリリース向けに開発している機能が予定のスケジュールで完成しなかった場合など、その機能の開発に使用されているワークスペースの親を次のリリースの統合ワークスペースに変更することができます。「親子関係の変更例」で、これと同様の理由から親子関係を変更する方法を示します。
複数のリリースに対してバグ修正を適用するため
バグ修正作業が行われた場合、バグ修正を行なったワークスペースの親を階層間で次々に変更しながら、関連するすべてのワークスペースにバグ修正を適用する必要があります。親を変更するたびに、変更内容を新しい親に適用するため、ワークスペース管理ツールのプットバックトランザクションを実行します。「親子関係の変更例」で、これと同様の理由から親子関係を変更する方法を示します。
ワークスペース階層を再構成するため
階層に新しいレベルを追加する。
階層からレベルを削除する (親子関係の変更操作時に新しい親を指定しない)。
プロジェクト階層内でワークスペースのブランチを再構成する。
Codemgr_wsdata/parent ファイルが削除されて親を失ったワークスペースを正常な状態に戻すため
何らかの理由でファイルが孤児になることがあります (たとえば、親が壊れた場合や、その Codemgr_wsdata/parent ファイルが削除された場合)。このような場合には、親子関係の変更機能を使用して、そのワークスペースの親子関係を修復できます。
ソフトウェアの開発作業では、製品のあるバージョンでバグが修正され、修正済みコードを配布するためのパッチリリースが作成されることがよくあります。バグが修正されたコードは通常、製品の次回リリースにも組み込んでおかなければなりません。ワークスペース管理ツールを使用して製品の開発を行なっている場合には、親子関係の変更機能を使用して比較的容易にパッチを組み込むことができます。
次の例は、ある製品のリリース 1.0 のバグを修正するパッチが作成され、すでに開発が開始されているリリース 2.0 にこのパッチを組み込む場合を想定しています。
作成ブリングオーバートランザクションを使用して、パッチが作成されたワークスペースのコピーを作成します (図 6-1)。これは、新しい親とのやりとりによって、そのワークスペースの内容が変更されるからです (ブリングオーバートランザクションにより、そのワークスペースと新しい親との間の同期がとられます)。
前述の親子関係変更方法を使用して、該当ワークスペースのコピーの親を 1.0patch から 2.0 に変更します (図 6-1 を参照)。
ワークスペースはこの後、新しい親から更新され、以後の作業には 2.0 からブリングオーバーしてきたコピーを使用します (図 6-2 の A を参照)。
パッチに対して行われた修正を、2.0 からブリングオーバーしてきたファイルを持つ patch 内でマージした後、2.0 ワークスペースにプットバックします。これで、これらの修正を子ワークスペース 2.0child から利用することができます (図 6-2 の B を参照)。
ファイルを 2.0child にコピーした後、「編集」⇒「削除」⇒「ソースと Codemgr_wsdata ディレクトリ」を選択して patch を削除します (図 6-3 を参照)。
ワークスペース管理ツールでは、ワークスペースにアクセスするユーザーを制限できます。表 6-2 に、ユーザーが制御できるアクセスの種類 (9 種類) をまとめます。
表 6-2 アクセス制御が可能な操作
アクセスの種類 |
説明 |
---|---|
bringover-from |
ワークスペースからファイルをブリングオーバーできるユーザーを制限する。 |
bringover-to |
ワークスペースにファイルをブリングオーバーできるユーザーを制限する。 |
putback-from |
ワークスペースからファイルをプットバックできるユーザーを制限する。 |
putback-to |
ワークスペースにファイルをプットバックできるユーザーを制限する。 |
undo |
ワークスペースで実行されたコマンドを取り消すことができるユーザーを制限する。 |
workspace-delete |
ワークスペースを削除できるユーザーを制限する。 |
workspace-move |
ワークスペースを移動できるユーザーを制限する。 |
workspace-reparent |
ワークスペースの親を変更できるユーザーを制限する。 |
workspace-reparent-to |
ワークスペースをほかのワークスペースの親に変更できるユーザーを制限する。 |
これらの操作を行おうとすると、ワークスペース管理ツールは要求された操作を実行する前に、Codemgr_wsdata サブディレクトリ内のファイル access_control を調べて、そのユーザーに適切な権限があるかどうかをチェックします。access_control ファイルは、表 6-2 の 9 種類の操作と、その操作を行う権限を持つユーザーを表わす値からなるリストを収めたテキストファイルです。このファイルは、ワークスペースの作成時に自動的に作成され、ファイルの所有者はワークスペースの作成者になります。
アクセス権の表示や変更を行うときには、「オプション」⇒「ワークスペース」を選択し、「カテゴリ」リストボックスから「アクセス制御」を選択します (「アクセス制御の設定値の表示と変更」を参照)。
表 6-3 に、ワークスペース作成時の access_control のデフォルト設定を示します。
表 6-3 デフォルトのアクセス制御の権限
操作 |
権限所有者 |
---|---|
bringover-from |
|
bringover-to |
作成者 |
putback-from |
|
putback-to |
|
undo |
|
workspace-delete |
作成者 |
workspace-move |
作成者 |
workspace-reparent |
作成者 |
workspace-reparent-to |
|
権限を所有する作成者は、作成者のログイン名で示されます。
ユーザーがワークスペースに対するアクセス権を持つかどうかを表わす方法はいろいろあります。表 6-4 に、ワークスペースへのアクセスを制御するときに指定できる値と、その意味を説明します。
表 6-4 ワークスペースのアクセス制御値
値 |
意味 |
---|---|
@engineering |
ネットグループ engineering の全ユーザーに、この操作の実行権を与える |
-@engineering |
ネットグループ engineering のユーザーにはこの操作の実行権を与えない。"-" は否定の意味を表わす |
@special -user2 @engineering |
ネットグループ special および engineering の全ユーザーに、この操作の実行権を与える。ただし、user2 にはこの権限を与えない (user2 が special ネットグループに属していない場合)。"-" は否定の意味を表わす |
user1 user2 |
ユーザー user1 と user2 に、この操作の実行権を与える |
"-" |
この操作の実行権をどのユーザーにも与えない |
作成者 |
該当ワークスペースを作成したユーザーのみに、この操作の実行権を与える。実際には、その作成者のログイン名が示される |
(エントリなし) |
この操作をすべてのユーザーが実行できるようにする |
あるユーザーがアクセス権とアクセス制限の両方を持つように指定されている場合には、最初にリストされている指定が有効になります。
ネットグループがアクセス制御ファイルに含まれている場合には、該当する操作の処理性能が低下することがあります。これは、グループのメンバーをチェックするために要する時間 (数秒) が、操作の実行に要する時間に加算されるためです。
「ワークスペース属性」ダイアログでは、アクセス制御の設定を表示したり変更したりすることができます。
ワークスペースのアクセス制御の設定を表示するには:
ワークスペースのアクセス制御の設定を変更するには:
ワークスペース表示区画でワークスペースアイコンを選択する。
「オプション」⇒「ワークスペース」を選択する。
「カテゴリ」リストボックスから「アクセス制御」を選択する。
アクセス制御リストから 1 行を選択して「編集」ボタンをクリックし、「アクセス制御属性」ダイアログを開く。
「編集」ボタンをクリックする前に選択した操作が、「操作」リストボックス内で自動的に選択されます。
「アクセス制御属性」ダイアログの「操作」リストボックスで操作の種類を選択することもできます。
パーミッションのオプションを次のラジオボタンで選択する。
「なし」−どのユーザーにもパーミッションを与えない。
「全部」−すべてのユーザーにパーミッションを与える。
「指定」−下のパーミッションリストを使用して、パーミッションを与える (または与えない) ユーザーおよびネットグループのリストを作成する。
パーミッションを個別またはグループ単位に与える場合には、次の項目を指定してエントリを作成する。
ユーザーまたはネットグループの名前を入力する「名前」フィールド
エントリをユーザーとするかネットグループとするかを指定する「種類」のラジオボタン
指定ユーザー/ネットグループにパーミッションを与えるか与えないかを指定する「アクセス」のラジオボタン
「前に挿入」ボタンまたは「後ろに挿入」ボタンをクリックして、エントリをパーミッションリストに挿入する。
「了解」ボタンをクリックして、変更内容を適用する。
「ワークスペース属性」ダイアログで「了解」ボタンをクリックすると変更内容が access_control ファイルに書き込まれます。
ワークスペース管理ツールを使用して開発作業を進めていると、さまざまなイベントがワークスペースで発生します。こうしたイベントの発生を、ワークスペース管理ツールから電子メールでユーザーに通知するように設定できます。通知の設定内容は、Codemgr_wsdata ディレクトリ内の notification というファイルに登録しておきます。
通知の設定内容には、次の項目があります。
メールの送信先アドレス
通知するイベント
ファイルおよびディレクトリのリスト (省略可能)。これらのファイルまたはディレクトリに変更が発生すると、通知が行われます。このリストは BEGIN 文で始まり、END 文で終わります。
次に、3 つの通知要求を含む notification ファイルの例を示します。
chip@mach1 bringover-to BEGIN dir1/foo.cc dir2 END biff@mach2 bringover-to putback-to BEGIN . END biff@mach2 workspace-move
最初のエントリは、ユーザー chip@mach1 への通知を指定するもので、ファイル dir1/foo.cc およびディレクトリ dir2 内の任意のファイル (パス名は該当ワークスペースの最上位ディレクトリからの相対パス名) がワークスペースにブリングオーバーされたときに通知が行われます。
各イベントに対応するファイルおよびディレクトリのエントリは BEGIN 文と END 文で囲みます。空のリスト、抜けのあるリスト、ピリオド "." だけしか含まないリストは、該当ワークスペース内のファイルとディレクトリすべてが通知の対象となることを示します。
2 番目のエントリは、ユーザー biff@mach2 への通知を指定するもので、該当ワークスペース内の任意のファイルがブリングオーバーまたはプットバックされたときに通知が行われます。ここで、ピリオド "." はワークスペース内のすべてのファイルを表しています。
3 番目のエントリは、ユーザー biff@mach2 への通知を指定するもので、該当ワークスペースが移動されたときに通知が行われます。なお、ワークスペース全体に関係するイベント (削除、移動、親の変更) の通知については、ディレクトリやファイルのリストを指定することはできません。
表 6-5 は、通知イベントの名前とその内容の一覧です。
表 6-5 通知イベント
イベント名 |
説明 |
---|---|
bringover-from |
通知ファイルが存在するワークスペースからファイルがブリングオーバーされたときにメールが送信されます。 |
bringover-to |
通知ファイルが存在するワークスペースにファイルがブリングオーバーされたときにメールが送信されます。 |
putback-from |
通知ファイルが存在するワークスペースからファイルがプットバックされたときにメールが送信されます。 |
putback-to |
通知ファイルが存在するワークスペースにファイルがプットバックされたときにメールが送信されます。 |
undo |
通知ファイルが存在するワークスペースでトランザクションの実行結果が取り消されたときにメールが送信されます。 |
workspace-delete |
通知ファイルが存在するワークスペースが削除されたときにメールが送信されます。 |
workspace-move |
通知ファイルが存在するワークスペースが移動されたときにメールが送信されます。 |
workspace-reparent |
通知ファイルが存在するワークスペースの親が変更されたときにメールが送信されます。 |
workspace-reparent-to |
該当ワークスペースが別の既存ワークスペースの新しい親になったときにメールが送信されます。 |
通知エントリを表示および変更するには、ワークスペース表示区画でワークスペースアイコンを選択し、「オプション」⇒「ワークスペース」を選択します。次に「カテゴリ」リストボックスから「通知」を選択します。notification ファイルに指定された内容が、「ワークスペース属性」ダイアログにも表示されます。
通知エントリの変更、作成、削除には、「エントリ作成」ボタンまたは「エントリ編集」ボタンを使用します。これらのボタンをクリックすると、「通知入力」ダイアログが開きます。
新しい通知エントリを作成するには:
何も選択しない状態で「エントリ作成」をクリックする。
「通知入力」ダイアログが開くので、このダイアログで各項目を次のように指定する。
ファイルまたはディレクトリを指定することを選択した場合は、「ファイル」テキスト区画にディレクトリおよびファイルのリストを作成する。
リストにファイルを追加するには、「リストに追加」ボタンをクリックして「通知ファイル追加」ダイアログでファイルを選択します。
リストからファイルを削除するには、「削除」ボタンまたは「すべてを削除」ボタンをクリックします。
「了解」ボタンをクリックすると、新しいエントリが通知のリストに追加される。
「ワークスペース属性」ダイアログで「了解」ボタンをクリックすると、変更内容が notification ファイルに適用される。
既存の通知エントリを変更するには:
「ワークスペース属性」ダイアログの通知のリストで変更するエントリを選択し、「エントリ編集」ボタンをクリックする。
「通知入力」ダイアログでエントリに変更を加える。
「了解」ボタンをクリックすると、通知のリスト内の当該エントリが変更される。
「ワークスペース属性」ダイアログで「了解」ボタンをクリックすると、変更内容が notification ファイルに適用される。
次のイベントはワークスペース全体に関わるため、ディレクトリやファイルを指定する必要はありません。
workspace-delete
workspace-move
workspace-reparent
workspace-reparent-to
リストにディレクトリを指定した場合、その下に存在するすべてのファイルが自動的に登録されます。
ワークスペース管理コマンドが実行されると、Codemgr_wsdata/history というファイルに記録が書き込まれます。あるワークスペースだけに適用されるコマンドは、そのワークスペースにのみ記録され、ワークスペース間でのトランザクションはソースと宛先の両方のワークスペースに記録されます。
コマンドはソースと宛先の両ワークスペースに記録されますが、変更されたファイルのリストは宛先ディレクトリのみに記録されます。
この履歴ファイルの内容を参照して、ある期間にわたってワークスペースにどのような変更がされてきたかを追跡できます。履歴ファイル中のエントリは、コマンド行に入力された内容で構成され、GUI のメニュー項目名には対応していません。コマンドの意味や構文については、マニュアルページで確認できます。表 6-6 は、GUI での操作と、履歴ファイルに記録される CLI コマンドとの対応表です。
表 6-6 GUI メニュー項目と CLI コマンドの対応
GUI メニュー項目 |
対応する CLI コマンド |
---|---|
ワークスペース作成 |
workspace create |
名前変更 |
workspace move |
親の変更 |
workspace parent |
作成ブリングオーバー |
bringover |
更新ブリングオーバー |
bringover |
プットバック |
putback |
取消し |
ws_undo |
衝突解決 |
resolve |
開発作業が活発に行われているワークスペースでは、Codemgr_wsdata/history ファイルが短期間で非常に大きくなってしまいます。このような場合は、定期的に不要なファイルの内容を削除して、サイズを小さくしてください。
次に挙げる履歴ファイルの一部は、更新ブリングオーバートランザクションが実行された場合の例です。各エントリ項目の意味については、表 6-7 で説明しています。なお、このエントリは子ワークスペースの履歴ファイルから取り出したもので、親ワークスペース内の対応するエントリは、ファイルのステータスメッセージが含まれていない点を除けば同じです。
COMMAND bringover -w /home/sponge3/larryh/ws/man_pages -p /home/sponge3/larryh/ws/manpages man trans/man update: man/Makefile update: man/man5/access_control.5 create: man/man5/notification.5 create: man/man1/codemgr.1 rename from: man/man1/def.dir.flg.1 to: man/man1/def.dir.flp.1 update: man/man1/def.dir.flp.1 create: man/man1/codemgrtool.1 rename from: man/man1/fileresolve.1 to: deleted_files/man/man1/fileresolve.1 update children's name history: deleted_files/man/man1/fileresolve.1 rename from: man/man1/resolve_tty.1 to: deleted_files/man/man1/resolve_tty.1 update: deleted_files/man/man1/resolve_tty.1 create: trans/man/man1/codemgr_acquire.1 create: trans/man/man1/codemgr_prepare.1 CWD /tmp_mnt/home/sponge3/larryh/temp RELEASE Beta 1.0 HOST croak USER larryh PARENT_WORKSPACE (/home/sponge3/larryh/ws/manpages) (sponge:/export/home/sponge3/larryh/ws/manpages) CHILD_WORKSPACE (/home/sponge3/larryh/ws/man_pages) (sponge:/export/home/sponge3/larryh/ws/man_pages) START (Mon Jul 13 13:31:16 1992 PDT) (Mon Jul 13 20:31:16 1992 GMT) END (Mon Jul 13 13:32:08 1992 PDT) (Mon Jul 13 20:32:08 1992 GMT) STATUS 0
エントリ |
説明 |
---|---|
COMMAND |
実行されたコマンド。「トランザクション出力」ウィンドウに表示されるファイルステータスメッセージは、宛先ワークスペースの履歴ファイルにのみ記録される。 |
CWD |
コマンドが実行された現在の作業ディレクトリの名前。 |
RELEASE |
TeamWare ソフトウェアのリリース番号。 |
HOST |
コマンドが実行されたシステムのホスト名。 |
USER |
コマンドを実行したユーザーのログイン名。 |
PARENT_WORKSPACE |
親ワークスペースのパス名。2 種類の形式 (ホスト固有のパス名と、マシン:パス名)で表示される。 |
CHILD_WORKSPACE |
子ワークスペースのパス名。2 種類の形式 (ホスト固有のパス名と、マシン:パス名) で表示される。 |
START |
コマンドの実行開始時刻。現地時間とグリニッジ標準時 (GMT) の両形式。 |
END |
コマンドの実行終了時刻。現地時間とグリニッジ標準時 (GMT) の両形式。 |
STATUS |
コマンドの終了ステータス。0 は正常終了、その他の値はエラー条件、警告、またはその他のステータスを表わす。 |
整合性を保つために、ワークスペース管理ツールのトランザクション (ブリングオーバー、取り消し、プットバック) は、対象ワークスペースをその処理が完了するまでロックします。これらのロックは、ワークスペース管理ツールのトランザクションのみに適用され、SCCS プログラムなどその他のコマンドには影響しません。ロックは、各ワークスペースの Codemgr_wsdata/locks ファイルに記録されます。ワークスペース管理ツールのトランザクションコマンドはワークスペースに対して処理を開始する前に、このファイルを参照してロックの有無を確認します。ロックには、次の 2 種類があります。
読み取りロック − あるコマンドでワークスペースの内容をチェックしているときに、そのワークスペースが変更されないようにするために使用されます。
読み取りロックは、複数のコマンドが同時に獲得することができます。読み取りロックが存在するワークスペースには、ほかのワークスペース管理コマンドで書き込みを行うことはできません。ブリングオーバートランザクションでは、親ワークスペース内のファイルを子にコピーするための準備としてそれらのファイルのチェックが行われますが、その際に読み取りロックがかけられます。また、プットバックトランザクションでは、子ワークスペースのファイルを親にコピーするための準備としてそれらのファイルのチェックが行われ、その際に読み取りロックがかけられます。
書き込みロック − あるコマンドでワークスペースに書き込みを行うときに、そのワークスペースが変更されないようにするために使用されます。
1 つのワークスペースに対しては、同時に 1 つの書き込みロックしか獲得できません。書き込みロックが存在すると、そのワークスペースに書き込みを行うことができるのはそのロックを所有するワークスペース管理コマンドだけです。また、ほかのコマンドはこのワークスペースからの読み取りロックを得ることはできません。ブリングオーバートランザクションでは、子ワークスペースに親ワークスペースからファイルをコピーする際に、子に対して書き込みロックがかけられます。同様に、プットバックトランザクションでは、親ワークスペースに子ワークスペースからファイルを戻すときに、親に対して書き込みロックがかけられます。
ワークスペース管理コマンドの実行後にロックが解除されなかった場合 (たとえば、システムクラッシュなどで)、このロックは手作業で削除してください。ロックが解除されないとほかのコマンドでそのワークスペースに対する読み取りや書き込みを行うことはできません。ワークスペース管理ツールの GUI を使用すれば、ワークスペースにその時点でかけられているロックを表示したり削除したりすることができます。また、ロックファイルを直接編集することも可能です。
ワークスペース管理ツールの GUI を使用してロックの表示や削除を行うには、ワークスペース表示区画からワークスペースアイコンを選択し、「オプション」メニューから「ワークスペース」を選択します。次に、「カテゴリ」リストボックスから「ロック」を選択します。
ロックの削除は、該当ロックが記述されている行を選択して「削除」ボタンをクリックします。最後に、「了解」ボタンを押します。
ワークスペース管理ツールは、処理を実行する際に環境変数を参照します。ワークスペース管理ツールで使用する環境変数には、CODEMGR_WS と CODEMGR_WSPATH があります。
ワークスペース管理コマンドの実行対象としてワークスペースを明示的に指定しなかった場合、多くのコマンドはシェル環境変数 CODEMGR_WS を参照して、処理対象としてのデフォルトのワークスペースを判別します。自分の作業の大部分をある特定のワークスペースで行うのであれば、この変数をあらかじめ設定しておくことで、コマンド実行のたびにワークスペースを指定するという手間を省くことができます。
ワークスペース管理ツールは起動の際に、CODEMGR_WSPATH 変数に指定されているディレクトリパス名から自動的にワークスペースを読み込みます。CODEMGR_WSPATH は、ワークスペースディレクトリを含む 1 つ以上のディレクトリに対して設定できます。たとえば、/export/home/ws および ‾/projects/ws の 2 つのディレクトリに対してこの変数を設定するには、次のようなコマンドを使用します。
% setenv CODEMGR_WSPATH“/export/home/ws ‾/projects/ws”
CODEMGR_WS 環境変数は CODEMGR_WSPATH 環境変数に上書きされます。つまり、ワークスペース管理ツールで実行するコマンドでは、CODEMGR_WS 環境変数に定義されたデフォルトのワークスペースが使用されます。