From 2ab73dd77acd0cff5bf4113b325b1701d70109ee Mon Sep 17 00:00:00 2001 From: Yun Peng Date: Tue, 9 Jul 2024 09:05:51 -0700 Subject: [PATCH] Fix vendoring immediatelly after a normal repo fetch Repo wasn't vendored as expected due to wrong SkyValue cache caused by incorrect equals function. Related: https://github.com/bazelbuild/bazel/issues/19563 Closes #22953. PiperOrigin-RevId: 650648957 Change-Id: Id31aa7d6f9bcbe2e3eb9e556ae31b3b8e42436bf --- .../repository/RepositoryDirectoryValue.java | 3 ++- src/test/py/bazel/bzlmod/bazel_vendor_test.py | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDirectoryValue.java b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDirectoryValue.java index e646fafcceb26f..26366ddfee9f82 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDirectoryValue.java +++ b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDirectoryValue.java @@ -125,7 +125,8 @@ public boolean equals(Object other) { return Objects.equal(path, otherValue.path) && Objects.equal(sourceDir, otherValue.sourceDir) && Arrays.equals(digest, otherValue.digest) - && Objects.equal(fileValues, otherValue.fileValues); + && Objects.equal(fileValues, otherValue.fileValues) + && Objects.equal(excludeFromVendoring, otherValue.excludeFromVendoring); } return false; } diff --git a/src/test/py/bazel/bzlmod/bazel_vendor_test.py b/src/test/py/bazel/bzlmod/bazel_vendor_test.py index 813c32d7025f5d..5a9bcaea355615 100644 --- a/src/test/py/bazel/bzlmod/bazel_vendor_test.py +++ b/src/test/py/bazel/bzlmod/bazel_vendor_test.py @@ -141,6 +141,25 @@ def testVendorFailsWithNofetch(self): 'ERROR: You cannot run the vendor command with --nofetch', stderr ) + def testVendorAfterFetch(self): + self.main_registry.createCcModule('aaa', '1.0') + self.ScratchFile( + 'MODULE.bazel', + [ + 'bazel_dep(name = "aaa", version = "1.0")', + 'local_path_override(module_name="bazel_tools", path="tools_mock")', + 'local_path_override(module_name="local_config_platform", ', + 'path="platforms_mock")', + ], + ) + self.ScratchFile('BUILD') + + self.RunBazel(['fetch', '--repo=@@aaa~']) + self.RunBazel(['vendor', '--vendor_dir=vendor', '--repo=@@aaa~']) + + repos_vendored = os.listdir(self._test_cwd + '/vendor') + self.assertIn('aaa~', repos_vendored) + def testVendoringMultipleTimes(self): self.main_registry.createCcModule('aaa', '1.0') self.ScratchFile(