Condividi tramite


Informazioni di riferimento sui registri

Panoramica

Questo articolo descrive i dettagli di implementazione per ogni tipo di registro. In particolare, questo file riguarda il layout consigliato per ogni tipo di Registro di sistema e il contenuto previsto dei rispettivi database versioni.

Nota

Questo articolo contiene informazioni su come implementare registri personalizzati. Per informazioni sull'utilizzo di registri personalizzati nel progetto, vedere l'articolo Uso di registri.

Registri Git

Layout di file di base nei registri Git

Campi di primo livello

L'oggetto di primo livello in un file di baseine.json è un dizionario, ogni chiave in questo dizionario è una denominata baseline. A causa dei dettagli di implementazione dei registri Git, è necessario che esista un denominato baseline con il nome "default" e che contenga un mapping di tutte le porte nel Registro di sistema alla versione di base.

Nome Digitare Descrizione
default BaselineObject Baseline predefinita, necessaria per i registri Git.
Baseline denominata BaselineObject Baseline aggiuntive. Il nome del campo corrisponde al nome della linea di base.

BaselineObject

L'oggetto baseline è un dizionario, con ogni chiave corrispondente a un nome di porta nel Registro di sistema e il relativo valore è la versione più recente della porta.

Nome Digitare Descrizione
Nome porta BaselineVersionObject Mapping di un nome di porta alla versione più recente

BaselineVersionObject

Nome Digitare Descrizione
baseline corda Stringa corrispondente alla versione più recente disponibile della porta nel Registro di sistema.
port-version numero intero Intero corrispondente alla versione più recente della porta nel Registro di sistema

Esempio di file baseline.json in un registro Git

In un registro contenente una singola porta denominata foo alla versione 1.0.0#1, il contenuto del file di baseline.json deve essere:

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

Layout dei file di versione nei registri Git

La directory versions contiene tutte le informazioni sulle versioni dei pacchetti contenute nel Registro di sistema, insieme al metodo per recuperare tali versioni dalla cronologia del repository.

Campi di primo livello

Nome Digitare Descrizione
versions VersionObject[] Matrice di oggetti versione. Contiene una voce per ogni versione della porta nella cronologia del Registro di sistema.

VersionObject

Nome Digitare Descrizione
git-tree corda SHA dell'albero Git usato per recuperare il contenuto della porta
version
version-semver
version-date
version-string
corda Informazioni sulla versione upstream
della versione della porta numero intero Revisione dei file di porta

Esempio di un file delle versioni del Registro di sistema 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
    }
  ]
}

Recupero di un git-tree SHA

vcpkg usa le funzionalità di Git per recuperare versioni specifiche di una porta contenuta nella cronologia dei commit. Il metodo utilizzato consiste nel recuperare l'oggetto git-tree dal repository, come specificato nel file delle versioni di una porta.

A ogni directory delle porte in un registro Git è associato un sha univoco (detto git-tree nei file delle versioni). L'SHA viene calcolato usando il contenuto della directory; ogni volta che viene eseguito il commit di una modifica nel repository che modifica una directory, viene ricalcolato il relativo SHA.

Git consente di recuperare il contenuto di una determinata directory in qualsiasi punto della cronologia, purché si conosca la specifica sha. Usando questa funzionalità, vcpkg può indicizzare versioni di porta specifiche con le rispettive versioni SHA (git-tree).

Per ottenere l'sha di una directory di porta in una determinata revisione, è possibile usare il comando Git seguente:

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

Esempio:

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

Il comando restituisce lo SHA della directory contenente la porta curl alla revisione corrente (HEAD).

È possibile visualizzare il contenuto del git-tree usando il comando 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

Oppure il contenuto di un file specifico con 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)

Gestire i file di database aggiornati usando questi comandi Git in un processo manuale può essere un'attività difficile. Per questo motivo è consigliabile usare il comando x-add-version, che automatizza il processo purché il repository segua la struttura consigliata del Registro di sistema . Vedere l'articolo Esercitazione: Pubblicare pacchetti in un registro vcpkg privato usando Git per un esempio di come pubblicare una porta in un registro Git.

Registri del file system

Layout di file di base nei registri del file system

Campi di primo livello

L'oggetto di primo livello in un file di baseine.json è un dizionario, ogni chiave in questo dizionario è una denominata baseline. Le linee di base devono contenere mapping di tutte le porte nel Registro di sistema alla versione di base.

Nome Digitare Descrizione
Baseline denominata BaselineObject Baseline aggiuntive. Il nome del campo corrisponde al nome della linea di base.

BaselineObject

L'oggetto baseline è un dizionario, con ogni chiave corrispondente a un nome di porta nel Registro di sistema e il relativo valore è la versione più recente della porta.

Nome Digitare Descrizione
Nome porta BaselineVersionObject Mapping di un nome di porta alla versione più recente

BaselineVersionObject

Nome Digitare Descrizione
baseline corda Stringa corrispondente alla versione più recente disponibile della porta nel Registro di sistema.
port-version numero intero Intero corrispondente alla versione più recente della porta nel Registro di sistema

Il layout del file di base in un registro di file system è uguale a quello dei registri Git . L'unica differenza consiste nel fatto che i file system non richiedono una baseline default.

Esempio di file baseline.json in un registro Git

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

Layout dei file di versione nei registri Git

La directory versions contiene tutte le informazioni sulle versioni dei pacchetti contenute nel Registro di sistema, insieme al metodo per recuperare tali versioni da un percorso del file system.

campi di primo livello

Nome Digitare Descrizione
versions VersionObject[] Matrice di oggetti versione. Contiene una voce per ogni versione della porta nel Registro di sistema.

VersionObject

Nome Digitare Descrizione
path corda Percorso del file system in cui si trovano i file di porta per la versione corrispondente
version
version-semver
version-date
version-string
corda Informazioni sulla versione upstream
della versione della porta numero intero Revisione dei file di porta

Quando si specifica il path di un registro, è possibile utilizzare il carattere $ per fare riferimento alla radice del Registro di sistema. In caso contrario, è possibile usare percorsi assoluti.

Esempio di file system di versione del Registro di sistema

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

Passaggi successivi

Ecco alcune attività da provare: