あなたの主な関心事は、これを可能な限り効率的に行うこと (サーバーへの影響を最小限に抑え、スクリプトを最小限に抑えること) であることを考えると、次のことをお勧めします。
p4 -c Client_Test client -s -S //toto/test
p4 -c Client_Test print //Client_Test/file.txt
「client -s」コマンドは、ファイルの内容やファイルのメタデータを操作しないため、サーバーのオーバーヘッドはほとんどありません。ストリームがテンプレートを形成する「ビュー」を作成するだけであり、そのストリームのコンテキストで作業しているデポファイルを定義することにより、他のコマンドを実行するためのコンテキストを提供します。これにより、"//Client_Test/file.txt" 構文が、タスク ストリームの "シャドウ テーブル"、デポの公開部分、または別のストリームからのインポートのいずれにあるかに関係なく、正しいファイルにマップされます。親ストリーム内の再マップされたパスなど。
哲学的な理由でクライアント仕様を使用しないことに決めた場合は、次のようにすることができます。
p4 -c nonexistentclientspec client -o -S //toto/test
これにより、実際にデータベースにクライアント仕様を作成せずにクライアント ビューが表示されます。PerforceスクリプトAPIの1つを使用すると、「View」フィールドをキャプチャしてMapオブジェクトに変換するのはそれほど難しくありません.いくつかの困難を伴います。
「p4 client」コマンドを使用して架空のクライアント ビューを表示することさえ哲学的に禁止されている場合、次善の策はストリーム仕様自体を解析することです。もちろん、ストリーム スペックからビューを生成するための決定論的システムがあるため、このシステムを自分で再実装することもできますが、かなりの困難が伴います。
ただし、主な関心事が効率と使いやすさである場合は、クライアント仕様の使用をお勧めします。サーバーのオーバーヘッドについてまだ懐疑的である場合は、「-Ztrack」を指定してこれらのコマンドを実行し、実行する必要がある作業がどれだけ少ないかを確認してください。
C:\p4\test>p4 -Ztrack -c Client_Test client -s -S //stream/task
Client Client_Test switched.
--- lapse .015s
--- rpc msgs/size in+out 0+1/0mb+0mb himarks 2000/2000 snd/rcv .000s/.000s
--- db.user
--- pages in+out+cached 3+0+2
--- locks read/write 1/0 rows get+pos+scan put+del 1+0+0 0+0
--- db.group
--- pages in+out+cached 3+0+2
--- locks read/write 1/0 rows get+pos+scan put+del 0+1+1 0+0
--- db.stream
--- pages in+out+cached 7+0+2
--- locks read/write 5/0 rows get+pos+scan put+del 1+11+11 0+0
--- db.domain
--- pages in+out+cached 14+8+2
--- locks read/write 8/2 rows get+pos+scan put+del 10+0+0 2+0
--- db.template
--- pages in+out+cached 8+0+2
--- locks read/write 6/0 rows get+pos+scan put+del 0+6+12 0+0
--- db.view
--- pages in+out+cached 6+4+2
--- locks read/write 2/1 rows get+pos+scan put+del 0+2+4 1+1
--- db.have
--- pages in+out+cached 3+0+2
--- locks read/write 0/0 rows get+pos+scan put+del 0+1+1 0+0
--- peek count 1 wait+held total/max 0ms+0ms/0ms+0ms
--- db.working
--- pages in+out+cached 5+0+2
--- locks read/write 2/0 rows get+pos+scan put+del 0+3+3 0+0
--- peek count 1 wait+held total/max 0ms+0ms/0ms+0ms
--- db.trigger
--- pages in+out+cached 3+0+2
--- locks read/write 1/0 rows get+pos+scan put+del 0+1+1 0+0
--- db.bodtext
--- pages in+out+cached 3+0+2
--- locks read/write 1/0 rows get+pos+scan put+del 2+0+0 0+0
--- db.protect
--- pages in+out+cached 3+0+2
--- locks read/write 1/0 rows get+pos+scan put+del 0+1+3 0+0
--- db.monitor
--- pages in+out+cached 6+6+2
--- locks read/write 0/2 rows get+pos+scan put+del 0+0+0 2+0
実際のクライアント スイッチでは、データベース エントリが 1 つだけ書き換えられていることに注意してください。オーバーヘッドの大部分は、認証と出力に関連する基本的に無視できる量です (成功したことを示す 1 行)。