大文字/小文字を「区別しない」に変更したい
現在、HelixサーバがCentOS、クライアントがWindowsという環境です。
大文字/小文字の取り扱いを「区別しない」に統一したいのですが、設定方法はありますか?
また、懸念点があれば教えてください。
P4サーバーの大文字/小文字の取り扱いを「区別する(case-sensitive)」から「区別しない(case-insensitive)」へ変更することはサポートされていません。
これは、登録済みのファイルやディレクトリの状態によっては、設定変更時にデータロスが発生する可能性があるためです。
代替手段として、以下の2つの方法があります。
- 方法1:p4migrateを使用して新しいサーバーへ移行する
- 方法2:トリガースクリプトで大文字/小文字違いの登録を防止する
方法1:p4migrateを使用する
移行対象のデータをエクスポートし、新規に構築したP4サーバーへマージする方法です。
移行先サーバーを新規構築する際に、大文字/小文字を区別しない(case-insensitive)設定で作成することで、設定を変更した環境へ移行できます。
注意
この方法はPerforce Softwareのサポート対象外です。
また、エクスポート元と移行先では同一バージョンのP4Dを使用する必要があります。
手順
- 移行元とは別にステージング環境を構築する。
perfsplitを使用して、移行対象のディポをステージング環境へエクスポートする(移行元のデータは削除されません)。p4 verifyなどを実行し、エクスポートしたデータに欠損がないことを確認する。p4migrateを実行し、case-insensitive環境へ変換する。- 再度
p4 verifyを実行し、変換後のデータに問題がないことを確認する。 - 移行先P4サーバー(case-insensitive)のステージング環境を構築する。
perfmergeを使用して、変換済みデータを移行先環境へマージする。
使用するツール
| ツール | 用途 |
| perfsplit | 移行対象データのエクスポート |
| perfmerge | 変換済みデータを移行先環境へマージ |
| p4migrate | case-insensitive環境への変換 |
方法2:トリガースクリプトを使用する
P4サーバーの大文字/小文字の取り扱いを変更せず、サブミット前にトリガースクリプトでファイル名およびディレクトリ名をチェックする方法です。
大文字/小文字だけが異なるファイル名またはディレクトリ名が既に存在する場合は、サブミットをエラーとして拒否します。これにより、大文字/小文字だけが異なる名前のファイルやディレクトリが新たに登録されることを防止できます。
方法2の手順を説明します。
手順
1.Python・P4Pythonインストール
トリガースクリプトはPythonで実装されているため、P4サーバーが稼働するマシンにPythonをインストールする必要があります。
また、スクリプトからP4サーバーへ接続するため、P4Pythonもインストールしてください。
2.スクリプトの配置
以下のPerforce Software公開ページから、トリガースクリプトをダウンロードしてください。
ダウンロード先- Swarm - guest/perforce_software/sdp/dev/Unsupported/Samples/triggers
https://swarm.workshop.perforce.com/files/guest/perforce_software/sdp/dev/Unsupported/Samples/triggers
上記ページから、以下の2つのファイルをダウンロードします。
CheckCaseTrigger.pyP4Triggers.py
ダウンロードしたファイルを、P4サーバーが動作するマシン上の任意のディレクトリへ配置します。
本手順では、以下のディレクトリを例とします。
/opt/perforce/
3.トリガスクリプトの設定
トリガーテーブルに以下の設定を追加します。
CheckCaseTrigger change-submit //... "python3 /opt/perforce/CheckCaseTrigger.py %changelist% port=<P4PORT> user=<SUPER_USER>"
| パラメータ | 説明 |
| port | トリガースクリプトが接続するP4Dサーバーのポート番号 |
| uesr | トリガースクリプトを実行するスーパーユーザー |
注意1:P4PORTおよびP4USERを設定している場合
サーバーマシンの環境変数P4PORTおよびP4USERが設定されている場合は、portおよびuserの指定は不要です。
環境変数が設定されていない場合は、トリガーテーブルにportとuserを指定してください。
チケット認証を利用している環境では、トリガースクリプトが認証できるよう、実行ユーザーのチケットを事前に作成しておく必要があります。
トリガースクリプトは、P4Dを実行しているOSユーザーのホームディレクトリにある.p4ticketsを参照して認証を行います。.p4ticketsに有効なチケットが存在しない場合、トリガー実行時に認証エラーとなります。
また、トリガー専用の非人格ユーザーを使用する場合は、チケットの有効期限が切れないよう、チケット期限を無期限に設定したグループへ追加することを推奨します。