次の方法で共有


レジストリ リファレンス

概要

この記事では、各種類のレジストリの実装の詳細について説明します。 具体的には、このファイルは、各種類のレジストリに推奨されるレイアウトと、それぞれの バージョンのデータベース期待される内容に関係しています。

手記

この記事では、カスタム レジストリを実装する方法について説明します。 プロジェクトでカスタム レジストリを使用する方法については、レジストリの使用に関する 記事を参照してください。

Git レジストリ

Git レジストリのベースライン ファイル レイアウト

最上位レベルのフィールド

baseine.json ファイル内の最上位のオブジェクトはディクショナリであり、このディクショナリ内の各キーは、ベースライン という名前のです。 Git レジストリの実装の詳細のため、"default" という名前の 名前のベースライン が存在し、レジストリ内のすべてのポートのベースライン バージョンへのマッピングが含まれている必要があります。

名前 種類 形容
default BaselineObject Git レジストリに必要な既定のベースライン。
名前付きベースライン BaselineObject 追加のベースライン。 フィールド名はベースライン名に対応します。

BaselineObject

ベースライン オブジェクトはディクショナリであり、各キーはレジストリ内のポート名に対応し、その値はポートの最新バージョンです。

名前 種類 形容
ポート名 BaselineVersionObject ポート名の最新バージョンへのマッピング

BaselineVersionObject

名前 種類 形容
baseline レジストリで使用可能なポートの最新バージョンに対応する文字列。
port-version 整数 レジストリ内のポートの最新のポート バージョンに対応する整数

Git レジストリ内の baseline.json ファイルの例

バージョン 1.0.0#1foo という名前の単一のポートを含むレジストリでは、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
    }
  ]
}

次の手順

次に試すタスクを次に示します。