ファイル指定

概要

クライアントシンタックス、ディポシンタックス、またはローカルシンタックス中のあらゆるPerforceコマンドにおいて、どんなファイルでも指定できます。ワークスペース名とディポ名は、同じネームスペースを共有しているため、Perforceサービスがワークスペース名とディポ名を混同することは決してありません。

シンタックスフォーム

ローカルシンタックスは、ローカルシェルかOSで指定されたファイル名を参照します。ローカルシンタックスで参照されるファイル名は、ファイル名の絶対パス、または現在の作業ディレクトリを起点とする相対パスで指定可能です。(相対パスの構成要素は、ファイル指定子の最初の部分にしか現れません。)

Perforceには、OSが異なっても変わることのない独自のファイル指定方法があります。ファイルがクライアントルートを起点とする相対パスで指定された場合、ファイルはクライアントシンタックスで示されているということになります。また、ディポの最上層を起点とする相対パスで指定された場合は、ディポシンタックスで示されているということになります。このどちらかで指定されたファイルは、Perforceシンタックスで指定されたと言えます。

Perforceのファイル指定子は常に2つのスラッシュ(//)で始まり、その後にクライアントかディポの名前、さらにその後にクライアントかディポのルートディレクトリを起点とするファイルのフルパス名が続きます。

クライアントシンタックスおよびディポシンタックスのパス構成要素は、ローカルのOSやシェルが使用する構成要素区切り文字に関わりなく、常にスラッシュ(/)で区切られます。

各シンタックスの例を以下に示します。

構文

ローカルシンタックス

/staff/user/myworkspace/file.c

ディポシンタックス

//depot/source/module/file.c

クライアントシンタックス

//myworkspace/file.c

ワイルドカード

Perforceシステムでは、3つのワイルドカードが使用できます。

ワイルドカード

意味

*

1つのディレクトリ内で、スラッシュを除くすべての文字に一致します。

...

現在の作業ディレクトリおよびすべてのサブディレクトリ内で、すべてのファイルに一致します。(つまり、複数のサブディレクトリにわたって、スラッシュも含めてすべてに一致します。)

%%1 - %%9

ビューの中で使用されるとき、ファイル名中の部分文字列を再配列するための位置指定子です。

例:

一致するファイル

J*

現在のディレクトリにある、Jで始まるファイル

*/help

現在のサブディレクトリにある、helpという名前のすべてのファイル

./...

現在のディレクトリおよびそのサブディレクトリにあるすべてのファイル

./....c

現在のディレクトリおよびそのサブディレクトリにある、最後に.cが付くすべてのファイル

/usr/bruno/...

/usr/brunoの下にあるすべてのファイル

//bruno_ws/...

bruno_wsという名前のワークスペースまたはディポの下にある、すべてのファイル

//depot/...

当該ディポにあるすべてのファイル

//...

すべてのディポにあるすべてのファイル

リビジョン指定子の使用

ファイル指定子は、#@を付加することにより修正できます。

ファイル指定子#および@は、ディポに保存されたファイルの特定リビジョンを参照するために使用します。

修飾子

意味

file#n

リビジョン指定子: filen番目のリビジョン。

file#none

file#0

存在しないリビジョン: fileのリビジョンがディポに存在する場合、そのリビジョンは無視されます。

これは、ディポ内にあるファイルをそのままディポ内に残す一方、クライアントワークスペースからは削除したいときに便利で、例えばp4 sync file#noneのように使います。

ファイル指定子#0は、#noneと同様に使用することができます。存在しないリビジョンとは、1番目のリビジョンがディポにサブミットされる前に「存在していた」リビジョンと考えることができます。

file#head

fileの最新リビジョン。これは、明確に言及されている場合を除き、リビジョン指定子なしでファイルを参照することと同じです。

file#have

現在のクライアントにあるリビジョン: p4 syncで最後にクライアントワークスペースに同期させたファイルのリビジョン。

file@n

チェンジ番号: チェンジリストnがサブミットされた直後のfileのリビジョン。

file@=n

チェンジ番号: 作業中チェンジリスト番号nfileのリビジョン。

file@labelname

ラベル名:ラベルlabelname内のfileのリビジョン。

file@clientname

クライアント名:クライアントワークスペースclientnameに最後に取り込まれたfileのリビジョン。

削除されたファイル(つまり、最新リビジョンでdeleteの目的でマーキングされたファイル)はワークスペースの一部であるとはみなされません。

file@datespec

日付と時刻:指定した日付と時刻におけるfileのリビジョン。

時刻を指定しない場合、指定した日の午前00:00:00における最新リビジョンが返されます。

日付と時刻は、yyyy/mm/dd:hh:mm:ssまたはyyyy/mm/dd hh:mm:ssの形式で指定します(日付と時刻の間にスペースかコロンのどちらかを入れます)。

日付指定子@nowは、現在の日時を指定するのと同様に使用することができます。

リビジョン指定子は、一度に多くのファイルを操作するために使用することができます。p4 sync //myclient/...#4は、作業状態にないすべてのファイルの4番目のリビジョンを、クライアントワークスペースにコピーします。

ファイルを日付と時刻で指定する場合(つまりfile@datespecという形式の指定子を使用する場合)、ローカルシェルによって日付指定子が単一トークンとして解釈される必要があります。日付だけではなく時刻を指定するために日付指定子を使用する場合は、日付指定子の前後に引用符を使用しなければならないことがあります。

保留されたファイルには、p4 diffp4 diff2p4 files、および p4 printの各コマンドでリビジョン指定子@=changeを使用してアクセスすることも可能です。ただし、changeは作業中チェンジリスト番号を示します。

Perforceのファイル指定文字は、ローカルシェルによって途中で取得され解釈されてしまうことがあります。そのような文字は、使用する前にエスケープしておく必要があります。例えば、#はたいていのUNIXシェルでコメント文字として使用され、/は(Perforce以外の)DOSコマンドによってオプション指定子として解釈されます。スペースが入っているファイル名は、コマンドラインにおいて引用符で囲まなければならないことがあります。

これらの問題、およびプラットフォームに特有な他の問題については、プラットフォーム別のリリースノートを参照してください。

リビジョン範囲の使用

Perforceコマンドのいくつかは、リビジョン範囲を使用してファイル引数を変更することができます。リビジョン範囲は2つの別個のリビジョン指定子で、カンマによって区切られます。例えば、p4 changes file#3,5は、ファイルfileの3番目、4番目、および5番目のリビジョンをサブミットしたチェンジリストをリストします。

リビジョン範囲には、使用するコマンドにより、次のように異なる2つの意味があります。2つの意味は、以下の通りです。

  • 指定した範囲内にあるすべてのリビジョンに対して、コマンドを実行します。例えば、p4 jobs //...#20,52は、どのファイルかに関わりなく、ファイルの20番目から52番目までのリビジョンをサブミットしたチェンジリストによって修正された、すべてのジョブをリストします。

    リビジョン範囲は暗黙的に#1で始まります。例えば、p4 fixes //depot/file.c#5とすると、リビジョン1からリビジョン5までに修正されたすべてのジョブを指します。(リビジョン5で修正されたジョブだけを表示するには、p4 fixes //depot/file.c#5,5と指定する必要があります。)

    リビジョン範囲は、p4 changesp4 fixesp4 integratep4 jobs、およびp4 verifyコマンドとともに使用される場合、上記のように解釈されます。

  • 指定した範囲内で最大番号のリビジョンのみに対して、コマンドを実行します。例えば、コマンドp4 print file@30,50は、チェンジリスト30~50でサブミットされたファイルfileの、最大番号のリビジョンを出力します。これは、p4 print file@50とは次のように異なります。例えば、ファイルfileのリビジョン#1がチェンジリスト20でサブミットされ、ファイルfileのリビジョン#2がチェンジリスト60でサブミットされた場合、p4 print file@30,50は何も出力しません。これに対し、p4 print file@50は、ファイルfileのリビジョン1を出力します。

    コマンドp4 filesp4 print、およびp4 syncはすべて、このようにリビジョン範囲を使用します。

リビジョン範囲は、非常に強力なものとなりえます。例えば、p4 changes file#3,@labelnameは、ファイルfileの3番目のリビジョンから、ラベルlabelnameに保存されているリビジョンまでをサブミットしたすべてのチェンジリストをリストします。

ファイル名およびエンティティに関する文字の制限

国際語化のサポートにより、Perforceでは、印刷可能な非ASCII文字をファイル名、ラベル名、クライアントワークスペース名、およびその他の識別子に使用することができます。

パス名構成要素区切り記号(/)は、ファイル名、ディポ名、クライアントワークスペース名に使用することはできませんが、ラベル名、ジョブ名、ユーザ名の中に含めることができます。再帰的サブディレクトリワイルドカード(...)は、ファイル名、ラベル名、およびその他の識別子に使用することはできません。

文字

理由

...

Perforceワイルドカード: すべてに一致し、カレントディレクトリのレベルで機能し、カレントレベル以下のすべてのディレクトリレベルにあるファイルを含みます。

/

パス名の構成要素を区切るPerforceの区切り記号。

Perforceリビジョン指定子ワイルドカード(@#)、ファイル一致ワイルドカード(*)、または位置置換ワイルドカード(%%)がファイル名または任意のディレクトリ構成要素に含まれたファイルを参照するには、文字の16進値のASCII表現を使用します。ASCII拡張は、以下の4つの文字にのみ適用されます。

文字

ASCII拡張

@

%40

#

%23

*

%2A

%

%25

status@june.txtなどのファイルを追加するには、次のようなコマンドを使用して、特殊文字の文字解釈を強制します。

p4 add -f //depot/path/status@june.txt

チェンジリストをサブミットすると、文字が自動的に拡張され、次のように変更サブミットフォームに表示されます。

//depot/path/status%40june.txt

ファイルが追加されたチェンジリストをサブミットした後で、そのチェンジリストをワークスペースに同期させる場合や、ワークスペース内で編集する場合は、ASCII拡張を使用する必要があります。

p4 sync //depot/path/status%40june.txtp4 edit //depot/path/status%40june.txt

特殊文字の大半は、クロスプラットフォームの環境では、原則としてファイル名には使用できません。UNIXではパスの構成要素を/で区切りますが、多くのDOSコマンドは/をコマンドラインのオプションとして解釈します。たいていのUNIXシェルは#をコメントの始まりとして解釈します。DOSおよびUNIXのシェルは両方とも*を拡張して複数のファイルに一致させ、DOSコマンドラインは%を変数の参照に使用します。

同様に、非ASCII文字をファイル名とPerforce識別子に使用することは可能ですが、それらの文字をコマンドラインから入力するときに、プラットフォーム特有の解決策が必要になることがあります。GUIベースのファイルマネージャのユーザは、このようなファイルを、ドラッグアンドドロップ操作で取り扱うことができます。