第 2 章「ワークスペース管理の概要」では、ワークスペースの親子間でファイルをコピーする際の概念について説明しました。この章では、ワークスペース管理ツールを使って実際にファイルをコピーする方法について詳しく説明します。
この章は、以下の節で構成されています。
なお、この章で説明するすべてのトランザクションは、ワークスペース管理ツールの「トランザクション」ウィンドウで実行するものとします。これらのトランザクションの具体例は、第 10 章「ワークスペース管理ツールの利用法」で説明しています。
ワークスペース管理ツールは、ワークスペース間でのあらゆるトランザクション (作成ブリングオーバー、更新ブリングオーバー、プットバック、取り消し、衝突解決) が同じ形態で実行できるようになっています (図 7-1)。これらのトランザクションの相違点については、後で説明します。衝突解決トランザクションについては、第 8 章「衝突の解決」で説明します。
この節では、ワークスペース間でファイルをコピーする際に考慮しておくべき一般的な事柄について説明します。
ワークスペース管理ツールにおけるファイル転送トランザクション (ブリングオーバー、プットバック) では、実際にはソースファイルが SCCS のデルタから取り出されて、SCCS のデルタ ID (SID) によって識別されています。ファイルをプットバックまたはブリングオーバーのトランザクションによってコピーする場合、ワークスペース管理ツールは実際にはそのファイルの SCCS 履歴ファイルを処理 (コピーあるいはマージ) しています。
ワークスペース管理ツールが履歴ファイルを操作およびマージする方法については、 第 9 章「SCCS ファイルのマージ」で詳しく説明しています。特殊な手法に関しては、sccsfile(4) のマニュアルページを参照してください。
ワークスペース管理ツールのトランザクションコマンドからの出力は、「トランザクション出力」ウィンドウに表示されます。このウィンドウは、ユーザーがトランザクションを実行すると自動的に開きます。トランザクションウィンドウで「出力を表示」ボタンをクリックして、このウィンドウを開くこともできます。TeamWare ウィンドウに関する詳細は、オンラインヘルプで確認してください。
ワークスペース管理ツールのトランザクションは、コマンド行ベースのプログラムによって実装されています。出力の中には、トランザクションがコマンド行でどのように実行されたかを示すメッセージが含まれます。このマニュアルでは、実際のトランザクションに適用されるメッセージについてのみ説明します。各コマンドについての詳しい説明は、それぞれのマニュアルページを参照してください。
ブリングオーバーやプットバックのトランザクションを使用して親子ワークスペース間でファイルをコピーするときには、そのトランザクションの処理対象とするディレクトリとファイルを指定する必要があります。作成ブリングオーバー、更新ブリングオーバー、およびプットバックの各トランザクションウィンドウには、ディレクトリとファイルのリスト区画があります。この区画は、トランザクションに含めるファイル名とディレクトリ名が示されているリストです。ワークスペース内のすべてのファイルをブリングオーバーまたはプットバックするには、デフォルトの "." を使用することができます。
ユーザーは、トランザクションの対象ファイルを明示的に指定したり、それらのファイルのリストを作成するプログラムを実行することもできます。このようなプログラムをファイルリストプログラム (FLP) と呼んでいます。FLP はファイルのリストを生成し、標準出力 stdout に出力します。ブリングオーバーやプットバックトランザクションでは stdout に出力されたファイルリストからファイルを読み取って処理します。
ワークスペース管理ツールには、def.dir.flp がデフォルトの FLP として含まれています。def.dir.flp は、ファイルリスト区画 (「ファイルリスト区画でのディレクトリおよびファイルのリストの作成」を参照) でユーザーが指定したディレクトリ以下の SCCS の制御下にあるファイルの名前を再帰的にリストします。FLP によってリストされたファイルは、ファイルリスト区画にユーザーが指定したファイルと共に、トランザクションの対象となります。
トランザクション実行時にユーザー自身の FLP を使用する場合には、ファイルリスト区画でそれらのパス名を指定します。
独自の FLP を使用するには:
「親」リストボックスから「ファイルリストプログラム (FLP)」を選択します。
リストに FLP を追加するには「FLPS 追加」ダイアログを使用します。このダイアログは、「追加」ボタンをクリックすると開きます。
詳細は、「ファイルの追加」を参照してください。
ユーザーのプロジェクト用に、ファイルリストを生成する独自の FLP を作成できます。
ワークスペース管理ツールによって、最初はディレクトリおよびファイルがすべてリスト区画にリストされます。ユーザーはそのリストを自由に変更できます。初期リストの内容は、トランザクションによって異なります。
作成ブリングオーバー |
初期リストには何も含まれていません。 |
更新ブリングオーバー |
子ワークスペースの Codemgr_wsdata/args ファイルに含まれているファイルおよびディレクトリです。このファイルには、以前のブリングオーバーおよびプットバックトランザクションの実行時に指定されていた引数のリストが含まれています。 |
プットバック |
子ワークスペースの Codemgr_wsdata/args ファイルに含まれているファイルおよびディレクトリです。このファイルには、以前のブリングオーバーおよびプットバックトランザクション実行時に指定されていた引数のリストが含まれています。 |
どのワークスペースにも、ワークスペース管理ツールのブリングオーバーおよびプットバックトランザクションコマンドによって管理される Codemgr_wsdata/args ファイルが存在します。この args ファイルには、ファイル、ディレクトリ、FLP 引数のリストが含まれています。最初は、args ファイルにはワークスペース作成時に指定されていた引数が入っています。以後、ブリングオーバーあるいはプットバックトランザクションを実行するときに明示的に引数を指定すると、ワークスペース管理ツールは args ファイルにすでに含まれている引数よりも新しい引数の方が有効かどうかを判断します。新しい引数の方がより広い範囲を持っていれば、古い引数は新しい引数と置き換えられます。
args ファイルはいつでも編集して、その内容を変更できます。
ファイルリスト区画では、リストされているファイルおよびディレクトリについて、特定のトランザクションの対象に加えるものと加えないものを指定できます。トランザクションの対象に加えるには、そのファイルまたはディレクトリの名前を選択します。名前は、クリック操作により、いくつでも選択したり選択を解除したりすることができます。「すべてを選択」ボタンをクリックするとリスト全体が選択され、「すべてを選択解除」ボタンをクリックすると、リスト全体の選択が解除されます。
「args ファイルからの読み込み」ボタンをクリックすると、ワークスペースの args ファイルからデフォルトのディレクトリとファイルのリストを再度読み込むことができます。つまり、「args ファイルからの読み込み」をクリックすれば、変更したリストをデフォルトの状態に戻すことができます。
デフォルトのリストに変更を加え、これをワークスペースの args ファイルにデフォルトとして保存しておきたい場合には、「args ファイルへ保存」ボタンをクリックします。これは、不要なファイルやディレクトリをリストから取り除いた場合に便利です。ファイルを追加した場合は、ブリングオーバーまたはプットバックトランザクションの一環として自動的にそれらのファイルが args ファイルに追加されます。
ファイルリスト区画にファイルやディレクトリを追加するには、「ファイル追加」ダイアログを使用します。詳細は、「ファイルの追加」を参照してください。
ファイルリスト区画からファイルやディレクトリを削除するには、「削除」ボタンをクリックします。
ファイルリストに "." ディレクトリのみを指定すると、ワークスペース全体がトランザクション対象になります。"." の入力には、「ファイル追加」ダイアログの「名前」フィールドを使用します。
「トランザクション」ウィンドウのファイルリスト区画にディレクトリやファイルを追加するには、「ファイル追加」ダイアログを使用します 。「ファイル追加」ダイアログは、「追加」ボタンをクリックすると開きます。
このダイアログでは、ディレクトリアイコンをダブルクリックすることによって、ファイルシステム階層を下に移動できます。また、".." のアイコンをダブルクリックすると、ファイルシステム階層を上に移動できます。さらに、あるディレクトリに直接移動するには、「名前」フィールドにそのパス名を入力し、「ディレクトリの読み込み」ボタンをクリックします。
このダイアログでは、ワークスペースのファイルシステム以外への移動はできません。
ファイルリスト区画にファイルまたはディレクトリを追加するには:
任意のファイルまたはディレクトリのアイコンをクリックして選択する。
複数のファイルやディレクトリを選択したい場合、2 つ目のアイコンから Shift キーを押しながらクリックするか、ダイアログ内の空いている場所でマウスの左ボタンを押しながら、表示される長方形の枠内に目的のアイコンが収まるようにドラッグします。マウスの左ボタンを放すと、この枠内に囲まれたファイルがすべて選択されます。
ファイルのパス名を「名前」フィールドに指定して、リストに追加するファイルを指定することもできます。パス名の入力後 Return キーを押すと、そのエントリがリスト区画に追加されます。
「ファイル追加」ボタンをクリックして、ファイルリスト区画にファイルを追加する。
ファイルのアイコンにチェックマークが付いている場合、そのファイルは SCCS からチェックアウトされていることを示します。
ワークスペース管理ツールのトランザクションは、すべて子ワークスペースの側からの視点で実行されます。ブリングオーバートランザクションは、親から子にファイルの「引き渡し」を行います。ブリングオーバートランザクションには次の 2 種類があります。
作成ブリングオーバー |
親ワークスペースからまだ存在しない子ワークスペースにファイルをコピーします。子はこのトランザクションの一環として作成されます。 |
更新ブリングオーバー |
既存のワークスペースにファイルをコピーします。子ワークスペースの内容は、このトランザクションの一環として更新されます。 |
作成および更新ブリングオーバートランザクションでは、ワークスペース管理ツールのワークスペース以外のディレクトリから、ファイルやディレクトリを取り込むことができます。ただし、ワークスペースではないディレクトリにファイルをプットバックすることはできません。
作成ブリングオーバートランザクションは、親ワークスペースからまだ存在していない子ワークスペースにファイルをコピーするときに使用します。作成ブリングオーバートランザクションの一環として、新しい子ワークスペースが作成されます。作成ブリングオーバーのトランザクションウィンドウを表示するには、次のいずれかの方法を使用します。
ワークスペース表示区画の空いている場所にワークスペースアイコンをドラッグ&ドロップします。
ワークスペースアイコンを選択し、「トランザクション」⇒「作成ブリングオーバー」を選択します。
ワークスペースアイコンを選択し、ワークスペース表示区画のポップアップメニューで「ブリングオーバー」⇒「作成」を選択します。
トランザクションダイアログがすでに開いている場合には、「カテゴリ」リストボックスから「作成ブリングオーバー」を選択します。
作成ブリングオーバートランザクションは、SCCS で管理されているファイルに対して動作します。子ワークスペースにファイルがコピーされるということは、実際には、SCCS 履歴ファイルがコピーされ、対応する g-ファイル (最新のデルタ) が SCCS get コマンドによって作成されるということを意味します。
作成ブリングオーバートランザクションを実行するには:
親ワークスペースを指定する。
ワークスペース表示区画でワークスペースアイコンを選択してから、作成ブリングオーバーのトランザクションダイアログを表示すると、「親ワークスペースディレクトリ」フィールドにそのパス名が自動的に挿入されます。このフィールドの内容はユーザーが変更できます。また、アクセス可能であれば任意のワークスペースの絶対パス名を指定できます。指定するワークスペース名は、ワークスペース表示区画に表示されている必要はありません。
ワークスペース以外のディレクトリのパス名を指定して、ディレクトリやファイルを新しいワークスペースに取り込むこともできます。
子ワークスペースを指定する。
手順 1 で指定した親ワークスペースからファイルをコピーする先の子ワークスペースの絶対パス名を「子ワークスペースディレクトリ」フィールドに入力します。
親ワークスペースおよび子ワークスペースはファイルシステムを使用してアクセスできる必要があります。これらのアクセスには、オートマウンタまたは NFS マウントのいずれかを使用します。 ワークスペースへの (ユーザーの) アクセス可能性は、各ワークスペースの Codemgr_wsdata/access_control ファイルによって制御されます。“ワークスペースへのブリングオーバー”および“ワークスペースからのブリングオーバー”のアクセス設定が適切であることを確認してください。詳細は、「ワークスペースへのアクセス制御」を参照してください。
ファイルリスト区画でディレクトリとファイル名のリストを作成する。
親ワークスペースの内容は、すべてを子にコピーすることも、その一部のみをコピーすることもできます。ファイルリスト区画でコピーしたいディレクトリとファイルを指定してください。ディレクトリとファイルを指定する方法については、「トランザクションの対象となるディレクトリとファイルの指定」を参照してください。
独自の FLP を使用してファイルリストを作成する場合は、FLP もファイルリスト区画で指定してください。
ディレクトリ名およびファイル名として指定した相対パス名は、ワークスペース階層の最上位 (ルート) ディレクトリ (親ワークスペースと子ワークスペースで同じと仮定) に対する相対パスとして解釈されることに注意してください。絶対パス名で指定したファイル名は、親ワークスペースと子ワークスペースのいずれかにあるファイルを指し、該当するファイルが存在しない場合、そのファイル名は無視されます。
オプションチェックボックスを選択する。
「プレビュー」チェックボックスを選択すると、トランザクションの実行結果のプレビューを表示できます。このオプションを選択した状態で作成ブリングオーバートランザクションを実行すると、ファイルのコピーは行われませんが、「トランザクション出力」ウィンドウに出力メッセージが表示され、実際にコピーが行われた場合の結果を確認できます。
「詳細メッセージ」チェックボックスを選択すると、「トランザクション出力」ウィンドウに、より詳細なメッセージを表示させることができます。デフォルトの設定では、作成および更新されたファイル、および衝突の存在するファイルそれぞれについてメッセージが表示されます。このオプションを選択した状態で作成ブリングオーバートランザクションを実行すると、コピーされなかったファイルを含め、すべてのファイルに関するメッセージが表示されます。なお、このオプションと「メッセージ抑制」オプションを同時に指定した場合には、「メッセージ抑制」オプションが使用されます。
「メッセージ抑制」チェックボックスを選択すると、「トランザクション出力」ウィンドウにステータスメッセージを出力しないようにすることができます。
「SCCS get 抑制」チェックボックスを選択すると、ブリングオーバートランザクションの実行時に SCCS get コマンドが自動的に実行されないようにすることができます。通常は、ブリングオーバーの後にSCCS 履歴から g-ファイルが抽出されます。このオプションを指定するとファイルの転送速度が向上しますが、後でユーザー自身で get を実行しなければなりません。
「バックアップしない」チェックボックスを選択すると、既存のファイルをブリングオーバー先ワークスペースの Codemgr_wsdata/backup/files ディレクトリにコピーする処理を省略できます。このオプションを使用すると、子ワークスペースが使用するディスク領域が減りパフォーマンスが速くなりますが、処理を取り消して元に戻すことはできなくなります。
「強制衝突」オプションは、作成ブリングオーバートランザクションには適用されません。
「ブリングオーバー」ボタンをクリックして、トランザクションを実行する。
取り消しトランザクションを使用すると、作成ブリングオーバートランザクション中に実行された処理を元に戻すことができます。詳細は、「ブリングオーバーまたはプットバックの取り消し」を参照してください。
ワークスペース管理ツールは、作成ブリングオーバートランザクションの実行時に親ワークスペースで SCCS からチェックアウトされたファイルを検出すると、それらのファイルの整合性や変更内容を維持するために、表 7-1 のような処置を行います。
表 7-1 作成ブリングオーバーにおけるチェックアウトファイルの状態と処置
親ワークスペース内のチェックアウトファイル |
ワークスペース管理ツールの処置 |
---|---|
g-ファイルと最新デルタが異なる |
警告を出す ファイルを処理 |
g-ファイルと最新デルタが同じ |
ファイルを処理 |
トランザクションの実行が進むにつれて、「トランザクション出力」ウィンドウにステータス情報が表示されます。ファイルの処理に合わせてメッセージが表示され、実行が完了すると、トランザクション全体の要約情報が表示されます。
ワークスペース管理ツールが親ワークスペースのファイルの読み取りおよび検査を行なっているときには、そのワークスペースに対して読み取りロックがかかります。一方、子ワークスペース内のファイルを操作している場合には、書き込みロックがかかります。
複数のワークスペース管理コマンドが同時にワークスペース内のファイルの読み取りを行うと、複数の読み取りロックが発生します。読み取りロックが 1 つでも存在すると、そのワークスペースに対してほかのコマンドを実行して書き込みを行うことはできません。書き込みロックは一度に 1 つしか存在できず、書き込みロックが存在する間、ほかのワークスペース管理コマンドでそのワークスペースに書き込みを行うことはできません。ロックの状態は、各ワークスペース内の Codemgr_wsdata/locks ファイルで管理されています。
ロックされているワークスペースに対してファイルをブリングオーバーしようとすると、そのロックを所有しているユーザーの名前、ユーザーが実行しているコマンド、およびロックが発生した時刻を示すメッセージが表示されます。
親ワークスペース: /user/demohost/ws/man_pages 子ワークスペース: /home/demohost/ws/man_pages_yasue bringover: 書き込みロックが取得できません。ワークスペース "/home/demohost/ws/man_pages_yasue" に以下のロックが存在しています: ユーザ jack は bringover コマンドを実行中です (pid 20291) マシン holiday で 9 分 (エラー 2021)
ブリングオーバートランザクションに関する情報は、Codemgr_wsdata/history ファイルに記録されます。この情報は、ワークスペースにおいてファイルがどのように変更されてきたかを知る上で重要です。このファイルに関する詳細は、「ワークスペースに関するコマンド履歴の表示」を参照してください。
更新ブリングオーバートランザクションは、既存の子ワークスペースの内容を更新するときに使用します。更新ブリングオーバーのトランザクションウィンドウを開くには、次のいずれかの方法を使用します。
子ワークスペースのアイコンの上にワークスペースアイコンをドラッグ&ドロップする。
子ワークスペースアイコンを選択し、「トランザクション」⇒「更新ブリングオーバー」を選択する。
子ワークスペースアイコンを選択し、ワークスペース表示区画のポップアップメニューから「ブリングオーバー」⇒「更新」を選択する。
トランザクションウィンドウがすでに開いている場合には、「カテゴリ」リストボックスから「更新ブリングオーバー」を選択する。
更新ブリングオーバートランザクションでは、SCCS の制御下にあるファイルが転送されます。あるファイルが親ワークスペースには存在するが、子ワークスペースには存在しない場合、その SCCS 履歴ファイルが子にコピーされ、g-ファイル (最新のデルタ) が SCCS get コマンドによって作成されます。また、あるファイルが親と子の両方に存在し、親の側にのみ変更が加えられている場合は、親から子に新しいデルタがコピーされます。親と子でそれぞれファイルに変更が加えられている場合は、子ワークスペース側の新しいデルタが SCCS ブランチに移動されます。
更新ブリングオーバートランザクションを実行するには:
子ワークスペースを指定する。
ワークスペース表示区画でワークスペースアイコンを選択してから更新ブリングオーバーのトランザクションウィンドウを開くと、その名前が「子ワークスペースディレクトリ」フィールドに自動的に挿入されます。このフィールドは、新しいパス名を挿入したり、任意の時点でユーザーが変更したりすることができます。
親ワークスペースを指定する。
手順 1 で指定された子の親ワークスペースの名前が「親ワークスペースディレクトリ」フィールドに自動的に挿入されます。親ワークスペース名は、ワークスペース管理ツールのメタデータファイル Codemgr_wsdata/parent を参照して挿入されます。
ワークスペースではないディレクトリのパス名を指定して、ファイルやディレクトリをワークスペースに取り込むこともできます
「親ワークスペースディレクトリ」フィールドに新しい親のパス名を指定すると、1 回限りの更新ブリングオーバートランザクションで、子ワークスペースの親を変更できます。この場合、親の変更はそのトランザクションについてのみ有効になります。ワークスペースの親を完全に変更したい場合には、「ワークスペース管理」ウィンドウで「編集」⇒「親の変更」を選択するか、該当する子ワークスペースのアイコンを新しい親のアイコン上にドラッグします。ワークスペースの親の変更についての詳細は、「ワークスペースの親子関係の変更」を参照してください。
ワークスペース表示区画でアイコンが選択されていない状態で「トランザクション」⇒「ブリングオーバー」⇒「更新」を選択すると、フィールドに情報の入っていない「トランザクション」ウィンドウが開きます。「子ワークスペースディレクトリ」に子ワークスペースの名前をユーザーが直接入力し、Return キーを押すと、自動的に「親ワークスペースディレクトリ」フィールドが更新されます。
親ワークスペースおよび子ワークスペースはファイルシステムを使用してアクセスできる必要があります。これらのアクセスには、オートマウンタまたは NFS マウントのいずれかを使用します。 ワークスペースへの (ユーザーの) アクセス可能性は、各ワークスペースの Codemgr_wsdata/access_control ファイルによって制御されます。“ワークスペースへのブリングオーバー”および“ワークスペースからのブリングオーバー”のアクセス設定が適切であることを確認してください。詳細は、「ワークスペースへのアクセス制御」を参照してください。
ファイルリスト区画でディレクトリとファイルのリストを作成する。
親ワークスペースの内容は、すべてを子にコピーすることも、その一部のみをコピーすることもできます。ファイルリスト区画に、コピーするディレクトリとファイルを指定します。ディレクトリおよびファイルの指定方法については、「トランザクションの対象となるディレクトリとファイルの指定」を参照してください。
独自の FLP を使用してファイルリストを作成する場合は、FLP もファイルリスト区画で指定してください。
ディレクトリ名およびファイル名として指定した相対パス名は、ワークスペース階層の最上位 (ルート) ディレクトリ (親ワークスペースと子ワークスペースで同じと仮定) に対する相対パスとして解釈されることに注意してください。絶対パス名で指定したファイル名は、親ワークスペースと子ワークスペースのいずれかにあるファイルを指し、該当するファイルが存在しない場合、そのファイル名は無視されます。
オプションを選択する。
「プレビュー」チェックボックスを選択すると、トランザクションの実行結果のプレビューを表示できます。このオプションを選択した状態で更新ブリングオーバートランザクションを実行すると、ファイルのコピーは行われませんが、「トランザクション出力」ウィンドウに出力メッセージが表示され、実際にコピーが行われた場合の結果を確認できます。
「詳細メッセージ」チェックボックスを選択すると、「トランザクション出力」ウィンドウに、より詳細なメッセージを表示させることができます。デフォルトの設定では、作成および更新されたファイル、および衝突の存在するファイルそれぞれについてメッセージが表示されます。このオプションを選択した状態でブリングオーバートランザクションを実行すると、コピーされなかったファイルを含め、すべてのファイルに関するメッセージが表示されます。なお、このオプションと「メッセージ抑制」オプションを同時に指定した場合には、「メッセージ抑制」オプションが使用されます。
「メッセージ抑制」チェックボックスを選択すると、「トランザクション出力」ウィンドウにステータスメッセージを出力しないようにすることができます。
「SCCS get 抑制」チェックボックスを選択すると、ブリングオーバートランザクションの実行時に SCCS get コマンドが自動的に実行されないようにすることができます。通常は、ブリングオーバーの後、SCCS 履歴から g-ファイルが抽出されます。このオプションを指定するとファイルの転送速度が向上しますが、後でユーザー自身で get を実行しなければなりません。
「強制衝突」チェックボックスを選択すると、すべての更新を衝突として扱うことができます。
「バックアップしない」チェックボックスを選択すると、既存のファイルをブリングオーバー先ワークスペースの Codemgr_wsdata/backup/files ディレクトリにコピーする処理を省略できます。このオプションを使用すると、子ワークスペースが使用するディスク領域が減りパフォーマンスが速くなりますが、処理を取り消して元に戻すことはできなくなります。
「ブリングオーバー」ボタンをクリックして、トランザクションを実行する。
取り消しトランザクションを使用すると、更新ブリングオーバートランザクション中に実行された処理を元に戻すことができます。詳細は、「ブリングオーバーまたはプットバックの取り消し」を参照してください。
ワークスペース管理ツールは、更新ブリングオーバートランザクションの実行時に、親ワークスペースで SCCS からチェックアウトされたファイルを検出すると、それらのファイルの整合性や変更内容を維持するために、表 7-2 のような処置を行います。
表 7-2 更新ブリングオーバーにおけるチェックアウトファイルの状態と処置
トランザクションの実行が進むにつれて、「トランザクション出力」ウィンドウにステータス情報が表示されます。ファイルが処理されるたびにメッセージが表示され、実行が完了すると、トランザクション全体の要約情報が表示されます。
更新ブリングオーバートランザクションでは、よく衝突が検出されます (親と子の両方でファイルが変更された場合)。このような場合には、「トランザクション出力」ウィンドウにその旨を示すメッセージが表示されます。衝突の解決についての詳細は、第 8 章「衝突の解決」を参照してください。
ワークスペース管理ツールが親ワークスペースのファイルの読み取りおよび検査を行なっているときには、そのワークスペースに対して読み取りロックがかかります。一方、子ワークスペース内のファイルを操作している場合には、書き込みロックがかかります。
複数のワークスペース管理コマンドが同時にワークスペース内のファイルの読み取りを行うと、複数の読み取りロックが発生します。読み取りロックが 1 つでも存在すると、そのワークスペースに対してほかのコマンドを実行して書き込みを行うことはできません。書き込みロックは一度に 1 つしか存在できず、書き込みロックが存在する間、ほかのワークスペース管理コマンドでそのワークスペースに書き込みを行うことはできません。ロックの状態は、各ワークスペース内の Codemgr_wsdata/locks ファイルで管理されています。
ロックされているワークスペースに対してファイルをブリングオーバーしようとすると、そのロックを所有しているユーザーの名前、これらのユーザーが実行しているコマンド、およびロックが発生した時刻を示すメッセージが表示されます。
親ワークスペース: /user/demohost/ws/man_pages 子ワークスペース: /home/demohost/ws/man_pages_yasue bringover: 書き込みロックが取得できません。ワークスペース "/home/demohost/ws/man_pages_yasue" に以下のロックが存在しています: ユーザ jack は bringover コマンドを実行中です (pid 20291) マシン holiday で 9 分 (エラー 2021)
更新ブリングオーバートランザクションに関する情報は、Codemgr_wsdata/history ファイルに記録されます。この情報は、ワークスペースにおいてファイルがどのように変更されてきたかを知りたい場合に便利です。このファイルに関する詳細は、「ワークスペースに関するコマンド履歴の表示」を参照してください。
表 7-3 は、ブリングオーバートランザクション実行時にワークスペース管理ツールが行う処理の要約です。
表 7-3 ブリングオーバー実行時の処置
親のファイル |
子のファイル |
ワークスペース管理ツールの処理 |
---|---|---|
存在する |
存在しない |
子にそのファイルを作成 |
存在しない |
存在する |
なし |
変更なし |
変更なし |
なし |
変更なし |
変更あり |
なし |
変更あり |
変更なし |
子のファイルを更新 (SCCS ファイルをマージし、get によって最新のデルタを収めた g-ファイルを取り出す)。 |
変更あり |
変更あり |
子において SCCS 履歴ファイルをマージし、衝突を発生させ、ユーザーに衝突の存在を通知する。子におけるその時点での作業内容は SCCS ブランチに移動される。 |
ワークスペース管理ツールのトランザクションはすべて、子ワークスペースの側からの視点で実行されます。プットバックトランザクションは、子から親にファイルを戻します。
プットバックトランザクションは、親ワークスペースと子ワークスペースの内容を同一にするときに使用します (指定したファイルの内容が同じになります)。子ワークスペース内で変更を行い、そのテストを終えた後、プットバックトランザクションを実行します。通常、ファイルを親に戻すと、以後ほかの開発者はそれらのファイルをアクセスすることができるようになります。
プットバックトランザクションの実行時には、子から親にファイルをコピーすると、親のデータの整合性が損なわれる危険性が検知されることがあります。このような場合には、ファイルはコピーされず、プットバックトランザクションは中止されます。プットバックトランザクションが中止されるのは、次のような場合です。
いずれかのワークスペース上のファイルが SCCS からチェックアウトされている途中である。
親ワークスペース上のファイルに、子にコピーされていない変更が存在する。
いずれかのワークスペースに存在するファイルの衝突が解消されていない。
プットバックトランザクションは、SCCS の制御下にあるファイルを転送します。あるファイルが子ワークスペースには存在するが、親ワークスペースには存在しない場合、その SCCS 履歴ファイルが親にコピーされ、g-ファイル (最新のデルタ) が SCCS get コマンドによって作成されます。また、あるファイルが親と子の両方に存在し、子の側ではそのファイルが変更されている場合には、子から親に新しいデルタがコピーされます。さらに、親側あるいは親と子の両方でそれぞれファイルに変更が加えられている場合は、プットバックトランザクションは中止されます。
プットバックのトランザクションウィンドウは、次の方法で開くことができます。
親ワークスペースのアイコンの上に子ワークスペースアイコンをドラッグ&ドロップします。
ワークスペースアイコンを選択し、「トランザクション」⇒「プットバック」を選択します。
ワークスペースアイコンを選択し、ワークスペース表示区画のポップアップメニューから「プットバック」を選択します。
トランザクションダイアログがすでに開いている場合には、「カテゴリ」リストボックスから「プットバック」を選択します。
プットバックトランザクションを実行するには:
子ワークスペースを指定する。
ワークスペース表示区画でワークスペースアイコンを選択してからプットバックのトランザクションウィンドウを開くと、その名前が「子ワークスペースディレクトリ」フィールドに自動的に挿入されます。このフィールドは、ユーザーが変更することもできます。
親ワークスペースを指定する。
手順 1 で指定された子の親ワークスペースの名前が「親ワークスペースディレクトリ」フィールドに挿入されます。親ワークスペース名は、ワークスペース管理ツールのメタデータファイル Codemgr_wsdata/parent を参照して挿入されます。
「親ワークスペースディレクトリ」フィールドに新しい親のパス名を指定すると、1 回限りのプットバックトランザクションで、子ワークスペースの親を変更できます。この場合、親の変更はそのトランザクションについてのみ有効になります。ワークスペースの親を完全に変更したい場合には、「ワークスペース管理」ウィンドウで「編集」⇒「親の変更」を選択するか、該当する子ワークスペースのアイコンを新しい親のアイコン上にドラッグします。ワークスペースの親の変更についての詳細は、「ワークスペースの親子関係の変更」を参照してください。
ワークスペース表示区画でアイコンが選択されていない状態で「トランザクション」⇒「ブリングオーバー」⇒「更新」を選択すると、フィールドに情報の入っていない「トランザクション」ウィンドウが開きます。「子ワークスペースディレクトリ」に子ワークスペースの名前をユーザーが直接入力し、Return キーを押すと、自動的に「親ワークスペースディレクトリ」フィールドが更新されます。
親ワークスペースおよび子ワークスペースはファイルシステムを使用してアクセスできる必要があります。これらのアクセスには、オートマウンタまたは NFS マウントのいずれかを使用します。
ワークスペースへの (ユーザーの) アクセス可能性は、各ワークスペースの Codemgr_wsdata/access_control ファイルによって制御されます。“ワークスペースへのブリングオーバー”および“ワークスペースからのブリングオーバー”のアクセス設定が適切であることを確認してください。詳細は、「ワークスペースへのアクセス制御」を参照してください。
ファイルリスト区画でディレクトリ/ファイルのリストを作成する。
親ワークスペースの内容は、すべてを子にコピーすることも、その一部のみをコピーすることもできます。ファイルリスト区画に、コピーするディレクトリとファイルを指定します。ディレクトリおよびファイルの指定方法については、「トランザクションの対象となるディレクトリとファイルの指定」を参照してください。
独自の FLP を使用してファイルリストを作成する場合は、FLP もファイルリスト区画で指定してください。
ディレクトリ名およびファイル名として指定した相対パス名は、ワークスペース階層の最上位 (ルート) ディレクトリに対する相対パス (親ワークスペースと子ワークスペースで同じと仮定) として解釈されることに注意してください。絶対パス名で指定したファイル名は、親ワークスペースと子ワークスペースのいずれかにあるファイルを指し、該当するファイルが存在しない場合、そのファイル名は無視されます。
オプションを選択する。
「プレビュー」チェックボックスを選択すると、トランザクションの実行結果のプレビューを表示できます。このオプションを選択した状態でプットバックトランザクションを実行すると、ファイルのコピーは行われませんが、「トランザクション出力」ウィンドウに出力メッセージが表示され、実際にコピーが行われた場合の結果を確認できます。
「詳細メッセージ」チェックボックスを選択すると、「トランザクション出力」ウィンドウに、より詳細なメッセージを表示させることができます。デフォルトの設定では、作成および更新されたファイル、および衝突の存在するファイルそれぞれについてメッセージが表示されます。このオプションを選択した状態でプットバックトランザクションを実行すると、コピーされなかったファイルを含め、すべてのファイルに関するメッセージが表示されます。なお、このオプションと「メッセージ抑制」オプションを同時に指定した場合には、「メッセージ抑制」オプションが使用されます。
「メッセージ抑制」チェックボックスを選択すると、「トランザクション出力」ウィンドウにステータスメッセージを出力しないようにすることができます。
「SCCS get 抑制」チェックボックスを選択すると、プットバックトランザクションの実行時に SCCS get コマンドが自動的に実行されないようにすることができます。通常は、プットバックの後、SCCS 履歴から g-ファイルが抽出されます。このオプションを指定すると、ファイルの転送速度が向上しますが後でユーザー自身で get を実行しなければなりません。
「自動ブリングオーバー」チェックボックスを選択すると、プットバックトランザクションが中止された場合に、自動的に更新ブリングオーバートランザクションを実行して、子のファイルを更新できます。
「バックアップしない」チェックボックスを選択すると、既存のファイルをプットバック先ワークスペースの Codemgr_wsdata/backup/files ディレクトリにコピーする処理を省略できます。このオプションを使用すると、子ワークスペースが使用するディスク領域が減りパフォーマンスが速くなりますが、処理を取り消して元に戻すことはできなくなります。
コメントを入力する。
実行するプットバックトランザクションに関するコメントを入力します。このコメントは、親ワークスペース内の Codemgr_wsdata/history ファイルに書き込まれるトランザクションログと一緒に記録されます。コメントの長さは 8K バイト以内にしてください。
「プットバック」ボタンをクリックして、トランザクションを実行する。
取り消しトランザクションを使用すると、プットバックトランザクション中に実行された処理を元に戻すことができます。詳細は、「ブリングオーバーまたはプットバックの取り消し」を参照してください。
ワークスペース管理ツールは、プットバックトランザクションの実行時に、親ワークスペースで SCCS からチェックアウトされたファイルを検出すると、それらのファイルの整合性を保つために表 7-4 のような処置を行います。
表 7-4 プットバックにおけるチェックアウトファイルの状態と処置
トランザクションの実行中は、出力ウィンドウにステータス情報が表示されます。ファイルの処理に合わせてメッセージが表示され、実行が完了するとトランザクション全体の要約情報が表示されます。
ワークスペース管理ツールが親ワークスペースのファイルの読み取りおよび検査を行なっているときには、そのワークスペースに対して読み取りロックがかかります。一方、子ワークスペース内のファイルを操作している場合には、書き込みロックがかかります。
複数のワークスペース管理コマンドが同時にワークスペース内のファイルの読み取りを行うと、複数の読み取りロックが発生します。読み取りロックが 1 つでも存在すると、そのワークスペースに対してほかのコマンドを実行して書き込みを行うことはできません。書き込みロックは一度に 1 つしか存在できず、書き込みロックが存在する間、ほかのワークスペース管理コマンドでそのワークスペースに書き込みを行うことはできません。ロックの状態は、各ワークスペース内の Codemgr_wsdata/locks ファイルで管理されています。
ロックされているワークスペースに対してファイルをプットバックしようとすると、そのロックを所有しているユーザーの名前、ユーザーが実行しているコマンド、およびロックが発生した時刻を示すメッセージが表示されます。
親ワークスペース: /user/demohost/ws/man_pages 子ワークスペース: /home/demohost/ws/man_pages_yasue putback: 書き込みロックが取得できません。ワークスペース "/home/demohost/ws/man_pages_yasue" に以下のロックが存在しています: ユーザ jack は bringover コマンドを実行中です (pid 20291) マシン holiday で 9 分 (エラー 2021)
プットバックトランザクションに関する情報は、Codemgr_wsdata/history ファイルに記録されます。この情報は、ワークスペースにおいてファイルがどのように変更されてきたかを知る上で重要です。このファイルに関する詳細は、「ワークスペースに関するコマンド履歴の表示」を参照してください。
表 7-5 は、プットバックトランザクション実行時にワークスペース管理ツールが行う処理の要約です。
表 7-5 プットバック実行時の処置
親のファイル |
子のファイル |
ワークスペース管理ツールの処理 |
---|---|---|
存在する |
存在しない |
プットバックを中止し、ユーザーに通知 |
存在しない |
存在する |
親に該当ファイルを作成 |
変更なし |
変更なし |
なし |
変更なし |
変更あり |
親のファイルを更新 (SCCS ファイルをマージし、get によって最新のデルタを収めた g-ファイルを取り出す)。 |
変更あり |
変更なし |
プットバックを中止し、ユーザーに通知 |
変更あり |
変更あり |
プットバックを中止し、ユーザーに通知 |
チェックアウト |
チェックアウト [親または子のいずれかでファイルがチェックアウトされていると、プットバックトランザクションは中止されます。チェックアウトされたファイルのプットバックについては、表 7-4 を参照してください。] |
プットバックを中止し、ユーザーに通知 |
衝突あり |
プットバックを中止し、ユーザーに通知 |
ワークスペースで最後に実行されたブリングオーバーあるいはプットバックトランザクションは、取り消しトランザクションを使用して取り消すことができます。取り消しは、宛先ワークスペース側 (ファイルが変更された側のワークスペース) で行います。これらのトランザクションは、次に該当ワークスペースでトランザクションが実行されるまで、何回でも取り消すことができます。ただし、取り消すことができるのは、最後に実行されたブリングオーバーまたはプットバックのトランザクションだけです。
プットバックまたはブリングオーバートランザクションでファイルが更新されるか、衝突が検出された場合、取り消しトランザクションによってそのファイルは元の状態に戻ります。ファイルが新しい (つまり、ブリングオーバーまたはプットバックトランザクションによって作成されたものである) 場合、そのファイルは削除されます。
取り消しトランザクションを実行するには:
トランザクションの取り消しを行うワークスペースを指定する。
ワークスペース表示区画でワークスペースアイコンを選択してから、取り消しのトランザクションウィンドウを開いた場合、「ワークスペースディレクトリ」フィールドに自動的にそのワークスペースの名前が挿入されます。このフィールドには、いつでもユーザーが別のパス名を入力したり、変更を加えることができます。
「取消し」ボタンをクリックして、トランザクションを実行する。
「トランザクション」ウィンドウで「バックアップしない」チェックボックスを選択していた場合、トランザクションを取り消すことはできません。
指定ワークスペースでファイルが処理されている間、ワークスペースには書き込みロックが存在します。書き込みロックは、同時に 1 つしか存在できません。この間、ほかのワークスペース管理コマンドがワークスペースに書き込みを行うことはできません。ロック状況は、各ワークスペースにある Codemgr_wsdata/locks ファイルで管理されています。ワークスペース管理ツールは、この書き込みロックを得ることができないと、エラーメッセージを出力して処理を中止します。
取り消しトランザクションに関する情報は、Codemgr_wsdata/history ファイルに記録されます。この情報によって、ワークスペースにおいてファイルがどのように変更されてきたかを知ることができます。このファイルに関する詳細は、「ワークスペースに関するコマンド履歴の表示」を参照してください。
ブリングオーバーとプットバックトランザクションは、宛先ワークスペース (ブリングオーバーの場合は子、プットバックの場合は親) でファイルを更新あるいは作成する際に、オリジナルのファイルのバックアップコピーを作成してから、実際の変更を行います。既存のファイルはすべて、宛先ワークスペースの Codemgr_wsdata/backup/files ディレクトリにコピーされ、新たに作成されたファイルの名前がすべて、Codemgr_wsdata/backup/new というファイルに記録されます。
ワークスペースをブリングオーバーとプットバックトランザクション実行前の状態に戻すことにした場合、取り消しトランザクションは次のようにして元の状態を復元します。
バックアップファイルを Codemgr_wsdata/backup/files ディレクトリから転送ファイルにコピーします。
Codemgr_wsdata/backup/new ファイルに記録されている名前のファイルを削除します。
Codemgr_wsdata/backup ディレクトリに記録されているデータは、次にブリングオーバーとプットバックのトランザクションを実行するとすべて削除されます。
ワークスペース管理ツールによって転送されるファイルはすべて、SCCS の制御下にあります。通常、ブリングオーバーおよびプットバックトランザクションでは SCCS 履歴ファイルだけがバックアップされます。その後、ファイルを復元する場合、取り消しトランザクションは履歴ファイルから適切な g-ファイル (最新のデルタ) を抽出します。ただし、子ワークスペース内のファイルがブリングオーバートランザクション中にチェックアウトされた場合には、g-ファイルと SCCS 履歴ファイルの両方がバックアップされ、進行中の作業内容が保持されます (ブリングオーバートランザクション中のファイルのチェックアウトは可能ですが、プットバックトランザクション中にはできません。プットバック処理中のファイルをチェックアウトすると、エラーになります)。つまり、g-ファイルと SCCS 履歴ファイルは Codemgr_wsdate/backup/files ディレクトリにコピーされ、取り消しトランザクションによって復元されます。
ファイルの名前を変更したり、移動したり、削除したりする場合、ワークスペース管理ツールはこうした変更を記録し、ブリングオーバーやプットバックトランザクションでそれらのファイルがどのように扱われるかを把握しておこうとします。ワークスペース管理ツールはこれらのファイルを自動的に処理しますが、ユーザーはファイルの名前変更、移動、あるいは削除によるブランチのしくみをある程度知っておくと便利です。
ここでは説明上、「名前変更」と「移動」を同じ意味とみなし、用語としては「名前変更」のみを使用します。
ファイルの削除および名前変更を行う場合、バージョン管理ツールで使用できるコマンドを使用することをお勧めします。この節では、基本的な処理について説明します。
名前を変更したファイルに対してプットバックあるいはブリングオーバートランザクションを実行する場合、ワークスペース管理ツールはファイルが新たに作成されたものなのか、以前から存在していたファイルの名前が変更されたものなのかを判断しなければなりません。ファイルの名前を変更する場合は、g-ファイルおよび SCCS 履歴ファイルの名前も変更する必要があります。名前の変更は、ファイルの内容の更新や衝突に関する処理と同じ規則に従って、ワークスペース階層全体に伝達されます。
トランザクションの実行中、ファイルは個別に処理されます。ディレクトリの名前を変更すると、そのディレクトリ内のすべてのファイルが個別に名前を変更されたかのように、それぞれのファイルについて評価が行われます。
図 7-2 では、親ワークスペース内のファイル "C" の名前が "D" に変更されています。この場合、ワークスペース管理ツールはファイルを子ワークスペースにコピーする際に、次のいずれが正しいのかを判断しなければなりません。
"D" は親ワークスペースで新たに作成されたものか
子ワークスペースの "C" と同じファイルに新しい名前が付けられたものか
プットバック操作の場合も同様の判断が必要です。つまり、子ワークスペース内の "C" は新しいファイルなのか、それとも別のファイルの名前が変更されたものなのか、という判断です。
対象となるファイルが新規ファイルである場合と既存ファイルである場合とでは、処理の内容がかなり異なります。親ワークスペースの新規ファイルである場合、ワークスペース管理ツールは子ワークスペースにも新しいファイルを作成します。一方、親ワークスペース内で既存のファイルの名前を変更したものであれば、子ワークスペース内でファイルの名前を "C" から "D" に変更します。
ワークスペース管理ツールは、名前が変更された場合でもファイルを特定できるように、SCCS 履歴ファイルに情報を記憶します。ブリングオーバーおよびプットバックのトランザクションの出力を表示させると、次のようなメッセージが含まれています。
検査したファイル数:
ワークスペース管理ツールは、更新ブリングオーバーまたはプットバックトランザクションに関連するすべてのファイルをチェックし、名前の変更が行われていないことを確認した上でファイルの転送を開始します。
名前が変更されたファイルを検出すると、名前の変更を子 (ブリングオーバーの場合) または親 (プットバックの場合) に通知します。「トランザクション出力」ウィンドウに次のようなメッセージが表示されます。
名前変更 旧: old_filename 新: new_filename
ワークスペース管理ツールは、ファイルの名前に関する履歴情報を SCCS 履歴ファイルに格納します。名前履歴は、ファイルの作成以降、変更が加えられてきたワークスペース相対名をリストしたものです。この情報は、ワークスペース管理ツールが名前の変更されたファイルと新規ファイルとを識別するために使用します。ファイルの名前を変更すると、ワークスペース管理ツールはそのファイルを処理対象とする次のブリングオーバーまたはプットバックのトランザクションの実行時に、そのファイルの名前履歴を更新します。名前履歴が更新されると、「トランザクション出力」ウィンドウに次のようなメッセージが表示されます。
名前に関する詳細: 1 親の名前履歴を更新 1 子の名前履歴を更新
ごくまれではありますが、親ワークスペースと子ワークスペースで同時に同じファイルの名前が変更されることがあります。これを、名前変更の衝突と呼びます。たとえば、親ワークスペースでファイル "C" が "D" という名前に変更され、同時に子ワークスペースでは "E" に変更された場合です。
名前変更の衝突が発生した場合、ワークスペース管理ツールは親の "D" と子の "E" が実際には同じであることを判別します。このような場合、ワークスペース管理ツールは次のような処置を行います。
子のファイル名を使用して衝突があることを報告します。
子のファイル名を自動的に親のファイル名に変更して、この衝突を解決します。常に (プットバックトランザクションの場合でも)、親にあるファイルの名前が選択されます。
ワークスペース管理ツールが名前変更の衝突を検出すると、「トランザクション出力」ウィンドウに次のようなメッセージが表示されます。
名前の衝突です: name_in_child 名前変更 旧: name_in_child 新: name_in_parent
ワークスペースからファイルを削除するというワークスペース管理ツールでの操作は、一般的な削除の概念と少し異なります。ワークスペースからファイルを削除するときに rm コマンドを使用すると、ワークスペース管理ツールはそのファイルがワークスペースの親または子で新たに作成されたものであると見なします。
たとえば、次の例を考えてみましょう。ファイル "C" が rm コマンドで子ワークスペースから削除された後、更新ブリングオーバーを使用してこの子ワークスペースを更新する場合です。
ワークスペース管理ツールはまず 2 つのワークスペースを検査して、ファイル "C" が親には存在するが、子には存在しないことを確認します。そこで、ワークスペース管理ツールは子にファイル "C" を作成します。
このような動作をすることから、ワークスペース内のファイルを削除したい場合には、一定の規則をプロジェクト内で決めておきます。たとえば、削除するファイルには、その名前の先頭に .del- という接頭辞を付けるようにします。
example% mv module.c .del-module.c example% mv SCCS/s.module.c SCCS/s..del-module.c
この方法には、次のような利点があります。
SunOS のデフォルトのコマンド (たとえば、ls) でこのファイルを表示させることができなくなります。
ワークスペース管理ツールはこのファイルを再作成しません。
ワークスペース管理ツールはこの変更をワークスペース階層全体をとおして名前変更されたものとして扱い、結果的にワークスペース全体でこのファイルは削除されたものと同じことになります。
実際に削除されたわけではないので、後でこのファイルが関連するリリースの再作成に利用することができます。たとえば、ファイルがフリーズポイントの一部になっていた場合などです。フリーズポイントについては、第 4 章「プロジェクトの開始」および第 14 章「フリーズポイントツールの使用」を参照してください。