コンテンツ
ここでは、Helix Coreがどのように大文字/小文字をハンドリングするかについて説明しています。
また、大文字/小文字の問題を回避し、発生したときにそれを解決する方法についても説明します。
背景
"p4 add"を用いてHelix Coreのディポにファイルが追加されると、サーバルート配下にバージョン化ファイル(例:$P4ROOT/depot/main/file1,v)が書き込まれます。併せて、関連するメタデータのエントリがHelix Coreのデータベースファイル(例:$P4ROOT/db.rev)に書き込まれます。
新しいバージョン化ファイル(及びメタデータエントリ)は、"p4 integrate"を用いた場合にも書き込まれます。
大文字/小文字を区別するプラットフォーム上でHelix Coreを使用しているとき、このメタデータとバージョン化ファイルとの間で、大文字/小文字が異なってしまう可能性があります。
大文字/小文字を区別する必要がある動作
UNIX上のHelix Coreサーバは、名前における大文字/小文字の違いをサポートします。
Windows上のHelix Coreサーバは、大文字/小文字の違いを無視します。
ジョブにおけるキーワードの検索では、常に大文字/小文字の違いは無視されます。
これをまとめると、下表のようになります。
大文字/小文字の区別 | UNIXサーバ | Windowsサーバ |
パス名、ファイル名 | 区別する | 区別しない |
データベースエントリ (クライアント名、ラベル名等) | 区別する | 区別しない |
ジョブ検索のキーワード | 区別しない | 区別しない |
現在どのプラットフォーム上で実行しているかを調べるには、"p4 info"を実行します。
Helix Coreサーバとクライアントの組み合わせにおいて、大文字/小文字をハンドリングする動作について説明します。
・UNIXサーバ+UNIXクライアント:問題なし
メタデータとバージョン化ファイルの大文字/小文字は常に一致します。
・Windowsサーバ+Windowsクライアント:問題なし
メタデータとバージョン化ファイルとの間に大文字/小文字の違いが発生する可能性があります。
しかし、これらの違いは無視されます。
・UNIXサーバ+Windowsクライアント:潜在的な問題
UNIX(及びUNIXファイルシステム)上のHelix Coreサーバは、大文字/小文字が混在したファイルを保持する可能性があります。
一方、Windowsファイルシステムは大文字/小文字が混在したファイルを保持することができません。
詳しくは、以下「潜在的な問題について:詳細」をご覧ください。
・Windowsサーバ+UNIXクライアント:潜在的な問題
Windows上のHelix Coreサーバは、大文字/小文字が混在したメタデータを管理することができます。結果として、WindowsベースのHelix Coreサーバにおいて1つのディレクトリに存在するファイルが、UNIXベースのクライアントワークスペース内では2つ以上の大文字/小文字が異なった別ディレクトリに存在するかもしれません。
詳しくは、以下「潜在的な問題について:詳細」をご覧ください。
潜在的な問題について:詳細
■ UNIXサーバ+Windowsクライアント
Helix CoreサーバがUNIX上にあり、かつUNIXからアクセスするユーザとWindowsからアクセスするユーザの両方が存在する場合、UNIXユーザは、ファイル名の大文字/小文字のみが異なるファイルをサブミットしないよう注意が必要です。UNIXサーバ自体はこういったファイルをサポートしますが、Windowsユーザがこのようなファイルをクライアントワークスペース同期すると、大文字/小文字だけが異なるディレクトリやファイルは、お互いに上書きし合うことになります。
例えば、UNIXベースのHelix Coreサーバ上において、あるファイルが大文字/小文字の異なる2つのディレクトリ配下に存在し、それらを"main/file1"および"MAIN/file1"とします。次のコマンドをUNIXベースのクライアントから実行したときは、期待どおり、2つの大文字/小文字が異なるディレクトリ配下に2つの異なるファイルとして同期されます。
p4 sync main/file1
p4 sync MAIN/file1
しかし、同じコマンドをWindows上のクライアントから実行すると、2つの異なるファイルはクライアントワークスペース内の同一ディレクトリに同期され、最後の同期操作がそれ以前に同期したファイルを上書きしてしまいます。
ファイルの保存方式に加え、大文字/小文字はクライアントのエンティティにも影響を与えます。UNIX上のHelix Coreサーバは、ユーザ名、クライアント名、ブランチ仕様名、ラベル名に対して大文字/小文字を意識します。UNIXサーバに接続しているWindowsユーザは、新しいクライアントワークスペースに対するデフォルトの名前として、小文字のホスト名が使われることに気を付ける必要があります。例えば、ホスト名"ROCKET"のマシン上で新しいユーザがクライアント仕様を作ると、そのクライアントワークスペース名はデフォルトで"rocket"となります。もし、そのユーザが後でP4CLIENTを"ROCKET"または"Rocket"に設定してしまうと、Helix Coreは「そのクライアントワークスペースは未定義」と認識します。このクライアントワークスペースを使用するには、P4CLIENTを"rocket"に設定する(もしくはP4CLIENTを設定しない)必要があります。
■ Windowsサーバ+UNIXクライアントの場合
Helix CoreサーバがWindows上で動作している場合、UNIXクライアントからアクセスしているユーザは、大文字/小文字の異なるファイルが同一の名前空間に保存されることを意識しなければなりません。例えば、次のコマンドをUNIXのクライアントワークスペースから実行すると、両方のファイルはWindowsサーバ上で同じディポディレクトリに格納されます。
p4 add dev/file1
p4 add DEV/file2
サーバ上のディポファイルにおいて、Windowsサーバがディポパスとファイル名を割り当てる際、最初に見つかった名前が採用されます。上記の例では、ファイルシステム上に保存されるディポパス名は"dev"となります。しかし、Helix Coreのメタデータにおけるパス及びファイル名の大文字/小文字は、ユーザから入力されたままの状態で維持されます。Helix Coreサーバは、これに基づいてファイルの場所を追跡しますので、大文字/小文字の違いを認識するUNIX上のクライアントワークスペース内では、これらのファイルは異なるファイルとしてアクセスされます。
Windowsユーザは、新しいファイルを追加する際に、ファイル名やパス名の大文字/小文字に関して一貫性を保つように注意しなければなりません。Windowsクライアントから"//depot/main/foo.c"及び"//depot/MAIN/bar.c"として追加されたファイルは、UNIXユーザのクライアントワークスペースにおいては、2つの異なるディレクトリ配下のファイルとして同期されてしまいます。Windowsサーバにおけるファイルは、ディポファイルでは大文字のみ(または小文字のみ)のファイルとして格納されたとしても、メタデータでは追加されたときの大文字/小文字が保持されます。また、ディレクトリパスにおける実際の大文字/小文字は、コマンドラインでどのように入力されたか、またはドラッグ&ドロップ操作においてOSがどのように取り扱ったかによって、変化する可能性があります。
パス名の大文字/小文字に確実に一貫性を持たせる方法として、サブミット前のトリガがあります。
大文字/小文字の問題を検出し解決する
大文字/小文字の問題を検出する方法として、"p4 verify"を定期的に実行する方法があります。
例えば、次のように実行します。
p4 verify -q //...
"p4 verify"は、関連するディポファイルに対して、各リビジョンのメタデータエントリをチェックします。UNIXサーバにおいて、ディポファイルの大文字/小文字がメタデータエントリと異なることを検出すると「ディポにない!(MISSING!)」と出力されます。使用方法の詳細につきましては、PERFORCE コマンドリファレンスをご参照ください。
ファイル名の大文字/小文字に関して問題をお持ちの方は、サポート(ss_support@toyo.co.jp)までご連絡ください。
経緯
Helix Coreの以前のリリース(97.2より前)においては、すべてのファイル名、パス名及びデータベースエントリに対して、サーバがUNIX上で動作していてもWindows上で動作していても、大文字/小文字の区別を行っていました。例えば、"//depot/main/foo.c"及び"//depot/MAIN/bar.c"は、まったく異なる2つのファイルとして取り扱っていました。しかし、Windows上のHelix Coreサーバに接続しているUNIX上のユーザがいる環境では、この仕様によって問題が発生します。サーバ上のファイルシステムでは大文字/小文字の意識がないため、UNIXユーザによってサブミットされたファイルの大文字/小文字を区別できないということです。(もし、Windows上で97.2より前のサーバを動作させている方は、サーバプログラムとデータベースのアップグレードをお勧め致します。サポート(ss_support@toyo.co.jp)までご連絡ください。)
リリース97.3において、UNIXサーバのみが名前の大文字/小文字を区別するようになりましたが、UNIX/Windowsの混在環境で開発を行う場合、大文字/小文字に関するいくつかの問題があります。
リリース2000.1において、Windows上のHelix Coreサーバでは、すべてのディポファイルが小文字で格納されるようになりました。この変更は、もしこの環境をUNIX上へ移行することを考えたとき、その移行をし易くします。つまり、WindowsからUNIXへの移行においては、大文字/小文字に関して何も意識する必要はありません。代わりに、異なるプラットフォーム間でHelix Coreサーバを移動したときには、"p4 verify"の実行が必須となり、これによって大文字/小文字に関する問題を検出することができます。
※Helix Coreサーバの移動に関しては、『Helix Coreサーバ管理者ガイド - Helix Coreサーバを新しいマシンに移動する』をご参照ください。