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 2daeac3132866b..b75e3955b02aa7 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 @@ -84,9 +84,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 b4ecccaadae6ab..52fa63a48bbde3 100644 --- a/src/test/py/bazel/bzlmod/bazel_lockfile_test.py +++ b/src/test/py/bazel/bzlmod/bazel_lockfile_test.py @@ -2597,6 +2597,62 @@ def testModuleExtensionRerunsOnGetenvChanges(self): stderr = '\n'.join(stderr) self.assertIn('LAZYEVAL_KEY=None', stderr) + 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__': absltest.main() diff --git a/src/test/tools/bzlmod/MODULE.bazel.lock b/src/test/tools/bzlmod/MODULE.bazel.lock index d778024982906d..7aeeeb718a4cd0 100644 --- a/src/test/tools/bzlmod/MODULE.bazel.lock +++ b/src/test/tools/bzlmod/MODULE.bazel.lock @@ -62,7 +62,7 @@ "@@platforms//host:extension.bzl%host_platform": { "general": { "bzlTransitiveDigest": "xelQcPZH8+tmuOHVjL9vDxMnnQNMlwj0SlvgoqBkm4U=", - "usagesDigest": "whARuERE2fGO0oER/yUJ9UnuDcSkR227eYWZUVNy/3Y=", + "usagesDigest": "BsEIFMvXBOQ6RUjjEzt6CU2+w+vAjFwqp58drqCa2jo=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -79,7 +79,7 @@ "@@rules_jvm_external+//:extensions.bzl%maven": { "general": { "bzlTransitiveDigest": "tgBpQFC46MaT8n2UeSnG4GNQ8M01bKKTeEWQX+cuoSA=", - "usagesDigest": "G7bV9l+zJ2RkplFf3E987nj8RPcxAqfzTHS5Zdc3rZw=", + "usagesDigest": "sl3uEZVp3ixjaQzCfAguinRv5zcKQM68YRioCHBX0cE=", "recordedFileInputs": { "@@rules_jvm_external+//rules_jvm_external_deps_install.json": "10442a5ae27d9ff4c2003e5ab71643bf0d8b48dcf968b4173fa274c3232a8c06" }, @@ -1103,7 +1103,7 @@ "@@rules_jvm_external+//:non-module-deps.bzl%non_module_deps": { "general": { "bzlTransitiveDigest": "7dxAT2NQpsWXJNV5Sy6o7E78vgRhVEN1vlZdrexTMZY=", - "usagesDigest": "Ogn82YkpKa5kvheD/dv6YN0tP3nfvTIqAuPJrebCbWM=", + "usagesDigest": "xWSELLxz/xEmLvX/KEddTujJEVrOIQ4j7cs6BkF2J4s=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -1131,7 +1131,7 @@ "@@rules_python+//python/extensions:python.bzl%python": { "general": { "bzlTransitiveDigest": "z35lvtk23Cj8pA0OHXIWJQ+sP4WORVrujhMDtWGyqo8=", - "usagesDigest": "dMk5TOHswAZLEIKE5VenuXubFWbTzMdJplFIkYHPSSU=", + "usagesDigest": "tmZ6sMJ23K1YYNMIBcEX0sXPX3I2o7ICQethLTZQvuM=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -1161,7 +1161,7 @@ "@@rules_python+//python/extensions/private:internal_deps.bzl%internal_deps": { "general": { "bzlTransitiveDigest": "59ucGaK2UFzBbVlrE4x4O1jM4EWKd3zAXRUH63T4j68=", - "usagesDigest": "B/G2N6d9Y4VpHFgkQT4wRYFBJ9RP+vFT/Ngiwz7Ejt8=", + "usagesDigest": "T+GX/uEOF49O6I6zgLru1E6pJLzL0nzFKcKsMpGGm4I=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {},