gnodet-bot commented on code in PR #13537:
URL: https://github.com/apache/maven/pull/13537#discussion_r4301693404


##########
impl/maven-core/src/test/java/org/apache/maven/settings/SettingsUtilsTest.java:
##########
@@ -155,4 +155,66 @@ void testRoundTripProfiles() {
                 p.getPluginRepositories().size(), 
clone.getPluginRepositories().size());
         // TODO deep compare the lists
     }
+
+    @Test
+    void testDominantMirrorsPrecedeRecessiveMirrors() {
+        org.apache.maven.api.settings.Mirror dominantMirror = 
org.apache.maven.api.settings.Mirror.newBuilder()
+                .id("user-mirror")
+                .mirrorOf("insecure-repo")
+                .url("http://insecure.example.com/";)
+                .build();
+        org.apache.maven.api.settings.Mirror recessiveMirror = 
org.apache.maven.api.settings.Mirror.newBuilder()
+                .id("maven-default-http-blocker")
+                .mirrorOf("external:http:*")
+                .url("http://0.0.0.0/";)
+                .blocked(true)
+                .build();
+
+        Settings dominant = 
Settings.newBuilder().mirrors(List.of(dominantMirror)).build();
+        Settings recessive = 
Settings.newBuilder().mirrors(List.of(recessiveMirror)).build();
+
+        Settings merged = SettingsUtilsV4.merge(dominant, recessive);
+
+        List<org.apache.maven.api.settings.Mirror> mirrors = 
merged.getMirrors();
+        assertNotNull(mirrors);
+        assertEquals(2, mirrors.size());
+        assertEquals("user-mirror", mirrors.get(0).getId());
+        assertEquals("maven-default-http-blocker", mirrors.get(1).getId());
+    }
+
+    @Test
+    void testDominantMirrorWinsOnConflict() {
+        org.apache.maven.api.settings.Mirror dominantMirror = 
org.apache.maven.api.settings.Mirror.newBuilder()
+                .id("shared-mirror")
+                .url("http://dominant.example.com/";)
+                .build();
+        org.apache.maven.api.settings.Mirror recessiveMirror = 
org.apache.maven.api.settings.Mirror.newBuilder()
+                .id("shared-mirror")
+                .url("http://recessive.example.com/";)
+                .build();
+
+        Settings dominant = 
Settings.newBuilder().mirrors(List.of(dominantMirror)).build();
+        Settings recessive = 
Settings.newBuilder().mirrors(List.of(recessiveMirror)).build();
+
+        Settings merged = SettingsUtilsV4.merge(dominant, recessive);
+
+        List<org.apache.maven.api.settings.Mirror> mirrors = 
merged.getMirrors();
+        assertNotNull(mirrors);
+        assertEquals(1, mirrors.size());
+        assertEquals("shared-mirror", mirrors.get(0).getId());
+        assertEquals("http://dominant.example.com/";, mirrors.get(0).getUrl());
+    }
+
+    @Test
+    void testDominantSettingsValuesPrecedeRecessive() {
+        Settings dominant = Settings.newBuilder()
+                .localRepository("/dominant/path")
+                .build();
+        Settings recessive = Settings.newBuilder()
+                .localRepository("/recessive/path")
+                .build();
+
+        Settings merged = SettingsUtilsV4.merge(dominant, recessive);
+        assertEquals("/dominant/path", merged.getLocalRepository());
+    }

Review Comment:
   💡 **Nit:** `testDominantSettingsValuesPrecedeRecessive` only covers the 
dominant-wins case (both sides set, dominant wins). Consider adding a second 
assertion for the recessive-fallback case (dominant has no `localRepository`, 
recessive fills the gap) — the mirror-ordering change could theoretically 
affect scalar fallback behavior too.
   
   ```suggestion
       }
   
       @Test
       void testRecessiveSettingsValuesFillGaps() {
           Settings dominant = Settings.newBuilder().build();
           Settings recessive = Settings.newBuilder()
                   .localRepository("/recessive/path")
                   .build();
   
           Settings merged = SettingsUtilsV4.merge(dominant, recessive);
           assertEquals("/recessive/path", merged.getLocalRepository());
       }
   ```



##########
impl/maven-impl/src/main/java/org/apache/maven/impl/DefaultSettingsBuilder.java:
##########
@@ -69,13 +70,35 @@ public class DefaultSettingsBuilder implements 
SettingsBuilder {
 
     private final DefaultSettingsValidator settingsValidator = new 
DefaultSettingsValidator();
 
-    private final SettingsMerger settingsMerger = new SettingsMerger() {
+    static final SettingsMerger SETTINGS_MERGER = new SettingsMerger() {

Review Comment:
   💡 **Nit:** `SETTINGS_MERGER` was promoted from `private final` (instance) to 
`static final` (package-private) so `SettingsUtilsV4` can reuse the same 
configured instance. A brief comment here would help future readers understand 
the coupling:
   
   ```suggestion
       // Package-private so SettingsUtilsV4 can reuse the same configured 
merger instance.
       static final SettingsMerger SETTINGS_MERGER = new SettingsMerger() {
   ```



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to