Referência de registros
Visão geral
Este artigo descreve os detalhes de implementação para cada tipo de registro. Especificamente, esse arquivo se preocupa com o layout recomendado para cada tipo de registro e o conteúdo esperado do respectivo banco de dados de versões .
Nota
Este artigo contém informações sobre como implementar registros personalizados. Para obter informações sobre como consumir registros personalizados em seu projeto, consulte o artigo Usando registros artigo.
Registros do Git
Layout de arquivo de linha de base em registros Git
Campos de nível superior
O objeto de nível superior em um arquivo baseine.json
é um dicionário, cada chave neste dicionário é um chamadode linha de base. Devido aos detalhes de implementação dos registros git, é necessário que uma chamada linha de base com o nome "padrão" exista e que contenha um mapeamento de todas as portas do registro para sua versão de linha de base.
Nome | Tipo | Descrição |
---|---|---|
default |
BaselineObject | A linha de base padrão, necessária para registros Git. |
Linha de base nomeada | BaselineObject | Linhas de base adicionais. O nome do campo corresponde ao nome da linha de base. |
BaselineObject
O objeto de linha de base é um dicionário, com cada chave correspondente a um nome de porta no Registro e seu valor sendo a versão mais recente da porta.
Nome | Tipo | Descrição |
---|---|---|
Nome da porta | BaselineVersionObject | Um mapeamento de um nome de porta para sua versão mais recente |
BaselineVersionObject
Nome | Tipo | Descrição |
---|---|---|
baseline |
corda | Uma cadeia de caracteres correspondente à versão mais recente disponível da porta no Registro. |
port-version |
inteiro | Um inteiro correspondente à versão de porta mais recente da porta no Registro |
Exemplo de um arquivo baseline.json
em um registro Git
Em um registro que contém uma única porta chamada foo
na versão 1.0.0#1
, o conteúdo do arquivo baseline.json
deve ser:
{
"default": {
"foo": {
"baseline": "1.0.0",
"port-version": 1
}
}
}
Layout de arquivo de versão nos registros git
O diretório versions
contém todas as informações sobre quais versões de pacotes estão contidas no registro, juntamente com o método para recuperar essas versões do histórico do repositório.
Campos de nível superior
Nome | Tipo | Descrição |
---|---|---|
versions |
VersionObject[] | Uma matriz de objetos de versão. Contém uma entrada para cada versão da porta no histórico do registro. |
VersionObject
Nome | Tipo | Descrição |
---|---|---|
git-tree |
corda | Uma sha de árvore git usada para recuperar o conteúdo da porta |
version version-semver version-date version-string |
corda | Informações de versão upstream |
de versão de porta | inteiro | Revisão de arquivos de porta |
Exemplo de um arquivo de versões do Registro 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
}
]
}
Obtendo um SHA git-tree
O vcpkg usa os recursos do Git para recuperar versões específicas de uma porta contida em seu histórico de confirmação. O método usado é recuperar o objeto git-tree
do repositório, conforme especificado no arquivo de versões de uma porta.
Cada diretório de porta em um registro Git tem um SHA exclusivo associado a ele (conhecido como git-tree
nos arquivos de versões). O SHA é calculado usando o conteúdo do diretório; sempre que uma alteração é confirmada no repositório que modifica um diretório, sua SHA é recalculada.
O Git permite que você recupere o conteúdo de um determinado diretório a qualquer momento em seu histórico, desde que você conheça seu SHA específico. Ao usar esse recurso, o vcpkg pode indexar versões de porta específicas com suas respectivas SHA (git-tree
).
Para obter o SHA de um diretório de porta em qualquer revisão, o seguinte comando Git pode ser usado:
git -C <path/to/ports> ls-tree --format='%(objectname)' <commit sha> -- <portname>
Exemplo:
git -C %VCPKG_ROOT%/ports ls-tree --format='%(objectname)' HEAD -- curl
6ef1763f3cbe570d6378632c9b5793479c37fb07
O comando retorna o SHA do diretório que contém a porta curl
na revisão atual (HEAD
).
É possível mostrar o conteúdo do git-tree
usando o 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
Ou o conteúdo de um arquivo específico com 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)
Manter os arquivos de banco de dados atualizados usando esses comandos Git em um processo manual pode ser uma tarefa difícil. Por esse motivo, recomendamos usar o comando x-add-version
, que automatiza o processo desde que o repositório siga a estrutura de registro recomendada. Consulte o tutorial : publicar pacotes em um registro vcpkg privado usando o artigo do Git para obter um exemplo de como publicar uma porta em um registro Git.
Registros do sistema de arquivos
Layout do arquivo de linha de base nos registros do sistema de arquivos
Campos de nível superior
O objeto de nível superior em um arquivo baseine.json
é um dicionário, cada chave neste dicionário é um chamadode linha de base. As linhas de base devem conter mapeamentos de todas as portas do registro para sua versão de linha de base.
Nome | Tipo | Descrição |
---|---|---|
Linha de base nomeada | BaselineObject | Linhas de base adicionais. O nome do campo corresponde ao nome da linha de base. |
BaselineObject
O objeto de linha de base é um dicionário, com cada chave correspondente a um nome de porta no Registro e seu valor sendo a versão mais recente da porta.
Nome | Tipo | Descrição |
---|---|---|
Nome da porta | BaselineVersionObject | Um mapeamento de um nome de porta para sua versão mais recente |
BaselineVersionObject
Nome | Tipo | Descrição |
---|---|---|
baseline |
corda | Uma cadeia de caracteres correspondente à versão mais recente disponível da porta no Registro. |
port-version |
inteiro | Um inteiro correspondente à versão de porta mais recente da porta no Registro |
O layout do arquivo de linha de base em um registro de sistema de arquivos é o mesmo para registros Git. A única diferença é que os sistemas de arquivos não exigem uma linha de base default
.
Exemplo de um arquivo baseline.json
em um registro Git
{
"2024-12-01": {
"foo": {
"baseline": "1.0.0",
"port-version": 1
}
}
}
Layout de arquivo de versão nos registros git
O diretório versions
contém todas as informações sobre quais versões de pacotes estão contidas no registro, juntamente com o método para recuperar essas versões de um local do sistema de arquivos.
campos de nível superior
Nome | Tipo | Descrição |
---|---|---|
versions |
VersionObject[] | Uma matriz de objetos de versão. Contém uma entrada para cada versão da porta no Registro. |
VersionObject
Nome | Tipo | Descrição |
---|---|---|
path |
corda | O local do sistema de arquivos em que os arquivos de porta da versão correspondente estão localizados |
version version-semver version-date version-string |
corda | Informações de versão upstream |
de versão de porta | inteiro | Revisão de arquivos de porta |
Ao especificar o path
de um registro, o caractere $
pode ser usado para referenciar a raiz do registro. Caso contrário, caminhos absolutos podem ser usados.
Exemplo de um arquivo de versão do registro do sistema de arquivos
{
"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
}
]
}
Próximas etapas
Estas são algumas tarefas a serem tentadas a seguir: