レジストリ リファレンス
概要
この記事では、各種類のレジストリの実装の詳細について説明します。 具体的には、このファイルは、各種類のレジストリに推奨されるレイアウトと、それぞれの バージョンのデータベース期待される内容に関係しています。
Git レジストリ
Git レジストリのベースライン ファイル レイアウト
最上位レベルのフィールド
baseine.json
ファイル内の最上位のオブジェクトはディクショナリであり、このディクショナリ内の各キーは、ベースライン という名前のです。 Git レジストリの実装の詳細のため、"default" という名前の 名前のベースライン が存在し、レジストリ内のすべてのポートのベースライン バージョンへのマッピングが含まれている必要があります。
名前 | 種類 | 形容 |
---|---|---|
default |
BaselineObject | Git レジストリに必要な既定のベースライン。 |
名前付きベースライン | BaselineObject | 追加のベースライン。 フィールド名はベースライン名に対応します。 |
BaselineObject
ベースライン オブジェクトはディクショナリであり、各キーはレジストリ内のポート名に対応し、その値はポートの最新バージョンです。
名前 | 種類 | 形容 |
---|---|---|
ポート名 | BaselineVersionObject | ポート名の最新バージョンへのマッピング |
BaselineVersionObject
名前 | 種類 | 形容 |
---|---|---|
baseline |
糸 | レジストリで使用可能なポートの最新バージョンに対応する文字列。 |
port-version |
整数 | レジストリ内のポートの最新のポート バージョンに対応する整数 |
Git レジストリ内の baseline.json
ファイルの例
バージョン 1.0.0#1
の foo
という名前の単一のポートを含むレジストリでは、baseline.json
ファイルの内容は次のようになります。
{
"default": {
"foo": {
"baseline": "1.0.0",
"port-version": 1
}
}
}
Git レジストリのバージョン ファイル レイアウト
versions
ディレクトリには、レジストリに含まれているパッケージのバージョンに関するすべての情報と、リポジトリの履歴からそれらのバージョンを取得するメソッドが含まれています。
最上位レベルのフィールド
名前 | 種類 | 形容 |
---|---|---|
versions |
VersionObject[] | バージョン オブジェクトの配列。 レジストリの履歴に含まれるポートの各バージョンのエントリが含まれています。 |
VersionObject
名前 | 種類 | 形容 |
---|---|---|
git-tree |
糸 | ポートの内容を取得するために使用される Git ツリー SHA |
version version-semver version-date version-string |
糸 | アップストリーム バージョン情報 |
ポート バージョンの を する | 整数 | ポート ファイルのリビジョン |
Git レジストリ バージョン ファイルの例
{
"versions": [
{
"git-tree": "963060040c3ca463d17136e39c7317efb15eb6a5",
"version": "1.2.0",
"port-version": 0
},
{
"git-tree": "548c90710d59c174aa9ab10a24deb69f1d75ff8f",
"version": "1.1.0",
"port-version": 0
},
{
"git-tree": "67d60699c271b7716279fdea5a5c6543929eb90e",
"version": "1.0.0",
"port-version": 0
}
]
}
git-tree
SHA の取得
vcpkg は Git の機能を使用して、コミット履歴に含まれるポートの特定のバージョンを取得します。 使用されるメソッドは、ポートのバージョン ファイルで指定されているリポジトリから git-tree
オブジェクトを取得することです。
Git レジストリ内の各ポート ディレクトリには、一意の SHA が関連付けられています (バージョン ファイルでは git-tree
と呼ばれます)。 SHA はディレクトリの内容を使用して計算されます。ディレクトリを変更するリポジトリに変更がコミットされるたびに、その SHA が再計算されます。
Git を使用すると、特定の SHA がわかっている場合に、その履歴内の任意の時点で特定のディレクトリの内容を取得できます。 この機能を利用することで、vcpkg はそれぞれの SHA (git-tree
) を使用して特定のポート バージョンのインデックスを作成できます。
特定のリビジョンでポート ディレクトリの SHA を取得するには、次の Git コマンドを使用できます。
git -C <path/to/ports> ls-tree --format='%(objectname)' <commit sha> -- <portname>
例:
git -C %VCPKG_ROOT%/ports ls-tree --format='%(objectname)' HEAD -- curl
6ef1763f3cbe570d6378632c9b5793479c37fb07
このコマンドは、現在のリビジョン (HEAD
) にある curl
ポートを含むディレクトリの SHA を返します。
コマンド git show <git-tree>
を使用して、git-tree
の内容を表示できます。
git show 6ef1763f3cbe570d6378632c9b5793479c37fb07
tree 6ef1763f3cbe570d6378632c9b5793479c37fb07
0005_remove_imp_suffix.patch
0020-fix-pc-file.patch
0022-deduplicate-libs.patch
cmake-config.patch
cmake-project-include.cmake
dependencies.patch
export-components.patch
portfile.cmake
redact-input-vars.diff
usage
vcpkg-cmake-wrapper.cmake
vcpkg.json
または、git show <git-tree>:<file>
を持つ特定のファイルの内容:
git show 6ef1763f3cbe570d6378632c9b5793479c37fb07:usage
curl is compatible with built-in CMake targets:
find_package(CURL REQUIRED)
target_link_libraries(main PRIVATE CURL::libcurl)
手動プロセスでこれらの Git コマンドを使用してデータベース ファイルを最新の状態に保つのは困難な作業です。 そのため、x-add-version
コマンドを使用することをお勧めします。このコマンドは、リポジトリが推奨される レジストリ構造に従っている限り、プロセスを自動化します。 Git レジストリでポートを発行する方法の例については、「チュートリアル: Git を使用してプライベート vcpkg レジストリにパッケージを発行する」を参照してください。
ファイルシステム レジストリ
ファイルシステム レジストリのベースライン ファイル レイアウト
最上位レベルのフィールド
baseine.json
ファイル内の最上位のオブジェクトはディクショナリであり、このディクショナリ内の各キーは、ベースライン という名前のです。 ベースラインには、レジストリ内のすべてのポートのベースライン バージョンへのマッピングが含まれている必要があります。
名前 | 種類 | 形容 |
---|---|---|
名前付きベースライン | BaselineObject | 追加のベースライン。 フィールド名はベースライン名に対応します。 |
BaselineObject
ベースライン オブジェクトはディクショナリであり、各キーはレジストリ内のポート名に対応し、その値はポートの最新バージョンです。
名前 | 種類 | 形容 |
---|---|---|
ポート名 | BaselineVersionObject | ポート名の最新バージョンへのマッピング |
BaselineVersionObject
名前 | 種類 | 形容 |
---|---|---|
baseline |
糸 | レジストリで使用可能なポートの最新バージョンに対応する文字列。 |
port-version |
整数 | レジストリ内のポートの最新のポート バージョンに対応する整数 |
ファイルシステム レジストリ内のベースライン ファイルのレイアウトは、Git レジストリの場合と同じです。 唯一の違いは、ファイルシステムが default
ベースラインを必要としないということです。
Git レジストリ内の baseline.json
ファイルの例
{
"2024-12-01": {
"foo": {
"baseline": "1.0.0",
"port-version": 1
}
}
}
Git レジストリのバージョン ファイル レイアウト
versions
ディレクトリには、レジストリに含まれているパッケージのバージョンに関するすべての情報と、ファイル システムの場所からそれらのバージョンを取得するメソッドが含まれています。
トップレベル フィールド を する
名前 | 種類 | 形容 |
---|---|---|
versions |
VersionObject[] | バージョン オブジェクトの配列。 レジストリ内のポートの各バージョンのエントリが含まれています。 |
VersionObject
名前 | 種類 | 形容 |
---|---|---|
path |
糸 | 対応するバージョンのポート ファイルがあるファイル システムの場所 |
version version-semver version-date version-string |
糸 | アップストリーム バージョン情報 |
ポート バージョンの を する | 整数 | ポート ファイルのリビジョン |
レジストリの path
を指定する場合は、$
文字を使用してレジストリのルートを参照できます。 それ以外の場合は、代わりに絶対パスを使用できます。
ファイルシステム レジストリ バージョン ファイルの例
{
"versions": [
{
"path": "$/ports/foo/1.2.0",
"version": "1.2.0",
"port-version": 0
},
{
"path": "$/ports/foo/1.1.0",
"version": "1.1.0",
"port-version": 0
},
{
"path": "$/ports/foo/1.0.0",
"version": "1.0.0",
"port-version": 0
}
]
}
次の手順
次に試すタスクを次に示します。
- レジストリの概念に関するドキュメント を読む
- 独自の Git ベースのレジストリ を作成する
- カスタム レジストリ からパッケージをインストールする
vcpkg