レジストリの作成

レジストリの使用については、「レジストリの使用」を参照してください

概要

レジストリは、ポートとそのバージョンのコレクションです。 独自のレジストリを作成する場合、レジストリの実装には、git レジストリとファイルシステム レジストリの 2 つの主要な選択肢があります。

Git レジストリは単純な Git リポジトリであり、Git リポジトリの通常のメカニズムを使用してパブリックまたはプライベートに共有できます。 たとえば、vcpkg リポジトリは git レジストリです。

ファイルシステム レジストリは、より多くのテスト環境として設計されています。 ファイル システム上に文字どおり存在することを考えると、共有する唯一の方法は共有ディレクトリを介することです。 ただし、ファイル システム レジストリは、git 以外のバージョン管理システムに保持されているレジストリを表す方法として役立ちます。これは、レジストリをディスクに取り込む何らかの方法があることを前提としています。

レジストリの種類のセットは、時間の経過と同時に拡大することが予想されます。お気に入りのパブリック バージョン管理システムに組み込まれているレジストリのサポートが必要な場合は、PR を開くことをお勧めします。

レジストリの基本的な構造は次のとおりです。

  • 履歴の特定の時点で "最新" と見なされるバージョンのセット ("ベースライン" と呼ばれます)。
  • すべてのポートのすべてのバージョンのセットと、レジストリでこれらの各ポートを検索する場所。

Git レジストリ

このドキュメントと共にフォローしているため、参照する作業例があると役に立つ場合があります。 1 つを記述し、ここに配置しました。

Northwind Traders: vcpkg レジストリ

すべての git レジストリにはファイルが必要です versions/baseline.json 。 このファイルには、特定のコミットでの "最新バージョン" のセットが含まれています。 フィールドのみを "default" 含む最上位オブジェクトとしてレイアウトされます。 このフィールドには、現在最新のバージョンへのオブジェクト マッピング ポート名が含まれている必要があります。

有効な baseline.json の例を次に示します。

{
  "default": {
    "kitten": {
      "baseline": "2.6.2",
      "port-version": 0
    },
    "port-b": {
      "baseline": "19.00",
      "port-version": 2
    }
  }
}

この versions ディレクトリには、レジストリに含まれるパッケージのバージョンに関するすべての情報と、それらのバージョンが格納されている場所が含まれます。 vcpkg に関する限り、レジストリの残りの部分はバッキング ストアとして機能するだけです。ディレクトリ内 versions のもののみが、vcpkg によってレジストリがどのように表示されるかを指示するために使用されます。

レジストリ内の各ポートは、バージョン ディレクトリ <first letter of port>-/<name of port>.jsonに存在する必要があります。つまり、ポートに関する kitten 情報は versions/k-/kitten.json. これは、フィールド "versions"が 1 つだけの最上位オブジェクトである必要があります。 このフィールドには、バージョン オブジェクトの配列が含まれている必要があります。

  • 問題のポートのバージョン。は、 vcpkg.json バージョン フィールドや "port-version".
  • Git "git-tree" ツリーであるフィールド。つまり、書き込 git rev-parse COMMIT-ID:path/to/portみ時に取得される内容です。

ただし、ファイルを含む CONTROL ポートのバージョン フィールドは次 "version-string"の値です。ただし、新しいレジストリでファイルを使用 CONTROL することはお勧めしません。

警告

レジストリの非常に重要な部分の 1 つは、バージョンを変更してはならないということです。 後の ref に更新すると、既存のバージョンが削除されたり変更されたりすることはありません。 レジストリを更新しても常に安全である必要があります。

1 つのバージョンを持つポートの有効なバージョン データベースの例を kitten 次に示します。

{
  "versions": [
    {
      "version": "2.6.2",
      "port-version": 0,
      "git-tree": "67d60699c271b7716279fdea5a5c6543929eb90e"
    }
  ]
}

一般に、ポート ディレクトリを配置する場所は重要ではありません。 ただし、vcpkg のイディオムは、組み込みの vcpkg レジストリの動作に従うものです。ポート kittenports/kitten.

警告

もう 1 つ注意すべき点は、レジストリを更新するときに、以前のすべてのバージョンにもアクセスできることです。 ユーザーはベースラインをコミット IDに設定するため、そのコミット IDは常に存在し、実際にフェッチされる HEAD コミットからアクセスできる必要があります。 つまり、HEAD コミットは、以前のすべての HEAD コミットの子である必要があります。

組み込みレジストリ

組み込みレジストリは、特別な Git レジストリとして扱われます。 組み込みレジストリは、リモート URL からフェッチする代わりに、vcpkg クローンのディレクトリを参照 $VCPKG_ROOT/.git します。 現在チェックアウト$VCPKG_ROOT/versionsされているディレクトリをバージョン管理情報のソースとして使用します。

新しいバージョンの追加

新しいバージョンのポートの作成には、いくつかの git トリッキーが関係しています。 最初に、いくつかの変更を加え、必要に応じて通常の "port-version" バージョン フィールドを更新し、次のようにテスト overlay-portsします。

vcpkg install kitten --overlay-ports=ports/kitten.

テストが完了したら、ディレクトリが git の purview の下にあることを確認する必要があります。 これを行うには、一時的なコミットを作成します。

> git add ports/kitten
> git commit -m 'temporary commit'

次に、ディレクトリの Git ツリー ID を取得します。

> git rev-parse HEAD:ports/kitten
73ad3c823ef701c37421b450a34271d6beaf7b07

その後、このバージョンをバージョン データベースに追加できます。 上部 versions/k-/kitten.jsonに追加できます (バージョン 2.6.3#0を追加している場合)。

{
  "versions": [
    {
      "version": "2.6.3",
      "port-version": 0,
      "git-tree": "73ad3c823ef701c37421b450a34271d6beaf7b07"
    },
    {
      "version": "2.6.2",
      "port-version": 0,
      "git-tree": "67d60699c271b7716279fdea5a5c6543929eb90e"
    }
  ]
}

次に、新しいバージョンで変更 versions/baseline.json することもできます。

{
  "default": {
    "kitten": {
      "baseline": "2.6.3",
      "port-version": 0
    },
    "port-b": {
      "baseline": "19.00",
      "port-version": 2
    }
  }
}

現在のコミットを修正します。

> git commit --amend

その後、離れて共有!

ファイルシステム レジストリ

このドキュメントと共にフォローしているため、参照する作業例があると役に立つ場合があります。 1 つを記述し、ここに配置しました。

ファイル システム レジストリの例。

すべてのファイルシステム レジストリにはファイルが必要です versions/baseline.json 。 このファイルには、特定のバージョンのレジストリの "最新バージョン" のセットが含まれています。 これは、バージョン名から "ベースライン オブジェクト" へのマップを含む最上位オブジェクトとしてレイアウトされます。このオブジェクトは、そのバージョンのレジストリの "最新" と見なされるバージョンにポート名をマップします。

ファイル システム レジストリは、バージョン管理スキームを決定する必要があります。 refs の暗黙的なバージョン管理スキームを持つ git レジストリとは異なり、ファイルシステム レジストリはここでバージョン管理システムに依存できません。 可能なオプションの 1 つは、毎日のリリースを行い、"バージョン" を日付にすることです。

警告

発行後にベースラインを変更することはできません。 バージョンを変更または更新する場合は、ファイルに新しいベースラインを作成する baseline.json 必要があります。

バージョンの日付を決定したレジストリの有効な baseline.json例を次に示します。

{
  "2021-04-16": {
    "kitten": {
      "baseline": "2.6.2",
      "port-version": 0
    },
    "port-b": {
      "baseline": "19.00",
      "port-version": 2
    }
  },
  "2021-04-15": {
    "kitten": {
      "baseline": "2.6.2",
      "port-version": 0
    },
    "port-b": {
      "baseline": "19.00",
      "port-version": 1
    }
  }
}

この versions ディレクトリには、レジストリに含まれるパッケージのバージョンに関するすべての情報と、それらのバージョンが格納されている場所が含まれます。 vcpkg に関する限り、レジストリの残りの部分はバッキング ストアとして機能するだけです。ディレクトリ内 versions のもののみが、vcpkg によってレジストリがどのように表示されるかを指示するために使用されます。

レジストリ内の各ポートは、バージョン ディレクトリ <first letter of port>-/<name of port>.jsonに存在する必要があります。つまり、ポートに関する kitten 情報は versions/k-/kitten.json. これは、フィールド "versions"が 1 つだけの最上位オブジェクトである必要があります。 このフィールドには、バージョン オブジェクトの配列が含まれている必要があります。

  • 問題のポートのバージョン。は、 vcpkg.json バージョン フィールドや "port-version".
  • "path"フィールド: レジストリのベース (つまり、配置されているディレクトリ) をルートとする相対ディレクトリversions。 それは次のようになります "$/path/to/port/dir"

ただし、ファイルを含む CONTROL ポートのバージョン フィールドは次 "version-string"の値です。ただし、新しいレジストリでファイルを使用 CONTROL することはお勧めしません。

一般に、ポート ディレクトリを配置する場所は重要ではありません。 ただし、vcpkg のイディオムは、組み込みの vcpkg レジストリの動作 kitten に多少近い程度に従う必要があります。バージョン x.y.z のポートは、 ports/kitten/x.y.z必要に応じてポート バージョンを追加する必要があります (ただし # 、ファイル名に使用するのに適した文字ではないため、おそらく使用 _します)。

警告

レジストリの非常に重要な部分の 1 つは、バージョンを変更してはならないということです。 既存のバージョンを削除したり変更したりしないでください。 レジストリに対する変更は、ダウンストリーム ユーザーに対する動作を変更しないでください。

1 つのバージョンを持つポートの有効なバージョン データベースの例を kitten 次に示します。

{
  "versions": [
    {
      "version": "2.6.2",
      "port-version": 0,
      "path": "$/ports/kitten/2.6.2_0"
    }
  ]
}

新しいバージョンを追加する

Git レジストリとは異なり、ファイルシステム レジストリに新しいバージョンを追加するには、多くのコピーが必要です。 最初に、ポートの最新バージョンを新しいバージョンのディレクトリにコピーし、必要に応じてバージョンと "port-version" フィールドを更新してから、次のようにテスト overlay-portsします。

vcpkg install kitten --overlay-ports=ports/kitten/new-version.

テストが完了したら、次の新しいバージョンを上部に versions/k-/kitten.json追加できます。

{
  "versions": [
    {
      "version": "2.6.3",
      "port-version": 0,
      "path": "$/ports/kitten/2.6.3_0"
    },
    {
      "version": "2.6.2",
      "port-version": 0,
      "path": "$/ports/kitten/2.6.2_0"
    }
  ]
}

次に、新しいバージョンでも変更する必要があります versions/baseline.json (既存のベースラインは変更しないでください)。

{
  "2021-04-17": {
    "kitten": {
      "baseline": "2.6.3",
      "port-version": 0
    },
    "port-b": {
      "baseline": "19.00",
      "port-version": 2
    }
  },
  "2021-04-16": {
    "kitten": {
      "baseline": "2.6.2",
      "port-version": 0
    },
    "port-b": {
      "baseline": "19.00",
      "port-version": 2
    }
  },
  "2021-04-15": {
    "kitten": {
      "baseline": "2.6.2",
      "port-version": 0
    },
    "port-b": {
      "baseline": "19.00",
      "port-version": 1
    }
  }
}

これで完了です。