概要
Perforceのtypemapで排他ロック(+l)なしのバイナリファイルを運用しています。Perforceの仕様上は、+lが付いていなければ複数ワークスペースから同時にp4 editが可能です。
しかしSourceControlモジュールのPerforce実装では、他ユーザーがチェックアウト中(CheckedOutOther)のとき、該当ファイルがbinaryであるだけでISourceControlState::CanCheckout()(実装は FPerforceSourceControlState::CanCheckout())がfalseを返しチェックアウトできません。これは意図した制限でしょうか?
該当コード
PerforceSourceControlState.cpp の FPerforceSourceControlState::CanCheckout() 内に if (!bBinary && !bExclusiveCheckout) という分岐があり、binaryであるだけでelseの分岐に入るため、CheckedOutOtherの時にbCanDoCheckoutがfalseとなります。
テキストファイルは+l修飾が付いていないファイルタイプの場合 !bBinary && !bExclusiveCheckout に該当するため、CheckedOutOtherでもtrueが返されますが、非排他的なバイナリは常にfalseになります。
運用上の背景
該当の .abc は 自動生成バイナリファイルで、常に最新で上書きされても問題ありませんが、CIからUEコマンドレット経由でSourceControlモジュールのAPIを呼び出しチェックアウトしようとすると失敗します。
質問
binaryかつ非排他(+l なし)の場合でも、他ユーザーがチェックアウト中は CanCheckout() がfalseにするというのは意図した設計でしょうか?
もし意図した設計であれば、自動生成バイナリのように「排他不要・常に上書き可」のファイルをUEのSourceControlで扱うための推奨設定/ワークフローはありますか?(例:特定拡張子を非排他バイナリとして扱うオプションや、CanCheckout()の判定を上書きする拡張など)
意図したものではない場合、!bExclusiveCheckout を優先する(+l でなければ CheckedOutOther でも許可する)等の修正は検討可能でしょうか?あるいはエディタ側からこの挙動を設定で切り替えられるようにする予定はありますか?
ご確認のほど、よろしくお願いいたします。