プログラミングユーティリティ

分岐

SCCS ファイルに適用されるデルタは、ツリーのノード (節) とみなすことができます。このツリーのルート (根) は、ファイルの最初のバージョンです。ルートのデルタ (ノード) の番号は、デフォルトでは「1.1」です。それ以降のデルタ (ノード) は、1.2、1.3 と順に番号が付きます。前述のように、SID はリリース番号とレベル番号を示します。後続のデルタでは、レベル番号が 1 ずつ増えていきます。また、ファイルを大幅に変更する際に、新しいリリースをチェックアウトする方法についてもすでに説明しました。前のリリースで新しいレベルを指定した場合を除き、新しいリリース番号は、後続のすべてのデルタにも適用されます。

したがって、ファイルは下図のように推移します。

図 5-1 SCCS ファイルの推移

Graphic

この構造は、SCCS デルタツリーの幹と呼びます。幹は、SCCS ファイルの通常の進展経過を表しています。あるデルタの変更は、それ以前のすべてのデルタに依存しています。

ただし、ツリーに分岐を作成すると便利な場合があります。たとえば、バージョン 1.3 が製品化されていて、リリース 2 の開発がすでに進行しているプログラムがあるとします。この場合は、リリース 2 のデルタがすでに存在している可能性があります。

ユーザー (顧客) から、バージョン 1.3 での問題点が報告され、リリース 2 の公開までその修正を延期できないとします。問題を修正するために必要な変更は、バージョン 1.3 のデルタに対して行う必要があります。このため、リリース 2 での作業とは別に、新しいバージョンを作成する必要があります。こうして、新しいデルタによってツリー上に新しい分岐が形成されます。

分岐デルタの SID は、次のようにリリース番号、レベル番号、分岐番号、シーケンス番号の 4 つの部分で構成されます。

release.level.branch.sequence

分岐番号は、特定の幹のデルタの子孫である (幹のデルタから派生した) 分岐それぞれに対して、最初の分岐は 1、次は 2 というように順に割り当てられます。シーケンス番号は、特定の分岐に属する各デルタに順次割り当てられます。したがって、下図のように、1.3.1.1 は、デルタ 1.3 から派生した最初の分岐の最初のデルタを示します。

図 5-2 分岐デルタのツリー構造

Graphic

分岐の概念は、ツリー中のその他のデルタにも適用されます。生成されたデルタの名前は、前述のように決定されます。分岐したデルタでは、リリース番号とレベル番号は、幹にある祖先のデルタと常に同一になります。

分岐番号は、幹との相対的な位置とは無関係に、分岐が作成された順で割り当てられます。したがって、分岐デルタは常に名前から識別できます。幹のデルタを分岐デルタの名前から識別できますが、幹のデルタから分岐デルタを特定することはできません。

たとえば、デルタ 1.3 から派生する分岐が 1 つある場合は、その分岐のすべてのデルタは 1.3.1.n という名前になります。この分岐のデルタからさらに派生する分岐が 1 つある場合は、新しい分岐のすべてのデルタは 1.3.2.n という名前になります。

デルタの名前が 1.3.2.2 の場合は、そのデルタが 2 番目に作成された分岐上の 2 番目のデルタで、その幹は デルタ 1.3 ということだけを特定できます。

特に、デルタ 1.3.2.2 の名前から、そのデルタと幹にある祖先のデルタ (1.3) の間にあるデルタをすべて特定することはできません。

図 5-3 分岐の概念を拡張する

Graphic

分岐デルタを使用してさらにツリー構造を形成できますが構造が複雑になるので、分岐はできるだけ少なくすることをお勧めします。

分岐を使用する

並行して開発している、バグの修正やテストを行うための別のバージョンを追跡する必要がある場合は、分岐を使用できます。ただし分岐を作成する前に、SCCS admin コマンドを以下のように使用して履歴ファイルの b (branch) フラグを有効にする必要があります。

$ sccs admin -f b program.c

-fb オプションは、履歴ファイル中に b フラグを設定します。

分岐デルタの作成

program.c のデルタ 1.3 から分岐を作成するには、次のように sccs edit サブコマンドを使用します。

$ sccs edit -r 1.3 -b program.c

編集したバージョンをチェックインすると、分岐デルタの SID に 1.3.1.1 が含まれます。この分岐から以降に作成するデルタは、1.3.1.2 から順に SID が割り当てられます。

分岐デルタからバージョンを取り出す

通常、get を使用して取り出したバージョンには分岐デルタは含まれていません。分岐バージョン (分岐デルタを関連付けたバージョン) を取り出すには、-r オプションを使用して明示的に指定する必要があります。次の例のようにシーケンス番号を省略すると、SCCS は分岐中で最上位 (最後) のデルタを取り出します。

$ sccs get -r 1.3.1 program.c
1.3.1.1
87

分岐をメインの幹に統合する

テストの完了後に、テストした機能を製品に組み込む場合があります。しかし、製品の開発は幹のバージョンで進行したために、分岐バージョンと幹での最新バージョンとの間に互換性がない場合があります。

この問題を解決する場合は、sccs edit-i オプションを使用して、ファイルをチェックアウトする際に含めるデルタのリストを指定すると便利です。指定したデルタでの変更が衝突する場合は警告が表示されます。衝突は、あるデルタでは削除する必要がある行が、別のデルタでは挿入する必要がある場合に発生します。衝突の解決はユーザーが行いますが、衝突している箇所は特定することができます。