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:
- Leggere la documentazione concettuale dei registri
- Creare un registro basato su Git personalizzato
- Installare pacchetti da un del Registro di sistema personalizzato