Сохранение внешних зависимостей в репозиторий проектов

Правила рабочей области "(new_) git_repository" и "(new_) http_archive" работают с внешними проектами таким образом, что любая внешняя зависимость копируется во временный каталог, связанный с рабочей областью как ${WORKSPACE}/bazel-workspace/external/${EXTERNAL_DEP_NAME} при сборке или предварительной выборке.

Я хотел бы сохранить внешние зависимости локально в моем репо, поэтому, если удаленный репозиторий исчезнет, ​​у меня будет копия зависимости даже на новой машине, где она не была кэширована.

Могу ли я как-то изменить поведение по умолчанию, не написав настраиваемое правило рабочего пространства?


person Redwan    schedule 31.07.2017    source источник


Ответы (2)


У Базеля есть флаг, который вы можете использовать для этого: --experimental_repository_cache. Он разработан как общесистемный кеш, поэтому нескольким проектам на одном компьютере не нужно повторно загружать зависимости, но вы можете использовать его для каждого репозитория. В основном вы бы сказали:

bazel build --experimental_repository_cache=$PWD/my_cache //foo

Тогда все внешние репозитории будут загружены в каталог my_cache вашего проекта.

Это кеш, связанный с хешем содержимого ваших внешних зависимостей, поэтому он не будет очень удобочитаемым, но он позволит вам довольно легко сохранить ваши внешние зависимости в вашей VCS.

(Теоретически вы можете даже проверить .bazelrc файл, чтобы указать эту опцию по умолчанию, но --experimental_repository_cache сейчас принимает только абсолютный путь, так что это немного непрактично. Я подал ошибка для обработки варианта использования относительного пути.)

person kristina    schedule 07.08.2017
comment
Итак, если я обновлю хэш библиотеки в пути, изменится, и diff в репо станет удалением старой версии библиотеки и добавлением новой версии? - person Redwan; 08.08.2017
comment
Нет, кеш просто добавит новую запись (поскольку он не знает, использует ли этот архив еще какой-либо проект). Вам придется очищать старые записи вручную (это определенно обратная сторона!). - person kristina; 08.08.2017

Я могу ошибаться, но похоже, что вы хотите просто проверить это в VCS. Если мы говорим о http-архиве, то загрузите его вручную, вставьте в соответствующую подпапку "Third_party" с созданным для него файлом BUILD, и все готово.

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

person Ittai    schedule 01.08.2017
comment
Да, я хочу зарегистрировать их в VCS, но я хочу использовать базовые механизмы для их загрузки / обновления. - person Redwan; 01.08.2017
comment
Я понимаю. Не уверен, что это поддерживается, и я не думаю, что правило настраиваемой рабочей области вам поможет. Я бы посоветовал немного изменить вопрос, чтобы сосредоточиться на том, как использовать механизмы bazel для управления внешними зависимостями отмеченных - person Ittai; 01.08.2017
comment
Ittai прав, прямо сейчас bazel не поддерживает автоматическое обновление внешних репозиториев. - person hlopko; 01.08.2017