Delen via


Naslaginformatie over registers

Overzicht

In dit artikel worden de implementatiedetails voor elk type register beschreven. Dit bestand heeft met name betrekking op de aanbevolen indeling voor elk soort register en de verwachte inhoud van hun respectieve versiesdatabase.

Notitie

Dit artikel bevat informatie over het implementeren van aangepaste registers. Zie het artikel Using registries voor meer informatie over het gebruik van aangepaste registers in uw project.

Git-registers

Indeling van basislijnbestand in Git-registers

Velden op het hoogste niveau

Het object op het hoogste niveau in een baseine.json bestand is een woordenlijst, elke sleutel in deze woordenlijst is een met de naam basislijn. Vanwege implementatiedetails van Git-registers is het vereist dat een met de naam basislijn met de naam 'standaard' bestaat en dat deze een toewijzing bevat van alle poorten in het register aan hun basislijnversie.

Naam Type Beschrijving
default BaselineObject De standaardbasislijn, vereist voor Git-registers.
Benoemde basislijn BaselineObject Aanvullende basislijnen. De veldnaam komt overeen met de basislijnnaam.

BaselineObject

Het basislijnobject is een woordenlijst, waarbij elke sleutel overeenkomt met een poortnaam in het register en de waarde die de meest recente versie van de poort is.

Naam Type Beschrijving
Poortnaam BaselineVersionObject Een toewijzing van een poortnaam aan de nieuwste versie

BaselineVersionObject

Naam Type Beschrijving
baseline snaar Een tekenreeks die overeenkomt met de meest recente beschikbare versie van de poort in het register.
port-version geheel getal Een geheel getal dat overeenkomt met de nieuwste poortversie van de poort in het register

Voorbeeld van een baseline.json-bestand in een Git-register

In een register met één poort met de naam foo versie 1.0.0#1moet de inhoud van het baseline.json bestand zijn:

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

Indeling van versiebestand in Git-registers

De versions map bevat alle informatie over welke versies van pakketten zich in het register bevinden, samen met de methode om deze versies op te halen uit de geschiedenis van de opslagplaats.

Velden op het hoogste niveau

Naam Type Beschrijving
versions VersionObject[] Een matrix met versieobjecten. Bevat een vermelding voor elke versie van de poort in de geschiedenis van het register.

VersionObject

Naam Type Beschrijving
git-tree snaar Een Git Tree SHA die wordt gebruikt om de inhoud van de poort op te halen
version
version-semver
version-date
version-string
snaar Upstream-versiegegevens
poortversie geheel getal Revisie van poortbestanden

Voorbeeld van een Git-registerversiebestand

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

Een git-tree SHA verkrijgen

vcpkg maakt gebruik van de mogelijkheden van Git om specifieke versies van een poort op te halen die zijn opgenomen in de doorvoergeschiedenis. De methode die wordt gebruikt, is het ophalen van het git-tree object uit de opslagplaats, zoals opgegeven in het versiebestand van een poort.

Aan elke poortmap in een Git-register is een unieke SHA gekoppeld (aangeduid als git-tree in de versiesbestanden). De SHA wordt berekend met behulp van de inhoud van de map; telkens wanneer een wijziging wordt doorgevoerd in de opslagplaats die een map wijzigt, wordt de SHA opnieuw berekend.

Met Git kunt u de inhoud van een bepaalde map op elk gewenst moment in de geschiedenis ophalen, mits u de specifieke SHA kent. Door gebruik te maken van deze functie kan vcpkg specifieke poortversies indexeren met hun respectieve SHA (git-tree).

Voor het verkrijgen van de SHA van een poortmap bij een bepaalde revisie kan de volgende Git-opdracht worden gebruikt:

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

Voorbeeld:

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

De opdracht retourneert de SHA van de map met de curl poort bij de huidige revisie (HEAD).

Het is mogelijk om de inhoud van de git-tree weer te geven met behulp van de opdracht 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

Of de inhoud van een specifiek bestand met 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)

Het kan lastig zijn om de databasebestanden up-to-date te houden met behulp van deze Git-opdrachten in een handmatig proces. Daarom raden we u aan de x-add-version opdrachtte gebruiken, waarmee het proces wordt geautomatiseerd zolang de opslagplaats de aanbevolen registerstructuurvolgt. Zie de Zelfstudie: Pakketten publiceren naar een privé-vcpkg-register met behulp van Git artikel voor een voorbeeld van het publiceren van een poort in een Git-register.

Bestandssysteemregisters

Indeling van basislijnbestand in bestandssysteemregisters

Velden op het hoogste niveau

Het object op het hoogste niveau in een baseine.json bestand is een woordenlijst, elke sleutel in deze woordenlijst is een met de naam basislijn. Basislijnen moeten toewijzingen bevatten van alle poorten in het register aan hun basislijnversie.

Naam Type Beschrijving
Benoemde basislijn BaselineObject Aanvullende basislijnen. De veldnaam komt overeen met de basislijnnaam.

BaselineObject

Het basislijnobject is een woordenlijst, waarbij elke sleutel overeenkomt met een poortnaam in het register en de waarde die de meest recente versie van de poort is.

Naam Type Beschrijving
Poortnaam BaselineVersionObject Een toewijzing van een poortnaam aan de nieuwste versie

BaselineVersionObject

Naam Type Beschrijving
baseline snaar Een tekenreeks die overeenkomt met de meest recente beschikbare versie van de poort in het register.
port-version geheel getal Een geheel getal dat overeenkomt met de nieuwste poortversie van de poort in het register

De indeling van het basislijnbestand in een bestandssysteemregister is hetzelfde als voor Git-registers. Het enige verschil is dat bestandssysteems geen default basislijn nodig hebben.

Voorbeeld van een baseline.json-bestand in een Git-register

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

Indeling van versiebestand in Git-registers

De versions map bevat alle informatie over welke versies van pakketten zich in het register bevinden, samen met de methode voor het ophalen van deze versies van een bestandssysteemlocatie.

velden op het hoogste niveau

Naam Type Beschrijving
versions VersionObject[] Een matrix met versieobjecten. Bevat een vermelding voor elke versie van de poort in het register.

VersionObject-

Naam Type Beschrijving
path snaar De locatie van het bestandssysteem waar de poortbestanden voor de bijbehorende versie zich bevinden
version
version-semver
version-date
version-string
snaar Upstream-versiegegevens
poortversie geheel getal Revisie van poortbestanden

Wanneer u de path van een register opgeeft, kan het $ teken worden gebruikt om te verwijzen naar de hoofdmap van het register. Anders kunnen absolute paden worden gebruikt.

Voorbeeld van een bestandssysteemregisterversiebestand

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

Volgende stappen

Hier volgen enkele taken om het volgende te proberen: