bzlmod: Canonical name should not end with dot

Context:
https://docs.microsoft.com/en-us/troubleshoot/windows-server/backup-and-storage/cannot-delete-file-folder-on-ntfs-file-system#cause-6-the-file-name-includes-an-invalid-name-in-the-win32-name-space

”If you use typical Win32 syntax to open a file that has trailing spaces or trailing periods in its name, the trailing spaces or periods are stripped before the actual file is opened“

Related: https://github.com/bazelbuild/bazel/issues/13316

RELNOTES: None
PiperOrigin-RevId: 396555105
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleKey.java b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleKey.java
index 6a65043..23fe508 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleKey.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleKey.java
@@ -58,12 +58,12 @@
 
   /** Returns the canonical name of the repo backing this module. */
   public String getCanonicalRepoName() {
-    if (this.equals(ROOT)) {
-      return "";
-    }
     if (WELL_KNOWN_MODULES.containsKey(getName())) {
       return WELL_KNOWN_MODULES.get(getName());
     }
+    if (getVersion().isEmpty()) {
+      return getName();
+    }
     return getName() + "." + getVersion();
   }
 }
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BazelModuleResolutionFunctionTest.java b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BazelModuleResolutionFunctionTest.java
index 27ad8d7..0901a85 100644
--- a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BazelModuleResolutionFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BazelModuleResolutionFunctionTest.java
@@ -94,7 +94,7 @@
             "dep.1.0", createModuleKey("dep", "1.0"),
             "dep.2.0", createModuleKey("dep", "2.0"),
             "rules_cc.1.0", createModuleKey("rules_cc", "1.0"),
-            "rules_java.", createModuleKey("rules_java", ""));
+            "rules_java", createModuleKey("rules_java", ""));
     assertThat(value.getModuleNameLookup())
         .containsExactly(
             "rules_cc", createModuleKey("rules_cc", "1.0"),
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BzlmodRepoRuleHelperTest.java b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BzlmodRepoRuleHelperTest.java
index 029f0af..0d8360c 100644
--- a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BzlmodRepoRuleHelperTest.java
+++ b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BzlmodRepoRuleHelperTest.java
@@ -172,19 +172,19 @@
     ModuleFileFunction.REGISTRIES.set(differencer, ImmutableList.of(registry.getUrl()));
 
     EvaluationResult<GetRepoSpecByNameValue> result =
-        driver.evaluate(ImmutableList.of(getRepoSpecByNameKey("C.")), evaluationContext);
+        driver.evaluate(ImmutableList.of(getRepoSpecByNameKey("C")), evaluationContext);
     if (result.hasError()) {
       fail(result.getError().toString());
     }
 
-    Optional<RepoSpec> repoSpec = result.get(getRepoSpecByNameKey("C.")).rule();
+    Optional<RepoSpec> repoSpec = result.get(getRepoSpecByNameKey("C")).rule();
     assertThat(repoSpec)
         .hasValue(
             RepoSpec.builder()
                 .setRuleClassName("local_repository")
                 .setAttributes(
                     ImmutableMap.of(
-                        "name", "C.",
+                        "name", "C",
                         "path", "/foo/bar/C"))
                 .build());
   }
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleFileFunctionTest.java b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleFileFunctionTest.java
index 06a6b46..00bff1c 100644
--- a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleFileFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleFileFunctionTest.java
@@ -214,7 +214,7 @@
                     "",
                     0));
     assertThat(rootModuleFileValue.getNonRegistryOverrideCanonicalRepoNameLookup())
-        .containsExactly("E.", "E", "G.", "G");
+        .containsExactly("E", "E", "G", "G");
   }
 
   @Test
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/StarlarkBazelModuleTest.java b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/StarlarkBazelModuleTest.java
index 04c9958..3939153 100644
--- a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/StarlarkBazelModuleTest.java
+++ b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/StarlarkBazelModuleTest.java
@@ -115,7 +115,7 @@
     assertThat(pomTags.get(0).getValue("pom_xmls"))
         .isEqualTo(
             StarlarkList.immutableOf(
-                Label.parseAbsoluteUnchecked("@foo.//:pom.xml"),
+                Label.parseAbsoluteUnchecked("@foo//:pom.xml"),
                 Label.parseAbsoluteUnchecked("@bar.2.0//:pom.xml")));
   }