Perforce へのアクセス

Perforce へのアクセスには、4つの情報が必要になる。
アクセスに必要な情報は、 p4 set {環境変数名}={値} 命令にてPerforce用の環境変数(Windowsのみ)として設定することができる。
p4 コマンドを使用する際には環境変数が使用されるが、グローバルオプションにて設定を上書きすることができる。

環境変数およびレジストリ変数 グローバルオプション

指定 環境変数 グローバルオプション
サーバー名(+ポート番号) P4PORT -p
ユーザー名 P4USER -u
クライアント名 P4CLIENT -c
パスワード P4PASSWD -P

複数の depot を扱う環境では、扱うディレクトリによってはこれを切り替える必要が出てくる。 p4 コマンドを使用する際に、PCの環境、ユーザーごとにこれらの設定が違うため、自動化のバッチが作りにくい理由となる。

環境変数

環境変数とあるが、Windiws では OSの環境変数とは違うため、プロセスによる切り替えができない。
MacOSUnix ではOS環境変数なのに・・・・。
コマンドプロンプトを2つ立ち上げて片方の設定を変えると、もう片方にも反映してしまう。 つまりOSでグローバルな設定となっている。 これは p4 コマンドで自動化を処理をする際に非常に大きな問題となる。 複数の depot を扱っているPCで同時に別々のp4コマンドを使用する場合、 P4環境変数は共有されているため、タイミングによってどちらの設定が反映するかわからないので使用できない。 Windows では 必ずグローバルオプションで指定する必要がある。

パスワード入力について

パスワードに関してはグローバルオプションや環境変数に直に記入するとセキュリティの問題がある為、 サーバーのセキュリティレベルによってはグローバルオプション、環境変数の指定が無効にされる。 その場合、チケットによる認証が行われる。ログイン時にチケットがサーバーから発行されチケットの有効期間はパスワードを入力しなくても良くなる。

当然ログイン時にパスワードが必要になるが、グローバルオプションと環境変数は無効とされているため、標準入力から入力する必要がある。 セキュリティ的に問題はあるが、バッチで処理する場合は以下のようにするとログインを自動化できる。

echo {Password} | p4 login -p {Server:Port} -u {UserName} -c {ClientName}

解決策

上記のことを踏まえると、Perforce の処理を自動化するには、depotがマッピングされたディレクトリによってアクセスへの設定を切り替えられるのが良い。 例えば、ローカルPC毎にPerforeceへのログイン設定を行ってもらい、使用するディレクトリによって 自動的にグローバルオプションを付加したコマンドを発行する仕組みがあれば良い。