誰かがこれに正しく最善の方法で対処するように私を導くことができますか? 同じコード ベースが変更されている 2 つのアクティブな開発ブランチと、ベースの clearcase 環境に 1 つの統合ブランチがあります。しかし、ブランチ 2 から統合ブランチへのコードの昇格を防ぎ、ブランチ 1 から統合ブランチへのマージのみを許可したかったのです。お知らせ下さい。
2 に答える
開発ストリームから統合ストリームに配信する別のユーザーがいる場合は、次のことができます (を使用cleartool lock -nusers ... stream:aStream@\vobs\apvob
):
devstream1
を除くすべてをロックしますdev1
(そうすれば、確実dev1
にのみ作業できますdevstream1
)、devstream2
を除くすべてをロックしますdev2
(そうすれば、確実dev2
にのみ作業できますdevstream2
)、intstream
あなた以外の全員をロックし、dev1
(その方法でのみdev1
に配送できますintstream
)
私または dev1 がコードを devstream2 から intstream に誤ってプロモートした場合はどうなりますか?
次に、 preop deliver_start
トリガーが必要になります( を使用mktrtype
)。
これらは不変であるため、そのトリガーはトリガー内のストリームの OID を制御します。cleartool describe -fmt %On <stream-name>
それらの 1 つが 用のものである場合devstream2
、トリガーはエラーで終了し、配信を拒否します。
Base ClearCase を使用しているように聞こえるので、preop 'checkin' トリガーを使用できます。トリガーが実行するスクリプトは、チェックインしようとしているチェックアウト済みのバージョンに受信 Merge ハイパーリンクがあるかどうかを確認します。存在する場合、スクリプトは、ハイパーリンクの「from」側が branch1 からのものであることを確認し、そうであればステータス 0 で終了します。他のブランチからのものである場合、スクリプトは説明的なエラー メッセージを出力し、0 以外のステータスで終了します (したがって、チェックインを防ぎます)。
トリガーの種類を作成するときに、トリガーのスコープを統合ブランチ (以下の例では「my_int_branch」と呼びます) に制限すると、パフォーマンスが向上します。コマンド ラインは次のようになります。
% cleartool mktrtype -element -all -preop checkin -brtype my_int_branch -exec path_to_allow_branch1_merge_script allow_branch1_merge
スクリプトでは、次のような方法でチェックアウト バージョンに添付された Merge ハイパーリンクを取得できます。
cleartool describe -fmt '%[hlink:Merge]p\n' $CLEARCASE_PN
着信 Merge ハイパーリンクがある場合、次のようなハイパーリンクごとに 1 行が表示されます。
"Merge@2877@/vobs/myvob" <- "/vobs/myvob/mydir/file.c@@/main/branch1/3"
スクリプトは、「from」バージョンの外側のブランチが「branch1」であることを確認する必要があります。