テクニカルノート044  


シンボリックリンクとワークスペース・ルート

概要

UNIX シンボリックリンクと p4 コマンド

詳細

お使いの UNIX ファイルシステムにシンボリックリンクが存在しており、自分のワークスペース・ビューがシンボリックリンクされたディレクトリにある場合、コマンドラインに相対パス名が含まれていると、p4 コマンドから「not in client view(ワークスペース・ビューにありません)」との応答が返されることがあります。p4 コマンドは、ファイルがワークスペース・ビューにあるかどうかを決定する際、シンボリックリンクによって、誤ったパスをルートとして選択することがあります。
その理由の一つは、p4 コマンドは getcwd() の呼び出し結果よりも $PWD 環境変数を信頼することです。

次のコマンドを実行することによって、カレントディレクトリのマッピングを調べることができます。
	p4 where

また、次のコマンドを実行することによって、ワークスペースが見ている現在作業中のディレクトリを確認することができます。
	p4 info

両コマンドで表示されたディレクトリが一致しない場合、おそらく p4 コマンドは、誤ったパスをカレントディレクトリに使用していると思われます。p4 コマンドに -d オプションを使用することにより、明示的にカレントディレクトリを指定することができます。

例:
	p4 -d /tmp info

を実行すると、PERFORCE は現在作業中のディレクトリが実際にどこであるかにかかわらず、カレントディレクトリが /tmp であるかのように相対パス名を翻訳します。このメカニズムによって、ユーザは p4 コマンドに対して、基準とするディレクトリ名を渡すことができます。例えば、bash において以下のコマンドを実行するとします。
	alias p4='p4 -d `pwd`'>

bash がエイリアスを格納する前に不用意にバッククォートを解釈してしまわないように、シングル・クォーテションを使用するのを忘れないでください。こうすると PERFORCE は、$PWD に格納されたシンボリックリンクのパスではなく、「本当の」パスを参照します。

$PWD が正しく設定されている場合でも、export コマンドが必要な場合があります。例を示します。
	export PWD

シンボリックリンクに関連して、「not under client root(ワークスペース・ルートの下にありません)」または「not in client view(ワークスペース・ビューにありません)」というメッセージが表示される場合は、$PWD が設定されていることを確認し、さらに export コマンドを確実に実行します。ほとんどのシェルでは自動的に $PWD 変数を設定しますが、一部のシェルでは $PWD を使用する前に export を実行する必要があります。


代替ルート

バージョン 2002.2 のPERFORCEサーバで導入された代替ワークスペース・ルートを使用することにより、$PWD と CWD との違いやシェルの問題に対処するために、コマンドラインで回避策を使用する必要がなくなりました。現在は、単にシンボリックリンクを代替ルートに入力すれば、PERFORCE はエラーを返すことなく正常に処理を続行します。

しかし、ワークスペース・ルート配下でのシンボリックリンクの問題が、必ずしも解決されるわけではありません。そのため、必要に応じて $PWD 環境変数を設定し export を実行するか、-d オプションを使用する必要があります。

戻る