ストリームのParentViewの例

このトピックの内容は以下のとおりです。

  • ParentViewフィールドとp4 streamsコマンドの--parentviewオプションを操作する方法
  • ParentView: inheritParentView: noinheritに変換する効果
    • 継承がない場合でも、ParentView: noinheritを使用して親ストリームから子に統合できます

ストリームを継承しないように変換する

  1. //streams/product1という名前のメインラインストリームを作成します。
    p4 stream -t mainline //streams/product1
    これにより、P4EDITORで指定されたエディターが開き、入力されたストリーム仕様が表示されます。
  2. メインライン//projectX/mainの子として//projectX/bruno-devという名前の開発ストリームを作成します。

    p4 stream -t development -P //projectX/main //projectX/bruno-dev

    これにより、P4EDITORで指定されたエディターが開き、ストリーム仕様が入力され、それに応じて親フィールドとタイプフィールドが入力されます。

  3. 現在のクライアントワークスペースのストリームについて、ストリームがParentView noinheritに変換された場合に何が起こるかをプレビューしますが、実際に変換を実行したり、ストリーム仕様を開いたりしないでください。

    p4 stream parentview -n --noinherit

  4. 今回は、-oオプションを追加して、変換されたストリーム仕様のプレビューも印刷します。

    p4 stream parentview -n --noinherit

  5. 保留中のチェンジリスト1234がすでにあると仮定して、現在のクライアントワークスペースのストリームの変換を実行します。

    p4 stream parentview -c 1234 --source-comments --noinherit

    ストリームは、指定されたチェンジリストの現在のクライアントワークスペースで開かれます。

  6. 変更をすべてのユーザに表示するには、変更リストをサブミットします(編集用に開いたストリーム仕様の場合と同じように)。保留中のストリーム仕様を元に戻して、変換を中止することもできます。
ヒント

以下のように--source-commentsオプションを含めることをお勧めします。

p4 stream parentview -c 1234 --source-comments --noinherit

変換の結果として変更または追加されたPathsIgnored、またはRemappedフィールドにソースコメントが追加されるためです。これらのコメントは、変換されたストリームの祖先のストリーム仕様に基づいて、変換されたストリームビューがどのように計算されるかを確認するのに役立ちます。

非継承への変換の拡張例

以下は、変換を説明するための数個のストリームを含む拡張例です。

メインラインストリームと3つの開発ストリームを持つstrという名前のストリームディポにストリーム階層閉じた ストリームディポ内にあるストリーム間の親から子への関係のセットです。があると仮定します。

メインライン

Stream: //str/main
Owner: super
Name: main
Parent: none
Type: development
Description:
Mainline
Options: allsubmit unlocked toparent fromparent mergedown
ParentView: inherit
Paths:
share ...
Ignored:
*.o

dev1子

Stream: //str/dev1
Owner: super
Name: dev1
Parent: //str/main
Type: development
Description:
Dev1 child
Options: allsubmit unlocked toparent fromparent mergedown
ParentView: inherit
Paths:
share ...
Remapped:
docs/... product_docs/...

dev2孫

Stream: //str/dev1
Owner: super
Name: dev2
Parent: //str/dev1
Type: development
Description:
Dev2 grandchild
Options: allsubmit unlocked toparent fromparent mergedown
ParentView: inherit
Paths:
share ...
Remapped:
import ssl_libs/... //depot/libs/ssl_libs/v1.0/...

dev2のdev3子

Stream: //str/dev2
Owner: super
Name: dev3
Parent: //str/dev2
Type: development
Description:
Created by super.
Options: allsubmit unlocked toparent fromparent mergedown
ParentView: inherit
Paths:
share ...

dev3のクライアントワークスペースビュー

すべてのストリームはParentViewinheritであるため、//str/dev3のワークスペースのクライアントワークスペースビューは、//str/mainメインラインストリームに戻るすべてのストリームの継承結果です。

Stream: //str/dev3
View:
//str/dev3/... //super_client/...
//depot/libs/ssl/1.0a/... //super_client/ssl_libs/...
//str/dev3/docs/... //super_client/product-docs/...
-//str/...%%1.o //super_client/...%%1.o

ビューには、継承されたすべてのものが反映されます。

  • メインライン//str/mainには、*.oで終わるファイルの無視されたエントリがあります
  • その子である//str/dev1は、docsパスを別の名前product-docsに再マッピングします。
  • 次のストリーム//str/dev2は、非ストリームの場所からSSLライブラリをインポートするためのPaths行を追加します。
  • 最後に、//str/dev3にはパスshare ...があります...

dev3を非継承に変換する

ストリーム//str/dev3のユーザは、ソースコメントを含めてストリームをParentView: inheritからParentView: noinheritに変換し、変換された仕様をサブミットします。

p4 stream parentview --source-comments --noinherit
p4 submt -So -d "Converting dev3 to noinherit"

変換後

  • //str/dev3のワークスペースのクライアントワークスペースビューは変更されません
  • //str/dev3のPathsフィールドは変更されます。

Stream: //str/dev3
Update:2020/11/05 11:30:02
Access:2020/11/05 11:42:21
Owner: super
Name: dev3
Parent: //str/dev2
Type: development
Description:
Created by super.
Options: allsubmit unlocked toparent fromparent mergedown
ParentView: noinherit
Paths:
import ssl_libs/... //depot/libs/ssl/1.0a/... ## merge from //str/dev2@8
share ...
Remapped:
docs/... product-docs/... ## copy from //str/dev1@9
Ignored:
*.o ## copy from //str/main@7

ここで、

  • ParentViewフィールドはnoinheritとなりました
  • //str/dev3PathsIgnoredRemappedフィールドは、すべての祖先ストリームのフィールドの内容に基づいて更新されました。
  • コメントは、変更がどのストリームから発生したか、変更がコピーされたか、結果のストリームにマージされたかを示します。

親からのストリーム仕様を統合します。

別のユーザがSSLライブラリのバージョンを1.0aから1.1.1hに変更して、//str/dev2のPathsフィールドを変更するとします。

Paths:
share ...
import ssl_libs/... //depot/libs/ssl/1.1.h/...

dev3ParentView: noinheritに変換されたため、そのクライアントワークスペースビューはこの変更を継承せず、1.0aの元のインポートパスを反映します。

親ストリーム//str/dev2から//str/dev3に対して、ストリーム仕様の統合操作を実行します。

p4 integrate -r -As -S //str/dev3

Stream spec //str/dev3@5 - integrate field Paths from //str/dev2@10

p4 resolveコマンドを使用して衝突を解決します。この場合、ユーザは//str/dev2からの変更をatで受け入れることを選択します。これは、「その変更を受け入れる」ことを意味します。

p4 resolve -So
//str/dev3 Paths - resolving //str/dev2@10
Paths resolve:
at: import ssl_libs/... //depot/libs/ssl/1.1.h/...
ay: import ssl_libs/... //depot/libs/ssl/1.0a/... ## merge from //str/dev2@8
am: merge of both
Accept(a) Skip(s) Help(?) am: at
//str/dev3 Paths - copy from //str/dev2@10

ストリーム仕様は現在のクライアントワークスペースで(統合のために)開いており、ユーザは新しい仕様でクライアントビューがどうなるかを調べることができます。

View:

//str/dev3/... //super_client/...

//depot/libs/ssl/1.1.h/... //super_client/ssl_libs/...
//str/dev3/docs/... //super_client/product-docs/...
-//str/...%%1.o //super_client/...%%1.o

//str/dev3のクライアントのクライアントワークスペースビューは、ストリーム//str/dev2のPathsフィールドに加えられた変更を反映するようになりました。

//str/dev3にはnoinheritParentViewがあるため、暗黙的な継承は発生しませんでした。代わりに、明示的な統合と解決を実行しました。//str/dev3の変更をすべてのユーザに表示するには、保留中の変更をサブミットします。これは、//str/dev3ストリームのすべてのクライアントワークスペースに影響します。