Referenz zu Registrierungen
Übersicht
In diesem Artikel werden die Implementierungsdetails für jede Art von Registrierung beschrieben. Insbesondere betrifft diese Datei das empfohlene Layout für jede Art von Registrierung und den erwarteten Inhalt ihrer jeweiligen Versionsdatenbank.
Anmerkung
Dieser Artikel enthält Informationen zum Implementieren benutzerdefinierter Registrierungen. Informationen zum Verbrauch von benutzerdefinierten Registrierungen in Ihrem Projekt finden Sie im Artikel Verwenden von Registrierungen Artikel.
Git-Registrierungen
Layout der Basisdatei in Git-Registrierungen
Felder auf oberster Ebene
Das Objekt auf oberster Ebene in einer baseine.json
-Datei ist ein Wörterbuch, jeder Schlüssel in diesem Wörterbuch ist ein benannte Basisplan. Aufgrund von Implementierungsdetails von Git-Registrierungen ist es erforderlich, dass ein benannte Baseline- mit dem Namen "default" vorhanden ist und dass es eine Zuordnung aller Ports in der Registrierung zu ihrer Basisversion enthält.
Name | Art | Beschreibung |
---|---|---|
default |
BaselineObject | Der Standardbasisplan, der für Git-Registrierungen erforderlich ist. |
Benannter Basisplan | BaselineObject | Zusätzliche Basispläne. Der Feldname entspricht dem Basisplannamen. |
BaselineObject
Das Basisplanobjekt ist ein Wörterbuch, wobei jeder Schlüssel einem Portnamen in der Registrierung entspricht und sein Wert die neueste Version des Ports ist.
Name | Art | Beschreibung |
---|---|---|
Portname | BaselineVersionObject | Zuordnung eines Portnamens zu seiner neuesten Version |
BaselineVersionObject
Name | Art | Beschreibung |
---|---|---|
baseline |
Schnur | Eine Zeichenfolge, die der neuesten verfügbaren Version des Ports in der Registrierung entspricht. |
port-version |
ganze Zahl | Eine ganze Zahl, die der neuesten Portversion des Ports in der Registrierung entspricht |
Beispiel für eine baseline.json
-Datei in einer Git-Registrierung
In einer Registrierung, die einen einzelnen Port mit dem Namen foo
bei Version 1.0.0#1
enthält, sollte der baseline.json
Dateiinhalt folgendes sein:
{
"default": {
"foo": {
"baseline": "1.0.0",
"port-version": 1
}
}
}
Versionsdateilayout in Git-Registrierungen
Das verzeichnis versions
enthält alle Informationen darüber, welche Versionen von Paketen in der Registrierung enthalten sind, sowie die Methode zum Abrufen dieser Versionen aus dem Repositoryverlauf.
Felder auf oberster Ebene
Name | Art | Beschreibung |
---|---|---|
versions |
VersionObject[] | Ein Array von Versionsobjekten. Enthält einen Eintrag für jede Version des Ports im Verlauf der Registrierung. |
VersionObject
Name | Art | Beschreibung |
---|---|---|
git-tree |
Schnur | Ein Git-Struktur-SHA zum Abrufen des Portinhalts |
version version-semver version-date version-string |
Schnur | Informationen zur Upstreamversion |
port-version | ganze Zahl | Überarbeitung von Portdateien |
Beispiel für eine Git-Registrierungsversionsdatei
{
"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
}
]
}
Abrufen eines git-tree
SHA
vcpkg verwendet git-Funktionen, um bestimmte Versionen eines Ports abzurufen, die im Commitverlauf enthalten sind. Die verwendete Methode besteht darin, das git-tree
-Objekt aus dem Repository abzurufen, wie in der Versionsdatei eines Ports angegeben.
Jedes Portverzeichnis in einer Git-Registrierung weist einen eindeutigen SHA-Code auf (der in den Versionsdateien als git-tree
bezeichnet wird). Die SHA wird mit dem Inhalt des Verzeichnisses berechnet; jedes Mal, wenn eine Änderung an das Repository, das ein Verzeichnis ändert, geändert wird, wird dessen SHA neu berechnet.
Git ermöglicht es Ihnen, den Inhalt eines bestimmten Verzeichnisses an einem beliebigen Punkt in seinem Verlauf abzurufen, sofern Sie deren spezifische SHA kennen. Durch die Verwendung dieses Features kann vcpkg bestimmte Portversionen mit ihrem jeweiligen SHA (git-tree
) indizieren.
Um die SHA eines Portverzeichnisses bei jeder Überarbeitung zu erhalten, kann der folgende Git-Befehl verwendet werden:
git -C <path/to/ports> ls-tree --format='%(objectname)' <commit sha> -- <portname>
Beispiel:
git -C %VCPKG_ROOT%/ports ls-tree --format='%(objectname)' HEAD -- curl
6ef1763f3cbe570d6378632c9b5793479c37fb07
Der Befehl gibt die SHA des Verzeichnisses zurück, das den curl
Port an der aktuellen Revision (HEAD
) enthält.
Es ist möglich, den Inhalt der git-tree
mithilfe des Befehls git show <git-tree>
anzuzeigen:
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
Oder der Inhalt einer bestimmten Datei mit 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)
Das Speichern der Datenbankdateien auf dem neuesten Stand mithilfe dieser Git-Befehle in einem manuellen Prozess kann eine schwierige Aufgabe sein. Aus diesem Grund empfehlen wir die Verwendung des x-add-version
Befehls, der den Prozess automatisiert, solange das Repository der empfohlenen Registrierungsstrukturfolgt. Ein Beispiel zum Veröffentlichen eines Ports in einer Git-Registrierung finden Sie im Lernprogramm: Veröffentlichen von Paketen in einer privaten vcpkg-Registrierung mithilfe von Git Artikel.
Dateisystemregistrierungen
Baseline file layout in filesystem registries
Felder auf oberster Ebene
Das Objekt auf oberster Ebene in einer baseine.json
-Datei ist ein Wörterbuch, jeder Schlüssel in diesem Wörterbuch ist ein benannte Basisplan. Basispläne sollten Zuordnungen aller Ports in der Registrierung zu ihrer Basisversion enthalten.
Name | Art | Beschreibung |
---|---|---|
Benannter Basisplan | BaselineObject | Zusätzliche Basispläne. Der Feldname entspricht dem Basisplannamen. |
BaselineObject
Das Basisplanobjekt ist ein Wörterbuch, wobei jeder Schlüssel einem Portnamen in der Registrierung entspricht und sein Wert die neueste Version des Ports ist.
Name | Art | Beschreibung |
---|---|---|
Portname | BaselineVersionObject | Zuordnung eines Portnamens zu seiner neuesten Version |
BaselineVersionObject
Name | Art | Beschreibung |
---|---|---|
baseline |
Schnur | Eine Zeichenfolge, die der neuesten verfügbaren Version des Ports in der Registrierung entspricht. |
port-version |
ganze Zahl | Eine ganze Zahl, die der neuesten Portversion des Ports in der Registrierung entspricht |
Das Layout der Basisplandatei in einer Dateisystemregistrierung ist identisch mit Git-Registrierungen. Der einzige Unterschied darin, dass Dateisysteme keinen default
Basisplan erfordern.
Beispiel für eine baseline.json
-Datei in einer Git-Registrierung
{
"2024-12-01": {
"foo": {
"baseline": "1.0.0",
"port-version": 1
}
}
}
Versionsdateilayout in Git-Registrierungen
Das verzeichnis versions
enthält alle Informationen darüber, welche Versionen von Paketen in der Registrierung enthalten sind, sowie die Methode zum Abrufen dieser Versionen aus einem Dateisystemspeicherort.
Felder auf oberster Ebene
Name | Art | Beschreibung |
---|---|---|
versions |
VersionObject[] | Ein Array von Versionsobjekten. Enthält einen Eintrag für jede Version des Ports in der Registrierung. |
VersionObject-
Name | Art | Beschreibung |
---|---|---|
path |
Schnur | Der Speicherort des Dateisystems, an dem sich die Portdateien für die entsprechende Version befinden |
version version-semver version-date version-string |
Schnur | Informationen zur Upstreamversion |
port-version | ganze Zahl | Überarbeitung von Portdateien |
Wenn Sie die path
einer Registrierung angeben, kann das $
Zeichen verwendet werden, um auf den Stamm der Registrierung zu verweisen. Andernfalls können absolute Pfade stattdessen verwendet werden.
Beispiel für eine Dateisystemregistrierungsversionsdatei
{
"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
}
]
}
Nächste Schritte
Hier sind einige Aufgaben, die Sie als Nächstes ausprobieren können: