Compartir a través de


Referencia de registros

Información general

En este artículo se describen los detalles de implementación de cada tipo de registro. En concreto, este archivo se refiere al diseño recomendado para cada tipo de registro y al contenido esperado de sus respectivas versiones de base de datos.

Nota

Este artículo contiene información sobre cómo implementar registros personalizados. Para obtener información sobre cómo consumir registros personalizados en el proyecto, consulte el artículo Uso de registros.

Registros de Git

Diseño de archivo de línea base en registros de Git

Campos de nivel superior

El objeto de nivel superior de un archivo de baseine.json es un diccionario, cada clave de este diccionario es un denominado línea base. Debido a los detalles de implementación de los registros de Git, es necesario que exista un de línea base con nombre con el nombre "predeterminado" y que contenga una asignación de todos los puertos del Registro a su versión de línea base.

Nombre Tipo Descripción
default BaselineObject Línea base predeterminada, necesaria para los registros de Git.
Línea base con nombre BaselineObject Líneas base adicionales. El nombre del campo corresponde al nombre de línea base.

BaselineObject

El objeto de línea base es un diccionario, con cada clave correspondiente a un nombre de puerto en el Registro y su valor es la versión más reciente del puerto.

Nombre Tipo Descripción
Nombre del puerto BaselineVersionObject Asignación de un nombre de puerto a su versión más reciente

BaselineVersionObject

Nombre Tipo Descripción
baseline cuerda Cadena correspondiente a la versión más reciente disponible del puerto en el Registro.
port-version entero Entero correspondiente a la versión de puerto más reciente del puerto en el Registro.

Ejemplo de un archivo baseline.json en un registro de Git

En un registro que contiene un único puerto denominado foo en la versión 1.0.0#1, el contenido del archivo baseline.json debe ser:

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

Diseño de archivo de versión en los registros de Git

El directorio versions contiene toda la información sobre qué versiones de paquetes se incluyen en el Registro, junto con el método para recuperar esas versiones del historial del repositorio.

Campos de nivel superior

Nombre Tipo Descripción
versions VersionObject[] Matriz de objetos de versión. Contiene una entrada para cada versión del puerto en el historial del registro.

VersionObject

Nombre Tipo Descripción
git-tree cuerda Un sha de árbol de Git usado para recuperar el contenido del puerto
version
version-semver
version-date
version-string
cuerda Información de la versión ascendente
port-version entero Revisión de archivos de puerto

Ejemplo de un archivo de versiones del Registro de 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
    }
  ]
}

Obtención de una git-tree SHA

vcpkg usa las funcionalidades de Git para recuperar versiones específicas de un puerto incluido en su historial de confirmaciones. El método utilizado es recuperar el objeto git-tree del repositorio tal como se especifica en el archivo de versiones de un puerto.

Cada directorio de puerto de un registro de Git tiene un SHA único asociado (denominado git-tree en los archivos de versiones). El SHA se calcula utilizando el contenido del directorio; cada vez que se confirma un cambio en el repositorio que modifica un directorio, se recalcula su SHA.

Git le permite recuperar el contenido de un directorio determinado en cualquier momento de su historial, siempre que conozca su SHA específico. Al usar esta característica, vcpkg puede indexar versiones de puerto específicas con sus respectivos SHA (git-tree).

Para obtener el SHA de un directorio de puerto en cualquier revisión dada, se puede usar el siguiente comando de Git:

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

Ejemplo:

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

El comando devuelve el SHA del directorio que contiene el puerto de curl en la revisión actual (HEAD).

Es posible mostrar el contenido del git-tree mediante el 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

O el contenido de un archivo específico 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)

Mantaining the database files up to date using these Git commands in a manual process can be a difícil task. Por ese motivo, se recomienda usar el comando x-add-version, que automatiza el proceso siempre que el repositorio siga la estructura del Registro recomendada. Consulte el tutorial de : Publicación de paquetes en un registro vcpkg privado mediante Git artículo para ver un ejemplo de cómo publicar un puerto en un registro de Git.

Registros del sistema de archivos

Diseño de archivo de línea base en los registros del sistema de archivos

Campos de nivel superior

El objeto de nivel superior de un archivo de baseine.json es un diccionario, cada clave de este diccionario es un denominado línea base. Las líneas base deben contener asignaciones de todos los puertos del Registro a su versión de línea base.

Nombre Tipo Descripción
Línea base con nombre BaselineObject Líneas base adicionales. El nombre del campo corresponde al nombre de línea base.

BaselineObject

El objeto de línea base es un diccionario, con cada clave correspondiente a un nombre de puerto en el Registro y su valor es la versión más reciente del puerto.

Nombre Tipo Descripción
Nombre del puerto BaselineVersionObject Asignación de un nombre de puerto a su versión más reciente

BaselineVersionObject

Nombre Tipo Descripción
baseline cuerda Cadena correspondiente a la versión más reciente disponible del puerto en el Registro.
port-version entero Entero correspondiente a la versión de puerto más reciente del puerto en el Registro.

El diseño del archivo de línea base en un registro de sistema de archivos es el mismo que para los registros de Git . La única diferencia es que los sistemas de archivos no requieren una línea base de default.

Ejemplo de un archivo baseline.json en un registro de Git

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

Diseño de archivo de versión en los registros de Git

El directorio versions contiene toda la información sobre qué versiones de paquetes se incluyen en el Registro, junto con el método para recuperar esas versiones de una ubicación del sistema de archivos.

campos de nivel superior

Nombre Tipo Descripción
versions VersionObject[] Matriz de objetos de versión. Contiene una entrada para cada versión del puerto en el Registro.

versionObject

Nombre Tipo Descripción
path cuerda Ubicación del sistema de archivos donde se encuentran los archivos de puerto de la versión correspondiente.
version
version-semver
version-date
version-string
cuerda Información de la versión ascendente
port-version entero Revisión de archivos de puerto

Al especificar el path de un registro, se puede usar el carácter $ para hacer referencia a la raíz del registro. De lo contrario, se pueden usar rutas de acceso absolutas en su lugar.

Ejemplo de un archivo de versión del registro del sistema de archivos

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

Pasos siguientes

Estas son algunas tareas que se van a probar a continuación: