Informations de référence sur les registres

Vue d’ensemble

Cet article décrit les détails de l’implémentation pour chaque type de registre. Plus précisément, ce fichier concerne la disposition recommandée pour chaque type de registre et le contenu attendu de leur base de données versions respectives.

Note

Cet article contient des informations sur la façon d’implémenter des registres personnalisés. Pour plus d’informations sur la consommation de registres personnalisés dans votre projet, consultez l’article Utilisation de registres.

Registres Git

Disposition des fichiers de référence dans les registres Git

Champs de niveau supérieur

L’objet de niveau supérieur d’un fichier baseine.json est un dictionnaire, chaque clé de ce dictionnaire est une nommée ligne de base. En raison des détails d’implémentation des registres Git, il est nécessaire qu’un nommé base de référence avec le nom « par défaut » existe et qu’il contient un mappage de tous les ports du Registre à leur version de base de référence.

Nom Type Description
default BaselineObject Base de référence par défaut requise pour les registres Git.
Base de référence nommée BaselineObject Bases de référence supplémentaires. Le nom du champ correspond au nom de la base de référence.

BaselineObject

L’objet de base est un dictionnaire, avec chaque clé correspondant à un nom de port dans le Registre et sa valeur étant la dernière version du port.

Nom Type Description
Nom du port BaselineVersionObject Mappage d’un nom de port à sa dernière version

BaselineVersionObject

Nom Type Description
baseline corde Chaîne correspondant à la dernière version disponible du port dans le Registre.
port-version entier Entier correspondant à la dernière version de port du port dans le Registre

Exemple de fichier baseline.json dans un registre Git

Dans un registre contenant un seul port nommé foo à la version 1.0.0#1, le contenu du fichier baseline.json doit être :

{
  "default": {
    "foo": { 
      "baseline": "1.0.0", 
      "port-version": 1
    }
  }
}

Disposition des fichiers de version dans les registres Git

Le répertoire versions contient toutes les informations sur les versions de packages contenues dans le Registre, ainsi que la méthode permettant de récupérer ces versions à partir de l’historique du référentiel.

Champs de niveau supérieur

Nom Type Description
versions VersionObject[] Tableau d’objets de version. Contient une entrée pour chaque version du port dans l’historique du Registre.

VersionObject

Nom Type Description
git-tree corde Sha d’arborescence Git utilisée pour récupérer le contenu du port
version
version-semver
version-date
version-string
corde Informations sur la version en amont
de version de port entier Révision des fichiers de port

Exemple de fichier de versions de Registre 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
    }
  ]
}

Obtention d’une git-tree SHA

vcpkg utilise les fonctionnalités de Git pour récupérer des versions spécifiques d’un port contenu dans son historique de validation. La méthode utilisée consiste à récupérer l’objet git-tree à partir du référentiel, comme spécifié dans le fichier de versions d’un port.

Chaque répertoire de ports d’un registre Git a une SHA unique associée à celle-ci (appelée git-tree dans les fichiers de versions). Le sha est calculé à l’aide du contenu du répertoire ; chaque fois qu’une modification est validée dans le référentiel qui modifie un répertoire, sa sha est recalculée.

Git vous permet de récupérer le contenu d’un répertoire donné à tout moment de son historique, à condition que vous connaissiez leur SHA spécifique. En utilisant cette fonctionnalité, vcpkg peut indexer des versions de port spécifiques avec leur SHA (git-tree).

Pour obtenir la sha d’un répertoire de port à n’importe quelle révision donnée, la commande Git suivante peut être utilisée :

git -C <path/to/ports> ls-tree --format='%(objectname)' <commit sha> -- <portname>

Exemple:

git -C %VCPKG_ROOT%/ports ls-tree --format='%(objectname)' HEAD -- curl
6ef1763f3cbe570d6378632c9b5793479c37fb07

La commande retourne la sha du répertoire contenant le port curl à la révision actuelle (HEAD).

Il est possible d’afficher le contenu du git-tree à l’aide de la commande git show <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

Ou le contenu d’un fichier spécifique avec 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)

La gestion des fichiers de base de données à jour à l’aide de ces commandes Git dans un processus manuel peut être une tâche difficile. Pour cette raison, nous vous recommandons d’utiliser la commande x-add-version, qui automatise le processus tant que le référentiel suit la structure de Registre recommandée. Consultez le tutoriel : Publier des packages dans un registre vcpkg privé à l’aide de Git article pour obtenir un exemple de publication d’un port dans un registre Git.

Registres de système de fichiers

Disposition des fichiers de référence dans les registres de système de fichiers

Champs de niveau supérieur

L’objet de niveau supérieur d’un fichier baseine.json est un dictionnaire, chaque clé de ce dictionnaire est une nommée ligne de base. Les bases de référence doivent contenir des mappages de tous les ports du Registre à leur version de référence.

Nom Type Description
Base de référence nommée BaselineObject Bases de référence supplémentaires. Le nom du champ correspond au nom de la base de référence.

BaselineObject

L’objet de base est un dictionnaire, avec chaque clé correspondant à un nom de port dans le Registre et sa valeur étant la dernière version du port.

Nom Type Description
Nom du port BaselineVersionObject Mappage d’un nom de port à sa dernière version

BaselineVersionObject

Nom Type Description
baseline corde Chaîne correspondant à la dernière version disponible du port dans le Registre.
port-version entier Entier correspondant à la dernière version de port du port dans le Registre

La disposition du fichier de base dans un registre de système de fichiers est la même que pour registres Git. La seule différence étant que les systèmes de fichiers ne nécessitent pas de base de default.

Exemple de fichier baseline.json dans un registre Git

{
  "2024-12-01": {
    "foo": {
      "baseline": "1.0.0",
      "port-version": 1
    }
  }
}

Disposition des fichiers de version dans les registres Git

Le répertoire versions contient toutes les informations sur les versions de packages contenues dans le Registre, ainsi que la méthode permettant de récupérer ces versions à partir d’un emplacement de système de fichiers.

champs de niveau supérieur

Nom Type Description
versions VersionObject[] Tableau d’objets de version. Contient une entrée pour chaque version du port dans le Registre.

VersionObject

Nom Type Description
path corde Emplacement du système de fichiers où se trouvent les fichiers de port de la version correspondante
version
version-semver
version-date
version-string
corde Informations sur la version en amont
de version de port entier Révision des fichiers de port

Lorsque vous spécifiez la path d’un registre, le caractère $ peut être utilisé pour référencer la racine du Registre. Sinon, les chemins absolus peuvent être utilisés à la place.

Exemple de fichier de version du registre du système de fichiers

{
  "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
    }
  ]
}

Étapes suivantes

Voici quelques tâches à effectuer à l’étape suivante :