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#1
moet 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: