我正在尝试使用
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-mainbazel 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 补丁代码无法识别的方式形成的。该补丁是用非 utf8 字符集构建的,我发现所有文本渲染都对我隐藏。 (od -hc 是我用来证实我的怀疑的工具)。
针对我遇到的具体问题,找到bug并报告:我发现问题:github.com/bazelbuild/bazel/issues/23843