Поделиться через


Справочник по реестрам

Обзор

В этой статье описываются сведения о реализации для каждого типа реестра. В частности, этот файл касается рекомендуемого макета для каждого типа реестра и ожидаемого содержимого соответствующей базы данных версий базы данных.

Заметка

В этой статье содержатся сведения о реализации пользовательских реестров. Сведения об использовании пользовательских реестров в проекте см. в статье Использование реестров.

Реестры Git

Базовый макет файла в реестрах Git

Поля верхнего уровня

Объект верхнего уровня в файле baseine.json является словарем, каждый ключ в этом словаре — это именованных базовых. Из-за сведений о реализации реестров Git необходимо, чтобы именованные базовые с именем default существовали, и что он содержит сопоставление всех портов в реестре с их базовой версией.

Имя Тип Описание
default Базовый объектObject Базовый план по умолчанию, необходимый для реестров Git.
Именованные базовые показатели Базовый объектObject Дополнительные базовые показатели. Имя поля соответствует базовому имени.

Базовый объектObject

Базовый объект — это словарь, каждый раздел, соответствующий имени порта в реестре, и его значение является последней версией порта.

Имя Тип Описание
Имя порта BaselineVersionObject Сопоставление имени порта с последней версией

BaselineVersionObject

Имя Тип Описание
baseline струна Строка, соответствующая последней доступной версии порта в реестре.
port-version целое число Целое число, соответствующее последней версии порта в реестре.

Пример файла baseline.json в реестре Git

В реестре с одним портом с именем foo версии 1.0.0#1содержимое файла baseline.json должно быть:

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

Макет файла версии в реестрах Git

Каталог versions содержит все сведения о том, какие версии пакетов содержатся в реестре, а также метод для получения этих версий из журнала репозитория.

Поля верхнего уровня

Имя Тип Описание
versions VersionObject[] Массив объектов версии. Содержит запись для каждой версии порта в журнале реестра.

VersionObject

Имя Тип Описание
git-tree струна Дерево git, используемое для извлечения содержимого порта
version
version-semver
version-date
version-string
струна Сведения о версии вышестоящего потока
версии порта целое число Редакция файлов портов

Пример файла версий реестра 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
    }
  ]
}

Получение git-tree SHA

vcpkg использует возможности Git для получения определенных версий порта, содержащегося в журнале фиксации. Метод используется для получения объекта git-tree из репозитория, как указано в файле версий порта.

Каждый каталог портов в реестре Git имеет уникальный SHA,связанный с ним (называемый git-tree в файлах версий). Sha вычисляется с помощью содержимого каталога; каждый раз, когда изменение фиксируется в репозитории, который изменяет каталог, его SHA вычисляется повторно.

Git позволяет получить содержимое определенного каталога в любой момент в своей истории, если вы знаете их конкретное SHA. Используя эту функцию, vcpkg может индексировать определенные версии портов с соответствующими SHA (git-tree).

Чтобы получить SHA каталога портов в любой указанной редакции, можно использовать следующую команду Git:

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

Пример:

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

Команда возвращает SHA каталога, содержащего порт curl в текущей редакции (HEAD).

Содержимое git-tree можно отобразить с помощью команды 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

Или содержимое определенного файла с 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)

Управление файлами базы данных в актуальном состоянии с помощью этих команд Git в ручном процессе может оказаться сложной задачей. Поэтому мы рекомендуем использовать команду x-add-version, которая автоматизирует процесс до тех пор, пока репозиторий следует рекомендуемой структуре реестра . Ознакомьтесь с руководством по . Публикация пакетов в частном реестре vcpkg с помощью Git статьи о публикации порта в реестре Git.

Реестры файловой системы

Базовый макет файла в реестрах файловой системы

Поля верхнего уровня

Объект верхнего уровня в файле baseine.json является словарем, каждый ключ в этом словаре — это именованных базовых. Базовые показатели должны содержать сопоставления всех портов в реестре с базовой версией.

Имя Тип Описание
Именованные базовые показатели Базовый объектObject Дополнительные базовые показатели. Имя поля соответствует базовому имени.

Базовый объектObject

Базовый объект — это словарь, каждый раздел, соответствующий имени порта в реестре, и его значение является последней версией порта.

Имя Тип Описание
Имя порта BaselineVersionObject Сопоставление имени порта с последней версией

BaselineVersionObject

Имя Тип Описание
baseline струна Строка, соответствующая последней доступной версии порта в реестре.
port-version целое число Целое число, соответствующее последней версии порта в реестре.

Макет базового файла в реестре файловой системы совпадает с реестрами Git. Единственное различие заключается в том, что файловая система не требует default базовых показателей.

Пример файла baseline.json в реестре Git

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

Макет файла версии в реестрах Git

Каталог versions содержит все сведения о том, какие версии пакетов содержатся в реестре, а также метод для извлечения этих версий из расположения файловой системы.

поля верхнего уровня

Имя Тип Описание
versions VersionObject[] Массив объектов версии. Содержит запись для каждой версии порта в реестре.

VersionObject

Имя Тип Описание
path струна Расположение файловой системы, в котором находятся файлы портов для соответствующей версии.
version
version-semver
version-date
version-string
струна Сведения о версии вышестоящего потока
версии порта целое число Редакция файлов портов

При указании path реестра $ символ можно использовать для ссылки на корневой каталог реестра. В противном случае можно использовать абсолютные пути.

Пример файла версии реестра файловой системы

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

Дальнейшие действия

Ниже приведены некоторые задачи, которые необходимо выполнить следующим образом: