Sdílet prostřednictvím


Referenční informace k registrům

Přehled

Tento článek popisuje podrobnosti implementace jednotlivých typů registru. Konkrétně se tento soubor týká doporučeného rozložení pro každý druh registru a očekávaný obsah příslušných verzí databáze.

Poznámka

Tento článek obsahuje informace o tom, jak implementovat vlastní registry. Informace o využívání vlastních registrů v projektu najdete v článku Použití registrů.

Registry Gitu

Rozložení základního souboru v registrech Gitu

Pole nejvyšší úrovně

Objekt nejvyšší úrovně v souboru baseine.json je slovník, každý klíč v tomto slovníku je pojmenovaný základní. Vzhledem k podrobnostem implementace registrů Git je nutné, aby pojmenované základní s názvem "výchozí" existuje a že obsahuje mapování všech portů v registru na jejich základní verzi.

Jméno Typ Popis
default BaselineObject Výchozí směrný plán vyžadovaný pro registry Git.
Pojmenovaný směrný plán BaselineObject Další směrné plány. Název pole odpovídá názvu směrného plánu.

BaselineObject

Směrný objekt je slovník, přičemž každý klíč odpovídá názvu portu v registru a jeho hodnota je nejnovější verzí portu.

Jméno Typ Popis
Název portu BaselineVersionObject Mapování názvu portu na nejnovější verzi

BaselineVersionObject

Jméno Typ Popis
baseline řetězec Řetězec odpovídající nejnovější dostupné verzi portu v registru.
port-version celé číslo Celé číslo odpovídající nejnovější verzi portu v registru

Příklad souboru baseline.json v registru Git

V registru obsahujícím jeden port s názvem foo ve verzi 1.0.0#1by měl být obsah souboru baseline.json:

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

Rozložení souboru verze v registrech Gitu

Adresář versions obsahuje všechny informace o tom, které verze balíčků jsou obsaženy v registru, spolu s metodou načtení těchto verzí z historie úložiště.

Pole nejvyšší úrovně

Jméno Typ Popis
versions VersionObject[] Pole objektů verzí. Obsahuje položku pro každou verzi portu v historii registru.

VersionObject

Jméno Typ Popis
git-tree řetězec Sha stromu Git, který se používá k načtení obsahu portu
version
version-semver
version-date
version-string
řetězec Informace o nadřazené verzi
verze portu celé číslo Revize souborů portů

Příklad souboru s verzemi registru 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
    }
  ]
}

Získání git-tree SHA

Vcpkg používá funkce Gitu k načtení konkrétních verzí portu obsaženého v historii potvrzení. Použitá metoda je načíst objekt git-tree z úložiště, jak je uvedeno v souboru verzí portu.

Každý adresář portů v registru Git má přiřazený jedinečný sha (označovaný jako git-tree v souborech verzí). Sha se vypočítá pomocí obsahu adresáře; při každém potvrzení změny do úložiště, které upraví adresář, se jeho SHA přepočítá.

Git umožňuje načíst obsah daného adresáře v libovolném okamžiku v jeho historii za předpokladu, že znáte jejich konkrétní sha. Díky použití této funkce může vcpkg indexovat konkrétní verze portů s jejich příslušnými SHA (git-tree).

Pokud chcete získat sha adresáře portů v jakékoli dané revizi, můžete použít následující příkaz Gitu:

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

Příklad:

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

Příkaz vrátí sha adresáře obsahujícího port curl v aktuální revizi (HEAD).

Obsah git-tree je možné zobrazit pomocí příkazu 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

Nebo obsah určitého souboru s 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)

Správa souborů databáze v aktuálním stavu pomocí těchto příkazů Gitu v ručním procesu může být obtížná úloha. Z tohoto důvodu doporučujeme použít příkaz x-add-version, který automatizuje proces, pokud úložiště dodržuje doporučenou strukturu registru . Podívejte se na kurz : Publikování balíčků do privátního registru vcpkg pomocí článku Gitu, kde najdete příklad publikování portu v registru Git.

Registry systému souborů

Rozložení souborů podle směrného plánu v registrech systému souborů

Pole nejvyšší úrovně

Objekt nejvyšší úrovně v souboru baseine.json je slovník, každý klíč v tomto slovníku je pojmenovaný základní. Směrné plány by měly obsahovat mapování všech portů v registru na jejich základní verzi.

Jméno Typ Popis
Pojmenovaný směrný plán BaselineObject Další směrné plány. Název pole odpovídá názvu směrného plánu.

BaselineObject

Směrný objekt je slovník, přičemž každý klíč odpovídá názvu portu v registru a jeho hodnota je nejnovější verzí portu.

Jméno Typ Popis
Název portu BaselineVersionObject Mapování názvu portu na nejnovější verzi

BaselineVersionObject

Jméno Typ Popis
baseline řetězec Řetězec odpovídající nejnovější dostupné verzi portu v registru.
port-version celé číslo Celé číslo odpovídající nejnovější verzi portu v registru

Rozložení základního souboru v registru systému souborů je stejné jako u registrů Git. Jediným rozdílem je, že systém souborů nevyžaduje default směrný plán.

Příklad souboru baseline.json v registru Git

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

Rozložení souboru verze v registrech Gitu

Adresář versions obsahuje všechny informace o tom, které verze balíčků jsou obsaženy v registru, spolu s metodou načtení těchto verzí z umístění systému souborů.

polí nejvyšší úrovně

Jméno Typ Popis
versions VersionObject[] Pole objektů verzí. Obsahuje položku pro každou verzi portu v registru.

VersionObject

Jméno Typ Popis
path řetězec Umístění systému souborů, kde jsou umístěné soubory portů pro odpovídající verzi
version
version-semver
version-date
version-string
řetězec Informace o nadřazené verzi
verze portu celé číslo Revize souborů portů

Při zadávání path registru lze $ znak použít k odkazování na kořen registru. V opačném případě je možné místo toho použít absolutní cesty.

Příklad souboru verze registru systému souborů

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

Další kroky

Tady je několik úkolů, které můžete vyzkoušet dál: