Kwxsync

kwxsync コマンドで、指定プロジェクト間で変更を加えたユーザーの ID と共に、指摘ステータスの更新とコメントを同期します。更新はすべて統合され、複数プロジェクトの同じ指摘は履歴も同じになります。

これは、ブランチの場合と同様に、プロジェクトがソースコードを共有する場合に有効です。デベロッパーは、検出された指摘を各ソースファイルに対して 1 回だけ評価および更新すれば十分です。すると、kwxsync は変更を同じソースファイルを含む他のプロジェクトに適用できます。また、--storage オプションを kwxsync 増分的実行に使用することもできます。詳細は、以下の例を参照してください。

注意: --storage オプションと --last-sync オプションを一緒に使用することはお勧めしません。期待どおりに同期しない結果になる可能性があるためです。

プロジェクトは、さまざまなサーバーだけでなく、さまざまな projects_root ディレクトリに存在することができます。サーバーは、コンピューター名とポート番号の一意の組み合わせとして定義されます。

ストリームでの作業を使用している場合は、欠陥の引用を同期するために、個々のプロジェクトとベースプロジェクトの間で kwxsync を実行できます。これにより、ベースプロジェクトのストリームの欠陥もすべて同期されます。

前提条件

アクセス制御メソッドが設定されると (Basic、LDAP または NIS)、クロスプロジェクトの同期 (すなわち 'xsync') を行うユーザーは必ず以下を行う必要があります。
  • 各サーバーは、'クロスプロジェクトの同期' パーミッションを持つユーザーが必要になります。初期設定では、プロジェクト ルート管理者とプロジェクト管理者は、このパーミッションが与えられています。これはプロジェクトのルート レベルのパーミッションなので、プロジェクト レベルで割り当てることはできません。
  • kwxsync が接続し、有効なアクセス制御メソッドを持つすべてのサーバーに対しては、'machine:port:user:token' の組み合わせ (たとえば、jsmith2.klocwork.com;8080;jsmith;e46db6b8582a) を指定するエントリが、kwxsync を実行しているマシンの 'ltoken' ファイルで必要になります。特定のマシンでこのファイルのエントリーを生成するには、ユーザーは該当するサーバーごとに kwauth を実行し、適切なパーミッション: kwauth のあるアカウントでログインし、ユーザーのホームディレクトリでトークンを格納、更新します。
  • 接続するユーザーは、特定の条件下でその役割が検証されます。「クロスプロジェクトの同期の実行」パーミッションのみを含む特別の役割を設定することをお勧めします。

同期を行おうとする際、ユーザーが指定された各マシンでこれを行うためのパーミッションを持っている場合のみ kwxsync が続行されます。ユーザーが適切なパーミッションを持たない場合は、システムは、適切なパーミッションを持たないユーザー名とともに、通過させなかったそれぞれのマシンのリストをログに記録し、kwxsync プロセスが終了します。

適切なアクセス制御メソッドのないマシンに接続し、ltoken ファイルにターゲット マシンのエントリーがない場合、kwxsync を実行しているマシンにログインしているユーザー名が使用されます。kwxsync コマンドファイルで参照される各プロジェクトには、明示的な URL (http://jsmith:8080/project_A) または黙示的な URL (project_B) があります。プロジェクトに黙示的な URL がある場合、サーバーとポートは --url パラメータの値で指定される同一のサーバーとポートであると想定されます。

方法の詳細については、プロジェクト間の同期ステータス変更とコメントを参照してください。

ステータス優先度ファイルを使用するステータス矛盾の解決

同期化の間で、1 つの欠陥で複数のユーザーが異なるステータスを設定することができます。これは、多くのプロジェクトを同期し、多数のユーザーがいる組織ではより一般的ですが、どの組織でも起こりえます。Klocwork を使用すると、ステータス優先度ファイルを参照することで、同期中にステータスの競合をうまく解決することができます。同期中は通常、システムは各コンポーネントおよびステータス変更のタイムスタンプを使用して、プロジェクト間の共有の経時的履歴を作成します。最新のタイムスタンプをもつステータスが、すべてのプロジェクトに適用されるステータスです。ステータス優先度オプションを使用するとき、最後の同期化から、指摘で複数のステータス設定がある場合、システムは、それぞれのステータスをファイルに指定された優先度と比較し、必要に応じて最高の優先度を指摘に適用します。作動方法:

  1. システム管理者が、すべての指摘ステータスの数字またはランク付けされたリストを定義する、ステータス優先度ファイルを作成します。これは、競合を解決するためにシステムが使用するファイルです。
  2. ビルドプロセスまたはシステム管理者が、kwxsync コマンドを実行し --status-priority file オプションを含めます。このコマンドは、ステータス優先度ファイルの位置を指し示します。
  3. プロジェクトごとに、システムがステータス履歴を共通履歴にマージします。最後の同期化後に複数のステータスが 1 つの指摘に適用されている場合、システムは各ステータスとそれらのタイムスタンプに基づく関連コメントがあれば、それらのログを記録します。
  4. システムは、ステータス優先度ファイルで定義されているように、適用されている最後のステータスが最高の優先度があるかどうか検証します。
  5. 適用されている最後のステータスに最高の優先度がある場合、システムは何も実行しません。適用されている最後のステータスが他のステータスのどれかよりも低い場合は、システムは指摘のステータスを変更して、その指摘に最高の優先度が付きます。システムはもう 1 つエントリを生成して、それをタイムラインに挿入します。システム生成エントリのタイムスタンプは、以前のステータスに 1 秒加えたタイムスタンプです。
  6. すべてのプロジェクトが同期されるまで、システムは同じ方法でそれ以降のプロジェクトをマージします。
ステータス優先度ファイルのフォーマット

ステータス優先度ファイル内で、最低の優先度の指摘ステータスには最小の番号が付けられ、最高の優先度の指摘ステータスには最大の番号が付けられます。ステータス優先度ファイルは、以下の様な UTF-8 テキストファイルです

  • スペースやコメントを含まない
  • すべて大文字のステータス名を含み、その後に等号記号があり、数字があり、各行に 1 つのステータスになっている
  • 各指摘ステータスに 1 ~ 8 の一意の番号を割り当てる

例えば、以下の構文を含むファイルを作成する場合は、システムは、他のステータスとの矛盾を解決するときに、Fix を最終ステータスとして適用します。

FIX=8
FIX_IN_LATER_RELEASE=7
FIX_IN_NEXT_RELEASE=6
DEFER=5
FILTER=4
IGNORE=3
NOT_A_PROBLEM=2
ANALYZE=1

以下の画像は、kwxsync により "Defer" から "Fix" に 更新された指摘のステータス履歴を示します。システムが指摘ステータスを更新するたびに、"<kwxsync>" を含むエントリが履歴に追加され、システムが同期化中にステータスを変更したことがはっきりとします。

Image:kwxsync-priorityfile.png

使用方法

kwxsync [<options>] <project_name_1>|<project_URL_1> <project_name_2>|<project_URL_2> [...]

ここで、<options> は以下の表に示すいずれかのオプションです。

同期するプロジェクトのスペース区切りリストを指定します。指定したすべてのプロジェクト内の更新がすべて統合され、すべてのプロジェクトの同じ指摘は履歴も同じになります。

プロジェクトは名前または URL で指定することができます。プロジェクト URL は、http(s)://<klocwork_server_host>:<klocwork_server_port>/<project> という形式です。

Klocwork サーバーのセキュア接続が構成されている場合は、https:// を使用します。

例 1: 同一サーバー上でのプロジェクトの同期

kwxsync Project1 Project2 --last-sync "03-04-2015 18:31:00"

この例では、2 つのプロジェクトだけを指定します。プロジェクトは、デフォルトのホストとポート (localhost:8080) 上で実行している Klocwork Server を共有しているため、プロジェクト名のみ指定する必要があります。kwxsync は Project1 で 2015 年 4 月 3 日午後 6 時 31 分以降に適用された指摘ステータスの更新とコメントをすべて見つけ出し、それらを Project2 にコピーします。また、同じことを Project2 から Project1 に対しても行います。

例 2: 複数サーバー上でのプロジェクトの同期

kwxsync http://server01.acme.com:8080/Project1 http://server01.acme.com:8080/Project2 http://serverxyz.acme.com:8080/Project3 

この例では、2 つの Klocwork サーバー上にある 3 つのプロジェクトを同期します。これらのプロジェクトを指定する最も簡単な方法は、それぞれのホスト、ポート、プロジェクト名を明確に識別するプロジェクト URL を使うことです。kwxsync は 3 つのプロジェクトを同期するので、プロジェクト内のすべての同一の指摘が同じ履歴を共有します。認証が有効な場合に、同期を実行するには、コマンドを実行するユーザーがすべての影響を受けるサーバーで認証されており、'クロスプロジェクトの同期の実行' パーミッションを持っている必要があります。kwxsync コマンドを実行する人には、影響を受ける各サーバーの認証データを含むローカルな ltoken ファイルが必要です。適切に認証を受けるには、関連の各サーバーkwauthkwauth を実行し、ユーザーのホームディレクトリにトークンを格納する必要があります。

例 3: プロジェクトを増分的に同期させるための、--storage オプションの使用

kwxsync --storage my_storage_file http://host:8080/zlib http://host:8080/zlib2 http://host2:8082/zlib

この例では、同期情報を永続的に格納し、同時に 3 つのプロジェクトを同期させるファイルが指定されます。このコマンドを初めて実行すると、システムは、すべての指摘ステータスの更新とコメントを、変更を行ったユーザーの ID と合わせて同期させます。このコマンドを、それ以降に実行すると、最新のステータス更新とコメントのみが同期され、かなりの量の時間が節約されます。--storage オプションの使用により、ツールを頻繁に実行させ、それぞれのデベロッパーが更新された指摘のリストを参照することを確実にできます。

例 4: --status-priority オプションを使用して、同期中にステータスの矛盾を解決

kwxsync --status-priority status-priority-file http://host:8080/zlib http://host:8080/zlib2 http://host2:8082/zlib

この例では、ステータスのランク付きリストを参照することで、システムが同期中にステータスの競合を解決できるようにするステータス優先度ファイルを指し示します。

オプション

名前 短い名前 説明
--copy -c 1 つのソースプロジェクトから、1 つまたは複数の出力先プロジェクトへと引用をコピーします。ソースプロジェクトが、コマンドラインに指定される最初のプロジェクトです。1 つまたは複数の出力先プロジェクトは、ソースプロジェクトの右にスペースで区切って指定されます。例:
--copy "srcproj" "destproj1" ["destproj2" ...]
--dry   「予行演習」を実行します。変更はコンソールに表示されますが、適用はされません。--output オプションも参照してください。方法の詳細については、"dry run" 同期の実行を参照してください。
--full -f 完全同期を適用します。デフォルトでは、kwxsync は増分モードで機能します。
--help   このヘルプを表示します。
--jobs <int> -j 使用するジョブ数を指定します。デフォルトは 5 です
--last-sync <string>   最終同期時刻。形式は "dd-MM-yyyy hh:mm:ss"。特定の日時後のステータス更新とコメントをすべてコピーするには、このオプションを使用します。これにより、データベースから抽出する情報量を削減してパフォーマンスを向上させることができます。
--max-retry   サーバーとの接続を kwxsync が再試行する最大回数を指定します。デフォルトは 3 です。
--output <file> -o 「予行演習」レポートの出力ファイルを指定します。このオプションに --dry を指定して使用すると、kwxsync は指定ファイルに加えられる予定の変更をすべて記載したレコードを HTML 形式で出力します。kwxsync はプロジェクトごとに HTML レポートを作成します。その際、プロジェクト名は出力ファイル名の一部となります。その際、プロジェクト名は出力ファイル名の一部となります。指定されない限り、HTML ファイル拡張子は追加されないことに注意してください。
--quiet -q コンソールのメッセージを非表示にします。
--report <file>   同期レポートをテキストファイルにエクスポートします。同期レポートの情報については、同期レポートの生成を参照してください。
--statuses <string>   同期されるステータスのカンマ区切りリストを指定します。--statuses オプションを指定すると、指定ステータスの更新だけが同期されます。たとえば、--statuses "not a problem",ignore を指定した場合、"Defer" などのその他のステータスの更新はいずれも同期されません。使用できるステータスのリストについては、指摘ステータスを参照してください。

プロジェクト間で指摘ステータスを同期すると、現在の指摘ステータスは常に最新のタイムスタンプのステータスになります。特定の指摘に対する以前のすべてのステータス (つまり、最新でないタイムスタンプのステータス) は、指摘更新履歴に追加されます。

--status-priority <filename> -sp システムが指摘ステータス矛盾を解決するために使用するステータス優先度ファイルを指定します。このオプションは、既存のプロパティと組み合わせて使用可能です。
--storage   同期情報を永続的に格納するファイルの場所を指定します。例:
kwxsync --storage my_storage http://host:8080/zlib
 http://host:8080/zlib2 http://host2:8082/zlib  
このオプションは、既存のプロパティと組み合わせて使用可能です。

たとえば、10.4 から 11.0 のように Klocwork の新しいバージョンにアップグレードした後は、古いストレージファイルを使用しないでください。代わりに、製品のアップグレードされたバージョンで使用する新しいストレージファイルを作成します。Klocwork は、新しいストレージファイルにすべての指摘ステータスの更新とコメントの履歴が変更を行ったユーザーの ID と合わせて含まれるようにデータを適切に移行します。

プロジェクトを他のサーバーに移動する場合はプロジェクトの URL を更新できるので、ストレージ ファイルを再構築する必要はありません。kwxsync ストレージファイルのプロジェクトの URL の名称変更を参照してください。

--tag   次の情報を持つ接頭辞のあるコメントをコピーされたタグ:指摘のステータスが最初に変更されたプロジェクトの名前、そのプロジェクトで一致する指摘の ID、およびその指摘ステータスが変更された日付 (dd-mm-yyyy) と時刻 (24h:mm)。
--url http(s)://<klocwork_server_host>:<klocwork_server_port>/   Klocwork サーバー用 URL。Klocwork サーバーのセキュア接続が構成されている場合は、https:// を使用します。
--version   バージョン情報を表示します。

終了コード

kwxsync コマンドを実行させると、システムは終了コードを生成します。リリース 11.0 では、終了コードは変更されました。詳細については、下のテーブルを参照してください。

終了コード 説明
0 成功。
1 壊滅的なエラー。たとえば、ジョブ起動時にサーバーが停止しました。
2 部分的成功。または、1 つまたは複数のプロジェクトの同期に問題がありましたが、他のプロジェクトは継続して更新中です。