Compartilhar via


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: