この章では、ブリングオーバー ⇒ プットバック ⇒ 衝突解決という基本的な開発作業サイクルを例を挙げて説明しています。
この章は、以下の節で構成されています。
次の作業について、簡単な例を挙げて説明します。
作成ブリングオーバートランザクションを使用して、共通の親から 2 つの新しい子ワークスペースを作成する。
プットバックトランザクションを使用して、一方の子ワークスペースで行われた変更の内容を親に戻す。
更新ブリングオーバートランザクションを使用して、他方の子ワークスペースの内容を、先に親に戻された変更内容で更新する。
更新ブリングオーバートランザクションの実行時に生じた衝突を解決する。
この例では、2 名のライター (Jane と Bob) が、ワークスペース管理ツールのいくつかのコマンドのマニュアルページの管理作業を担当しています。親となるマニュアルページ用のワークスペースの名前は man_pages です。2 人のライターは、それぞれ別の子ワークスペースで作業し、man_pages で互いの作業内容をマージします。図 10-1 に、ワークスペース man_pages のファイルシステム階層を示します。
ライターは、それぞれ自分の子ワークスペースを作成し、親ワークスペース man_pages と同じファイルをコピーします。
Jane はワークスペース表示区画で man_pages アイコンを選択し、「トランザクション」⇒「ブリングオーバー」⇒「作成」を選択します (図 10-2 参照)。
作成ブリングオーバーの「トランザクション」ウィンドウが開きます (図 10-3 参 照)。
Jane はこのウィンドウで次の項目を指定します。
「子ワークスペースディレクトリ」フィールドに子ワークスペースのパス名を入力します。
「追加」ボタンをクリックして「ファイル追加」ダイアログを開き、ファイルリスト区画で man/ ディレクトリを選択します (図 10-4 参照)。
ファイルリスト区画では、man/ の代わりに "." (ワークスペース全体を表わす) を指定することもできます。SCCS ファイルはすべて man/ の下に置かれるため、どちらの指定方法を使用しても結果は同じです。
Jane は「ブリングオーバー」ボタンをクリックして作成ブリングオーバートランザクションを起動します。
Bob も同様に、man_pages_bob という自分のワークスペースを作成します。
図 10-5 は、作成ブリングオーバートランザクションを実行したときの出力です。
この出力には次のような重要な情報が含まれています。
検査したファイル: 13
ブリングオーバートランザクションの最初のチェック段階で、ワークスペース管理ツールは親と子の間で 13 個のファイルに相違があることを検出しました。この場合は、子は作成されたばかりでファイルは格納されていないので、親に格納されているファイルがすべてトランザクションの対象と見なされます。
内容の変更をブリングオーバー: 13
ワークスペース管理ツールは、親から子にコピーすべきファイルがリスト内に 13 個存在することを検出しました。
内容に関する要約:
13 作成
子ワークスペースで 13 個のファイルが作成されたことを示します。作成ブリングオーバートランザクションでは、すべての転送ファイルがこのメッセージに該当します。
13 子の名前履歴を更新
名前履歴は、ワークスペース管理ツールがファイル名を追跡するために使用するファイルです。このファイルの使用により、名前を変更されたファイルの処理にかかる時間を短縮できます。
Bob は新しいワークスペースで作業を開始し、3 つのファイル bringover.1、putback.1、args.4 に変更を加えました。これらの変更内容は重要なので、Bob は Jane にもこのファイルを読んでほしいと考えます。そこで、まずプットバックトランザクションを使用して、変更結果を共通の親ワークスペース man_pages に戻します。
ワークスペース表示区画で man_pages_bob アイコンを選択し、「トランザクション」⇒「プットバック」を選択します (図 10-6 参照)。
プットバックの「トランザクション」ウィンドウ (図 10-7 参照) が開いたら、Bob は「プレビュー」オプションを選択します。このオプションを選択すると、ファイルは実際にはコピーされずにトランザクションが進められます。これにより Bob は、実際にはファイルを変更せずにトランザクションの出力を事前に見ることができ、期待どおりにトランザクションが実行されるかどうかを確認できます。
ワークスペース管理ツールはディレクトリ man/ を自動的にファイルリスト区画に読み込みます。これは、Bob が man_pages_bob を作成するときに指定したディレクトリで、この名前はワークスペースの Codemgr_wsdata/args ファイルに保存されています。ファイルリスト区画の内容は、この区画のすぐ下にあるボタンを使用して変更できます。
図 10-8 は、このトランザクションの出力です。
出力を確認したら、Bob は「プレビュー」オプションの選択を解除して、実際にプットバックトランザクションを実行します。
Jane は自分のワークスペース (man_pages_jane) にあるファイル putback.1 と locks.4 に変更を加えています。この変更を man_pages ワークスペースにプットバックする前に、Jane は Bob が man_pages ワークスペースにプットバックしたばかりの変更内容を自分のワークスペースに取り込んでおく必要があります。このため、Jane は次のように更新ブリングオーバートランザクションを実行します。
ワークスペース表示区画で man_pages_jane アイコンを選択し、「トランザクション」メニューから「ブリングオーバー」⇒「更新」を選択します。
更新ブリングオーバーの「トランザクション」ウィンドウが開いたら、「プレビュー」オプションを選択します。このオプションを選択すると、ファイルは実際にはコピーされずにトランザクションが進められます。これにより Jane は、実際にはファイルを変更せずにトランザクションの出力を事前に見ることができ、実際に処理を行なったときにどのファイルが変更されるかをあらかじめ確認しておくことができます。
この更新ブリングオーバートランザクションの出力 (図 10-11 参照)からは、次のことがわかります。
args.4 と bringover.1 が man_pages_jane で更新される。
putback.1 に衝突が存在する。putback.1 は、man_pages で Bob により変更されており、かつ man_pages_jane で Jane により変更されるため。
locks.4 は man_pages_jane でのみ変更される。
その他の 9 個のファイルは変更されない。
この結果は Jane が予想したとおりだったため、Jane は「プレビュー」オプションの選択を解除して、実際にトランザクションを実行することにします。トランザクションが予想通りに完了すると、ワークスペース管理ツールは putback.1 に生じた衝突の解決処理をその場で実行するかどうかを問い合わせてきます (図 10-12 参照)。
Jane は衝突の解決処理をその場で実行することにして「はい」ボタンをクリックすると、衝突解決のトランザクションダイアログ (図 10-13 参照) が開きます。
ここで衝突を解決しなくても、後で、man_pages_jane のアイコンをダブルクリックするか、このアイコンをクリックして「トランザクション」⇒「衝突解決」を選択して、衝突解決トランザクションを起動できます。
ツール属性で「ファイルマージの自動起動」オプションが設定されている場合、ファイルマージが自動的に起動されます。
衝突状態のファイル (man/man1/putback.1) が、「トランザクション」ウィンドウの衝突ファイルリスト区画に表示されます。このファイルは自動的に選択 (強調表示) されるので、Jane は「衝突をマージ」ボタンをクリックします。このリストに複数のファイルがある場合、任意のファイルの選択状態を解除できます。また、「自動的に進む」オプションが選択されている場合 (デフォルト)、選択されているファイルが自動的に順に処理されます。
ワークスペース管理ツールはファイルマージを起動し (図 10-14 参照)、ファイルマージに衝突ファイル名 putback.1 を渡します。
Jane は、右側の区画から Bob の変更内容を、左側の区画から自分の変更内容をそれぞれ取り込んで、マージ処理を行います。最後に、この結果を保存して衝突解決の処理は完了です。ファイルマージの使用方法についての詳細は、第 12 章「ファイルマージの起動とファイルの読み込み」と第 13 章「相違の検討」を参照してください。
これで、Jane は Bob と同様の手順 (「変更内容のプットバック」を参照) で、自分の変更内容を親ワークスペース (man_pages) にプットバックできます。