2017-07-31 80 views
1

“(new_)git_repository”和“(new_)http_archive”工作空间规则以这种方式处理外部项目,以便在构建或预取时将任何外部依赖项复制到链接到工作空间的临时目录${WORKSPACE}/bazel-workspace/external/${EXTERNAL_DEP_NAME}将外部依赖项保存到项目存储库

我想在本地存储在我的回购中的外部依赖关系,所以如果远程存储库消失,即使在新计算机上,它也没有被缓存,我会有依赖副本。

我可以在不编写自定义工作区规则的情况下以某种方式更改默认行为吗?

回答

0

我可能是错的,但它听起来像你想在VCS中检查它。如果我们谈论的是一个http档案,然后手动下载它,那么将它粘贴在相关的“third_party”子文件夹下,并使用您制作的BUILD文件完成。

如果您想使用Bazel机制来下载和签入外部依赖关系,那么目前不支持此功能。 也许你应该打开一个issue

+0

是的,我想检查他们到VCS中,但我想使用bazel机制来下载/更新它们。 – Redwan

+1

我明白了。不知道这是否受支持,我不认为自定义工作区规则会帮助你。我建议稍微改变一下问题,关注如何使用bazel机制来管理**签入**外部依赖 – Ittai

+1

Ittai是正确的,现在bazel不支持自动更新外部存储库。 – mhlopko

2

巴泽尔确实有一个标志,你可以用这个:--experimental_repository_cache。它被设计成一个系统级的缓存,因此一台机器上的多个项目不必重新下载依赖关系,但是可以使用它的每个存储库。基本上,你会说:

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

然后,所有外部存储库将被下载到您的项目中my_cache目录。

您的外部依赖内容的哈希键缓存,所以它不会是非常可读的,但它会让你保持你的外部依赖于你的VCS相当容易。

(理论上你甚至可以签入.bazelrc文件中指定默认此选项,但--experimental_repository_cache只需要一个绝对路径,现在,所以这是一个有点不切实际的。我申请a bug处理的相对路径使用情况。)

+0

因此,如果我更新路径中的库哈希值将会改变,并且repo中的差异将变成“删除旧版本库并添加新版本”? – Redwan

+0

不,缓存只会添加一个新条目(因为它不知道另一个项目是否仍在使用该存档)。你必须手动清理旧的条目(绝对是一个缺点!)。 – kristina

相关问题