スクリプトとレポート

本章では、スクリプト内でのp4コマンドの使用方法およびレポート目的でのこのコマンドの使用方法について詳しく説明します。特定のコマンドに関する詳細な説明は、『P4コマンドリファレンス』を参照するか、p4 helpコマンドを発行してください。

スクリプトとレポートの共通オプション

以下のコマンドラインオプションにより、コマンドライン上およびスクリプト内で設定を指定することができます。詳細な情報は、『P4コマンドリファレンス』のグローバルオプションに関する説明を参照してください。

オプション

解説

-b batchsize

コマンドを-x argfileによって処理する際に使用するバッチサイズ(引数の数)を指定します。デフォルトでは、128個の引数が読み取られます。

-c client_workspace

クライアントワークスペース名を指定します。

-G

すべての出力(およびフォームコマンドに対して、-iで指定する一括入力)を、整列されたPythonディクショナリオブジェクトとしてフォーマットします。

-p protocol:host:port

Perforceサービスのホストおよびポート番号とともに、接続に使用されるプロトコルを指定します。

-P password

設定されている場合、ユーザパスワードを指定します。(コマンドを発行するたびにパスワードを指定する代わりに)スクリプトでコマンドの実行前にログインするようにしたい場合は、p4 loginコマンドを使用します。例:

echo 'mypassword' | p4 login

-s

Perforceコマンドにより生成された出力の各行の最初に説明的なフィールド(text:info:error:exit:など)を追加します。

-u user

Perforceユーザ名を指定します。

-x argfile

指定のファイルから1行ごとに1つずつ、引数を読み込みます。argfileが単一のハイフン(-)である場合、標準入力が読み込まれます。

Perforceフォームでスクリプトを記述する

p4 clientp4 submitコマンドのように、スクリプトがユーザにフォームへの入力を要求するp4コマンドを発行する場合、-oオプションを使用して標準出力にフォームを書き込み、-iオプションを使用して標準入力から編集後のフォームを読み込みます。

例えば、UNIXでスクリプトを使用してジョブを作成するには、以下のようにします。

  1. p4 job -o > temp1コマンドを発行し、空白のジョブ仕様をテキストファイルに書き込みます。

  2. ジョブに必要な変更を加えます。例:

    sed 's/<enter description here>/Crashes on exit./' temp1 > temp2

  3. p4 job -i < temp2コマンドを発行してジョブを保存します。

一時ファイルを作成せずに上記の処理を実行するには、次のコマンドを発行します。

p4 job -o | sed 's/<enter description here>/Crashes on exit./' | p4 job -i

フォームを表示するコマンドは以下のとおりです。

  • p4 branch

  • p4 change

  • p4 client

  • p4 job

  • p4 label

  • p4 submit(チェンジリストの作成にはp4 change -oを使用。チェンジリストのサブミット時にデフォルトのチェンジリストに説明を入れるには、p4 submit -d "A changelist description"を使用。)

  • p4 stream

  • p4 user

ファイルのレポート

次のセクションでは、ファイルの状態と場所に関する情報を提供するコマンドを説明します。次の表に、基本的かつ非常に有用なレポートコマンドを示します。

表示させたい内容

使用するコマンド

ファイルタイプ、最新のリビジョン番号、その他の情報を含むファイルの状態。

p4 files

最新のものから最も古いものにいたるまでのファイルリビジョン

p4 filelog

現在作業状態のファイル

p4 opened

p4 sync結果のプレビュー

p4 sync -n

p4 syncプレビューの要約とネットワークトラフィックの予測

p4 sync -N

現在同期されているファイル

p4 have

指定されたファイルの内容

p4 print

ファイルのディポの場所の、対応するワークスペースの場所へのマッピング

p4 where

ファイルの一覧およびファイルに関する詳細情報

p4 fstat

ファイルの状態を表示する

ファイルの1つのリビジョンに関する情報を表示するには、p4 filesコマンドを発行します。このコマンドは、ディポ内でのファイルの場所、指定リビジョンでそれらのファイルに行われた動作(addeditdeleteなど)、指定ファイルリビジョンがサブミットされたチェンジリスト、およびそのファイルタイプを表示します。次の例は、p4 filesコマンドの典型的な出力例を示します。

//depot/README#5 - edit change 6 (text)

p4 filesコマンドには1つ以上のfilespec引数が必要です。ローカルシンタックス、クライアントシンタックス、ディポシンタックスのうち、どれを使用するかに関係なく、p4 fileコマンドはディポシンタックスを使用して結果を表示します。リビジョン番号を指定しない場合、最新リビジョンの情報が表示されます。p4 filesの出力には削除されたリビジョンも含まれます。

次の表に、p4 filesコマンドの一般的な使用方法をいくつか示します。

表示させたい状態

使用するコマンド

クライアントワークスペースビューに関係なく、ディポ内のすべてのファイル。

非常に多くのファイルを含むディポの場合、必要がない限りディポ全体(//depot/...)を参照するコマンドを発行しないようにしてパフォーマンスを最大化することができます。パフォーマンスを最大化するには、目的のディレクトリおよびファイルのみを指定します。

p4 files //depot/...

指定されたクライアントワークスペースに現在同期されているファイル

p4 files @workspacename

自分のクライアントワークスペースビューによってマッピングされているファイル

p4 files //workspacename/...

現在作業中のディレクトリにある特定のファイル

p4 files filespec

特定のファイルリビジョン

p4 files filespec#rev

ファイルがそのチェンジリストでサブミットされたかどうかにかかわらず、チェンジリストがサブミットされた時点での特定のファイル

p4 files filespec@changenum

特定のラベルでタグ付けされているファイル

p4 files filespec@labelname

ファイルのリビジョン履歴を表示する

ファイルのリビジョン履歴を表示するには、p4 filelog filespecコマンドを発行します。以下の例に、p4 filelogによりどのようにリビジョン履歴が表示されるかを示します。

p4 filelog //depot/dev/main/jam/jam.c

//depot/dev/main/jam/jam.c
... #35 change 627 edit on 2011/11/13 by earl@earl-dev-yew (text)
'Handle platform variants better'
... #34 change 598 edit on 2011/10/24 by raj@raj-althea (text)
'Reverse previous attempt at fix'
... ... branch into //depot/release/jam/2.2/src/jam.c#1
... #33 change 581 edit on 2011/10/03 by gale@gale-jam-oak (text)
'Version strings & release notes'

各チェンジリストの説明をすべて表示するには、-lオプションを指定します。

作業状態のファイルを一覧表示する

クライアントワークスペースで現在作業状態であるファイルを一覧表示するには、p4 opened filespecコマンドを発行します。次の行は、p4 openedコマンドによる表示される出力の例です。

//depot/dev/main/jam/fileos2.c- edit default change (text)

次の表に、p4 openedコマンドの一般的な使用方法をいくつか示します。

一覧表示する内容

使用するコマンド

現在のワークスペースで作業状態となっているファイル

p4 opened

すべてのクライアントワークスペースで作業状態となっているファイル

p4 opened -asp4 opened -a

番号付きの作業中チェンジリストにあるファイル

p4 opened -c changelist

デフォルトのチェンジリストにあるファイル

p4 opened -c default

特定のファイルが自分のワークスペースで作業状態になっているかどうか

p4 opened filespec

特定のファイルが作業状態になっているかどうか

p4 opened -a filespec

ファイルの場所を表示する

ファイルの場所に関する情報を表示するには、p4 wherep4 havep4 sync -nの各コマンドを使用します。

  • ディポシンタックス、クライアントシンタックス、ローカルシンタックスでファイルの場所を表示するには、p4 whereコマンドを発行します。

  • 自分のクライアントワークスペースに最後に同期させたファイルの場所およびリビジョンのリストを表示するには、p4 haveコマンドを発行します。

  • ファイルが自分のワークスペース内のどこに同期されたかを調べるには、p4 sync -nコマンドを発行して同期結果をプレビューします。

上記のコマンドでは、filespecを付けても付けなくても使用することができます。

次の表に、ファイルの場所を知るための有用なコマンドをいくつか示します。

表示内容

使用するコマンド

自分のワークスペースに同期させているファイルのリビジョン番号

p4 have filespec

ディポ内にある特定のファイルが自分のワークスペースのどこにマッピングされているか

p4 where //depot/filespec

ファイルの内容を表示する

ディポ内のファイルの内容を表示するには、p4 print filespecを発行します。このコマンドは、ファイルを説明する1行のヘッダとともに、ファイルの内容を標準出力または指定出力ファイルに出力します。-qオプションを指定すれば、ヘッダは出力されません。デフォルトでは、最新リビジョンが表示されますが、ファイルリビジョンを指定することもできます。

表示させたいファイル内容

使用するコマンド

最新リビジョン

p4 print filespec

ヘッダを含まないファイル内容

p4 print -q filespec

特定のチェンジリスト番号のファイル

p4 print filespec@changenum

注釈(ファイル内容への変更の詳細情報)を表示する

テキストファイルのどの行をどのファイルリビジョンまたはチェンジリストで変更したかを調べるには、p4 annotateコマンドを発行します。

デフォルトでは、p4 annotateはファイルの各行を表示し、変更したリビジョンがわかるように、各行の先頭にリビジョン番号が付加されます。リビジョン番号ではなくチェンジリスト番号を表示するには、-cオプションを指定します。

Example 47. p4 annotateを使用して、ファイルへの変更を表示します。

ディポにファイル(file.txt#1)が追加され、ファイルには以下の行が含まれています。

This is a text file.
The second line has not been changed.
The third line has not been changed.

3行目が削除され、2行目が編集されて、file.txt#2は次のようになります。

This is a text file.
The second line is new.

p4 annotateおよびp4 annotate -cの出力は次のようになります。

$ p4 annotate file.txt

//depot/files/file.txt#3 - edit change 153 (text)
1: This is a text file.
2: The second line is new.

$ p4 annotate -c file.txt

//depot/files/file.txt#3 - edit change 153 (text)
151: This is a text file.
152: The second line is new.

file.txtの最初の行はリビジョン1から存在し、このリビジョンはチェンジリスト151でサブミットされています。2行目はリビジョン2から存在し、そのリビジョンはチェンジリスト152でサブミットされています。

このファイルのすべての行を(削除された行を含め)表示するには、次のようにp4 annotate -aを実行します。

$ p4 annotate -a file.txt

//depot/files/file.txt#3 - edit change 12345 (text)
1-3: This is a text file.
1-1: The second line has not been changed.
1-1: The third line has not been changed.
2-3: The second line is new.

出力の最初の行は、ファイルの1行目がリビジョン1から3まで存在していることを示しています。次の2行は、file.txtのこれらの行がリビジョン1にのみ存在したことを示しています。最後の行は、リビジョン2で追加された行がリビジョン3にも存在していることを示しています。

-aオプションと-cオプションを組み合わせると、これまでこのファイルに存在したすべての行と、各行が存在したチェンジリスト番号(リビジョン番号ではない)を表示することができます。

ファイルへの変更を監視する

ファイルへの変更を発生の都度追跡するために、Perforceのチェンジレビューデーモンを使用できます。これにより、Perforceユーザが目的のファイルやディレクトリを指定したり、特定のファイルを変更するチェンジリストがサブミットされたときにメールを受信したりすることができます。レビューデーモンの管理に関する詳細については、『Perforceサーバ管理者ガイド: 基本』および『P4コマンドリファレンス』のp4 reviewコマンドの説明を参照してください。

次の表に、ファイル、チェンジリスト、およびユーザの状態に関する情報を表示するコマンドを示します。これらのコマンドはレビューデーモンでよく使用されます。

一覧表示する内容

使用するコマンド

特定のファイルを閲覧するユーザ

p4 reviews filespec

特定のチェンジリスト内のファイルを閲覧するユーザ

p4 reviews -c changenum

特定のユーザの電子メールアドレス

p4 users username

チェンジリストのレポート

p4 changesコマンドは特定の検索基準に合うチェンジリストを一覧表示し、p4 describeコマンドは特定のチェンジリストに関連付けられているファイルやジョブを一覧表示します。これらのコマンドについて解説します。

チェンジリストを一覧表示する

チェンジリストを一覧表示するには、p4 changesコマンドを発行します。デフォルトでは、p4 changesはシステムが認識しているpublicタイプのチェンジリストと当該ユーザがアクセス権限を持つrestrictedタイプのチェンジリストについてそれぞれ1行ずつ表示します。以下の表に、リストのフィルタリングに使用できるコマンドラインオプションを示します。

一覧表示させたいチェンジリスト

使用するコマンド

チェンジリストの記述の最初の31文字を表示

p4 changes

チェンジリストの完全な記述を表示

p4 changes -l

最後のn個のチェンジリスト

p4 changes -m n

特定の状態のチェンジリスト


p4 changes -s pending p4 changes -s submitted p4 changes -s shelved

特定のユーザに関連するチェンジリスト

p4 changes -u user

特定のワークスペースに関連するチェンジリスト

p4 changes -c workspace

特定のファイルに関連するチェンジリスト

p4 changes filespec

特定のファイルに関連するチェンジリスト(名前を付けたファイルと後になって統合されたファイルに関連するチェンジリストも含む)

p4 changes -i filespec

特定のファイルに関連するチェンジリスト(これらのファイルのリビジョンmnの間のチェンジリストのみを含む)

p4 changes filespec#m,#n

ラベルlab1とラベルlab2の間の各リビジョンで、特定ファイルに関連するチェンジリスト

p4 changes filespec@lab1,@lab2

2つの日付の間にサブミットされたチェンジリスト

p4 changes @date1,@date2

特定の日以降にサブミットされたチェンジリスト

p4 changes @date1,@now

チェンジリストに関連するファイルとジョブを一覧表示する

特定のチェンジリストに関連するファイルとジョブの一覧を、変更の差分とともに表示するには、p4 describeコマンドを発行します。差分を省略する(短い形式の出力)には、-sオプションを指定します。次の表に、チェンジリストのレポートに使われる有用なコマンドをいくつか示します。

一覧表示する内容

使用するコマンド

作業中チェンジリストに含まれるファイル

p4 opened -c changenum

特定のチェンジリストでサブミットされたファイル、および修正されたジョブ。差分を含む。

p4 describe changenum

特定のチェンジリストでサブミットされたファイル、および修正されたジョブ。差分は表示しない。

p4 describe -s changenum

特定のチェンジリストに関連するファイルおよびジョブ。コンテキスト差分オプションを基盤となる比較プログラムに渡す。

p4 describe -dc changenum

特定のチェンジリストにおける特定ファイルの状態を、そのチェンジリストがこれらのファイルに関連するかどうかにかかわらず表示。

p4 files filespec@changenum

ジョブについてレポートするその他のコマンドに関しては、ジョブのレポートを参照してください。

ラベルのレポート

ラベルに関する情報を表示するには、p4 labelsコマンドを発行します。次の表に、ラベルのレポートに使われる有用なコマンドをいくつか示します。

一覧表示する内容

使用するコマンド

すべてのラベルとその作成日付および所有者

p4 labels

指定したファイルリビジョン(またはリビジョン範囲)を含むすべてのラベル

p4 labels file# revrange

特定のラベルでタグ付けされているファイル

p4 files @labelname

ラベルを同期させた結果のプレビュー

p4 sync -n @labelname

ブランチと反映のレポート

以下の表に、ブランチおよび反映操作に関するレポートに一般的に使用されるコマンドを示します。

一覧表示する内容

使用するコマンド

すべてのブランチ仕様

p4 branches

特定のブランチ内のファイル

p4 files filespec

特定ファイルのリビジョン

p4 filelog filespec

特定ファイルのリビジョン。ブランチ元となったファイルのリビジョンを再帰的に含む。

p4 filelog -i filespec

衝突解決の結果のプレビュー表示

p4 resolve [args] -n [filespec]

衝突は解決されたが、まだサブミットされていないファイル

p4 resolved [filespec]

反映およびサブミットされているファイルのうち、filespec引数に適合するファイル

p4 integrated filespec

反映操作の結果のプレビュー表示

p4 integrate [args] -n [filespec]

ジョブのレポート

ジョブを一覧表示する

ジョブを一覧表示するには、p4 jobsコマンドを発行します。以下の表に、ジョブのレポートに一般的に使用されるコマンドを示します。

一覧表示する内容

使用するコマンド

すべてのジョブ

p4 jobs

完全な説明を含むすべてのジョブ

p4 jobs -l

検索基準に合致するジョブ(詳しくは、「ジョブを検索する」を参照)

p4 jobs -e jobview

特定のファイルを含むチェンジリストで修正されたジョブ

p4 jobs filespec

特定のファイルを含むチェンジリストで修正されたジョブ。その特定のファイルに後で統合されたファイルが含まれるチェンジリストを含める。

p4 jobs -i filespec

チェンジリストにより修正されたジョブを一覧表示する

p4 changep4 submit、またはp4 fixでチェンジリストにリンクされたジョブは、「修正されたジョブ」(それらの状態がclosedであるかどうかにかかわらず)と呼ばれます。チェンジリストにより修正されたジョブを一覧表示するには、p4 fixesコマンドを発行します。

以下の表に、修正のレポートに使われる有用なコマンドを示します。

一覧表示する内容

使用するコマンド

ジョブにリンクされているすべてのチェンジリスト

p4 fixes

特定のジョブにリンクされているすべてのチェンジリスト

p4 fixes -j jobname

特定のチェンジリストにリンクされているすべてのジョブ

p4 fixes -c changenum

特定のファイルに関連するすべての修正

p4 fixes filespec

特定のファイルに関連するすべての修正。その特定のファイルに後で統合されたファイルが含まれるチェンジリストを含める。

p4 fixes -i filespec

システム構成のレポート

このセクションで説明するコマンドでは、Perforceユーザ、クライアントワークスペース、およびディポが表示されます。

ユーザを表示する

p4 users commandは、ユーザ名、電子メールアドレス、ユーザの本名、およびユーザが最後にPerforceにアクセスした日付を、以下の形式で表示します。

bruno <bruno@bruno_ws> (bruno) accessed 2011/03/07
dai <dai@dai_ws> (Dai Sato) accessed 2011/03/04
earl <earl@earl_ws> (Earl Ashby) accessed 2011/03/07
gale <gale@gale_ws> (Gale Beal) accessed 2011/06/03
hera <hera@hera_ws> (Hera Otis) accessed 2011/10/03
ines <ines@ines_ws> (Ines Rios) accessed 2011/02/02
jack <jack@submariner> (jack) accessed 2011/03/02
mei <mei@mei_ws> (Mei Chang) accessed 2011/11/14
ona <ona@ona_ws> (Ona Birch) accessed 2011/10/23
quinn <quinn@quinn_ws> (Quinn Cass) accessed 2011/01/27
raj <raj@ran_ws> (Raj Bai) accessed 2011/07/28
vera <vera@vera_ws> (Vera Cullen) accessed 2011/01/15

ワークスペースを表示する

クライアントワークスペースの情報を表示するには、p4 clientsコマンドを発行します。このコマンドは、クライアントワークスペース名、ワークスペースの最終更新日付、ワークスペースルート、およびワークスペースの説明を以下の形式で表示します。

Client bruno_ws 2011/03/07 root c:\bruno_ws ''
Client earl-dev-beech 2011/10/26 root /home/earl ''
Client earl-dev-guava 2011/09/08 root /usr/earl/development ''
Client earl-dev-yew 2011/11/19 root /tmp ''
Client earl-win-buckeye 2011/03/21 root c:\src ''
Client earl-qnx-elm 2011/01/17 root /src ''
Client earl-tupelo 2011/01/05 root /usr/earl ''

ディポを一覧表示する

ディポを一覧表示するには、p4 depotsコマンドを発行します。このコマンドによる表示項目は、ディポ名、ディポの作成日、ディポのタイプ(localremotearchivespecまたはstream)、ディポのホスト名またはIPアドレス(remoteの場合)、ローカルディポへのマッピング、およびディポに関するシステム管理者のコメントです。

単一Perforceインストールで複数のディポを定義する方法について詳しくは、『Perforceサーバ管理者ガイド: 基本』を参照してください。

サンプルスクリプト

以下のサンプルスクリプトでは、p4 fstatコマンドの出力を解析し、最新リビジョンがクライアントワークスペースにないときに作業状態にされているファイル(問題発生の可能性あり)をレポートします。

Example 48. p4 fstatコマンドの出力の解析結果を示すサンプルシェルスクリプト

#!/bin/sh
# Usage: opened-not-head.sh files
# Displays files that are open when the head revision is not
# on the client workspace

echo=echo
exit=exit
p4=p4
sed=sed

if [ $# -ne 1 ]
then
     $echo "Usage: $0 files"
     $exit 1
fi

$p4 fstat -Ro $1 | while read line
do
     name=`$echo $line | $sed 's/^[\. ]\+\([^ ]\+\) .*$/\1/'`
     value=`$echo $line | $sed 's/^[\. ]\+[^ ]\+ \(.*\)$/\1/'`

     if [ "$name" = "depotFile" ]
     then
         depotFile=$value

     elif [ "$name" = "headRev" ]
     then
         headRev=$value

     elif [ "$name" = "haveRev" ]
     then
         haveRev=$value

         if [ $headRev != $haveRev ]
         then
             $echo $depotFile
         fi
     fi
done