带有 patch = [...] 的 single_version_override 没有效果

问题描述 投票:0回答:1

我正在尝试使用

single_version_override
MODULES.bazel
功能,以便将本地补丁应用到 Bazel 公共注册表中的现有公共存储库。 (具体来说,
google_benchmark
不是建立在arm64 Windows系统上的,我想在本地解锁它,并最终在上游修复(如果他们有兴趣的话)。

在尝试使用带有 patch = ["//:foo.patch"] 的 single_version_override 时,我无法让补丁对依赖存储库产生影响。

Using "//:does_not_exist.patch" as a patch cause the build to fail (good). Setting version = "$different_version" cause bazel (which for my is an alias to bazelisk) to rebuild the repo (good).

但据我所知,更改补丁的内容不会触发存储库中任何内容的重建。设置补丁来创建无效存储库不会导致失败。设置 patch_level = 0(或 1 或 2)也不会导致任何失败(并且我预计至少有一个级别会失败)。

我已经在我的 Windows ARM 机器和 Mac 笔记本电脑上尝试了这些操作(Windows ARM 位于 Mac 上的虚拟机中)。

我不知道该怎么做才能更深入地调试,任何帮助将不胜感激。

我将提供一个示例,但我特别要求有关“如何调试”这类事情的帮助,而不是针对我的具体问题的答案。我找不到任何关于如何在这些规则出错时进行调试的文档,即使我得到了这个问题的答案,事实上,当这些规则不起作用时我没有任何调试方法让我担心。 例如,我从这个(简单的)存储库开始:

https://github.com/monkeynova/gunit-main

bazel test ...

效果很好。

如果我在 MODULES.bazel 末尾包含以下内容

single_version_override( module_name = "google_benchmark", patches = ["//:benchmark.patch"], )

使用以下(已损坏 - 请注意“这无效”)补丁:

基准.补丁

diff --git a/BUILD.bazel b/BUILD.bazel index 094ed62..49f2f56 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -35,6 +35,15 @@ config_setting( visibility = [":__subpackages__"], ) +config_setting( + name = "arm_windows", + constraint_values = ["@platforms//os:windows"], + values = { + "cpu": "arm64_windows", + }, + visibility = [":__subpackages__"], +) + + this is invalid + config_setting( name = "macos", constraint_values = ["@platforms//os:macos"], @@ -64,6 +73,7 @@ cc_library( ], copts = select({ ":windows": [], + ":arm_windows": [], "//conditions:default": COPTS, }), defines = [ @@ -76,6 +86,7 @@ cc_library( includes = ["include"], linkopts = select({ ":windows": ["-DEFAULTLIB:shlwapi.lib"], + ":arm_windows": ["-DEFAULTLIB:shlwapi.lib"], "//conditions:default": ["-pthread"], }), # Only static linking is allowed; no .so will be produced.

它继续构建并测试良好。如果我指定了错误的文件,构建就会失败。如果我删除“这无效”,这就是我从 
git diff

在成功修补 local_path_override 时创建的修补程序。

    

bazel
1个回答
0
投票

它能够告诉我,我的问题是我的补丁是以自定义 bazel 补丁代码无法识别的方式形成的。该补丁是用非 utf8 字符集构建的,我发现所有文本渲染都对我隐藏。 (od -hc 是我用来证实我的怀疑的工具)。

针对我遇到的具体问题,找到bug并报告:我发现问题:github.com/bazelbuild/bazel/issues/23843

© www.soinside.com 2019 - 2024. All rights reserved.