<compatible> タグは、バージョンタグ <recommended> を含む <package> の依存性とともに使用するように設計されています。 例えば pear.example.com/Bar バージョン 1.3.0 の例を考えてみます。
<package> <name>Foo</name> <channel>pear.example.com</channel> <min>1.0.0</min> <recommended>1.5.2</recommended> </package> |
上の依存性を日本語に翻訳すると、次のようになります。 "パッケージ pear.example.com/Foo を使用します。しかし、バージョン 1.0.0 か、それより新しいもののみです。もし pear.example.com/Foo が インストールされていなければ、バージョン 1.5.2 をインストールします。 もしバージョン 1.5.2 以外の pear.example.com/Foo がインストールされていれば、 --force を指定されていない限りインストールは失敗します。 あるいは pear.example.com/Foo は私と互換性があります。"
最後の文 "……あるいは pear.example.com/Foo は私と互換性があります。" は、<compatible> タグによって制御されます。パッケージ Foo バージョン 1.5.3 の package.xml に以下のような <compatible> タグが 含まれていた場合、
<compatible> <name>Bar</name> <channel>pear.example.com</channel> <min>1.2.0</min> <max>1.3.0</max> <exclude>1.2.9</exclude> </compatible> |
インストーラは「pear.example.com/Foo バージョン 1.5.3 は pear.example.com/Bar バージョン 1.2.0 から 1.3.0 までと互換性がある。 ただし 1.2.9 とは互換性がない」と解釈します。
非常に重要な注意点は、<compatible> に記述するのは テスト済みの 既存の バージョンのみにしておくと いうことです。将来 pear.example.com/Bar の新しいバージョンが出た際には、 単純に <recommended> タグを更新して対応します。
<compatible> には 3 つのバージョン管理タグを含めることが可能です。 <min> および <max> は必須で、テスト済みの互換性がある バージョンの範囲を定義します。 また <exclude> は、範囲内で例外とするバージョンを指定します。 上の例では、1.3.0 および 1.2.0 がそれぞれ指定可能な最大バージョン および最小バージョンとなります。package.xml 内で指定できる <compatible> タグの数には制限がありません。