From 66b069378cbd8169a94398969b3765fec8f203ad Mon Sep 17 00:00:00 2001 From: Fabian Meumertzheim Date: Mon, 9 Sep 2024 03:19:29 -0700 Subject: [PATCH] Invalidate lockfile entry when the extension name prefix changes This was missed in #19055. Closes #23527. PiperOrigin-RevId: 672480631 Change-Id: Ib2ef0edb6b6c90a7336085da20e2794a93763182 --- .../bzlmod/SingleExtensionUsagesValue.java | 4 +- .../py/bazel/bzlmod/bazel_lockfile_test.py | 55 +++++++++++++++++++ src/test/tools/bzlmod/MODULE.bazel.lock | 12 ++-- 3 files changed, 62 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/SingleExtensionUsagesValue.java b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/SingleExtensionUsagesValue.java index ded469ead31699..fef7930072a014 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/SingleExtensionUsagesValue.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/SingleExtensionUsagesValue.java @@ -83,9 +83,7 @@ SingleExtensionUsagesValue trimForEvaluation() { return SingleExtensionUsagesValue.create( ImmutableMap.copyOf( Maps.transformValues(getExtensionUsages(), ModuleExtensionUsage::trimForEvaluation)), - // extensionUniqueName: Not accessible to the extension's implementation function. - // TODO: Reconsider this when resolving #19055. - "", + getExtensionUniqueName(), getAbridgedModules(), // repoMappings: The usage of repo mappings by the extension's implementation function is // tracked on the level of individual entries and all label attributes are provided as diff --git a/src/test/py/bazel/bzlmod/bazel_lockfile_test.py b/src/test/py/bazel/bzlmod/bazel_lockfile_test.py index 40bd245bd1a8a8..33546ec66e484f 100644 --- a/src/test/py/bazel/bzlmod/bazel_lockfile_test.py +++ b/src/test/py/bazel/bzlmod/bazel_lockfile_test.py @@ -2602,6 +2602,61 @@ def testLockFileVersionIsCorrectWithUsePlusFlag(self): self.RunBazel(['clean', '--expunge']) self.RunBazel(['mod', 'graph', '--incompatible_use_plus_in_repo_names', '--lockfile_mode=error']) + def testModuleExtensionRerunsOnUniqueNameChange(self): + self.ScratchFile( + 'MODULE.bazel', + [ + 'my_ext_1 = use_extension("//:ext1.bzl","my_ext")', + 'use_repo(my_ext_1, "foo")', + ], + ) + self.ScratchFile('BUILD.bazel') + self.ScratchFile( + 'ext1.bzl', + [ + 'def _my_repo_impl(ctx):', + ' ctx.file("REPO.bazel")', + ' ctx.file("BUILD")', + ' ctx.file("hi.txt", "hi")', + ' if ctx.attr.label:', + ' print("label: {}".format(ctx.attr.label))', + 'my_repo = repository_rule(', + ' implementation=_my_repo_impl,', + ' attrs={"label": attr.label()}', + ')', + 'def _my_ext_impl(ctx):', + ' my_repo(name="foo",label="@bar")', + ' my_repo(name="bar")', + 'my_ext = module_extension(implementation=_my_ext_impl)', + ], + ) + self.ScratchFile( + 'ext2.bzl', + [ + 'load(":ext1.bzl", "my_repo")', + 'def _my_ext_impl(ctx):', + ' my_repo(name="foo")', + 'my_ext = module_extension(implementation=_my_ext_impl)', + ], + ) + + _, _, stderr = self.RunBazel(['build', '@foo//:all']) + stderr = '\n'.join(stderr) + self.assertIn('label: @@+my_ext+bar//:bar\n', stderr) + + self.ScratchFile( + 'MODULE.bazel', + [ + 'my_ext_2 = use_extension("//:ext2.bzl","my_ext")', + 'use_repo(my_ext_2, other_foo = "foo")', + 'my_ext_1 = use_extension("//:ext1.bzl","my_ext")', + 'use_repo(my_ext_1, "foo")', + ], + ) + + _, _, stderr = self.RunBazel(['build', '@foo//:all']) + stderr = '\n'.join(stderr) + self.assertIn('label: @@+my_ext2+bar//:bar\n', stderr) if __name__ == '__main__': diff --git a/src/test/tools/bzlmod/MODULE.bazel.lock b/src/test/tools/bzlmod/MODULE.bazel.lock index 2e91b9c460b717..24b371d6fb465d 100644 --- a/src/test/tools/bzlmod/MODULE.bazel.lock +++ b/src/test/tools/bzlmod/MODULE.bazel.lock @@ -64,7 +64,7 @@ "@@apple_support~//crosstool:setup.bzl%apple_cc_configure_extension": { "general": { "bzlTransitiveDigest": "PjIds3feoYE8SGbbIq2SFTZy3zmxeO2tQevJZNDo7iY=", - "usagesDigest": "bqyfVLJn+3M/ql9kdKGz7q083cAayVTcmlm5kEJfGAI=", + "usagesDigest": "7eb+38HaSYXDxn7OZOP6ji/VKxWYeAheiZoTwtTVCgY=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -92,7 +92,7 @@ "@@platforms//host:extension.bzl%host_platform": { "general": { "bzlTransitiveDigest": "xelQcPZH8+tmuOHVjL9vDxMnnQNMlwj0SlvgoqBkm4U=", - "usagesDigest": "whARuERE2fGO0oER/yUJ9UnuDcSkR227eYWZUVNy/3Y=", + "usagesDigest": "iyc9ppxZx1NLcdWY1BLyOIAfce+oMGjjBiFgC6LKn+k=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -109,7 +109,7 @@ "@@rules_jvm_external~//:extensions.bzl%maven": { "general": { "bzlTransitiveDigest": "nCJBnRI68ndNaTFBoEY+PPV6B9hLz1V4M3YjjxCQFhk=", - "usagesDigest": "G7bV9l+zJ2RkplFf3E987nj8RPcxAqfzTHS5Zdc3rZw=", + "usagesDigest": "Ibxz+lEeSRsbUXF0hvMKg1hWMFUL0S0/LBkSsDDs6lg=", "recordedFileInputs": { "@@rules_jvm_external~//rules_jvm_external_deps_install.json": "10442a5ae27d9ff4c2003e5ab71643bf0d8b48dcf968b4173fa274c3232a8c06" }, @@ -1133,7 +1133,7 @@ "@@rules_jvm_external~//:non-module-deps.bzl%non_module_deps": { "general": { "bzlTransitiveDigest": "Lxr/sC3jorQDfvqpluvFC7JhOi41kaZ6ESxDVC2LZ5s=", - "usagesDigest": "Ogn82YkpKa5kvheD/dv6YN0tP3nfvTIqAuPJrebCbWM=", + "usagesDigest": "hwl83iGGV39M7yBqqlvKbiCEgo0wLkrXn8FcWAMOt1A=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -1161,7 +1161,7 @@ "@@rules_python~//python/extensions:python.bzl%python": { "general": { "bzlTransitiveDigest": "M7E/O6D+cJQoC4ZmcJ+cmXXJT2JMff2FRpQyHtoDQCQ=", - "usagesDigest": "dMk5TOHswAZLEIKE5VenuXubFWbTzMdJplFIkYHPSSU=", + "usagesDigest": "sdqp9yj+PY7j/QqeodNDzIPDsgW02WGMxb76v6YZfBM=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -1191,7 +1191,7 @@ "@@rules_python~//python/extensions/private:internal_deps.bzl%internal_deps": { "general": { "bzlTransitiveDigest": "X9KNWFFpQp2+YidRYA7/EpZiRW/JtKz7Qh788dYYBlM=", - "usagesDigest": "B/G2N6d9Y4VpHFgkQT4wRYFBJ9RP+vFT/Ngiwz7Ejt8=", + "usagesDigest": "ckBX0TASrGH+IURVs99U68Ub17sjGKe25FfdEE51DWg=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {},