Freigeben über


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#1enthä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: