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: