This is an automated email from the ASF dual-hosted git repository.

cstamas pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven.git


The following commit(s) were added to refs/heads/master by this push:
     new b2953c52d [MNG-7795] IllegalArgumentException: 'other' has different 
root during plugin validation (#1133)
b2953c52d is described below

commit b2953c52d5019213e55d6031fcec132707a2ef3e
Author: Guillaume Nodet <[email protected]>
AuthorDate: Thu Jun 1 19:05:48 2023 +0200

    [MNG-7795] IllegalArgumentException: 'other' has different root during 
plugin validation (#1133)
    
    Checks the paths before relativizing them.
    Normalize and relative before adding to result
    Rename local vars
    Apply to ExecutionEventLogger
    
    ---
    
    https://issues.apache.org/jira/browse/MNG-7795
    
    Co-authored-by: Andreas Dangel <[email protected]>
---
 .../internal/DefaultPluginValidationManager.java   | 24 ++++++++++++----------
 .../maven/cli/event/ExecutionEventLogger.java      |  9 ++++++--
 .../maven/cli/event/ExecutionEventLoggerTest.java  |  2 ++
 3 files changed, 22 insertions(+), 13 deletions(-)

diff --git 
a/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginValidationManager.java
 
b/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginValidationManager.java
index bf4122fa2..736cd77b1 100644
--- 
a/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginValidationManager.java
+++ 
b/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginValidationManager.java
@@ -22,6 +22,8 @@ import javax.inject.Named;
 import javax.inject.Singleton;
 
 import java.io.File;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
 
@@ -261,16 +263,12 @@ public final class DefaultPluginValidationManager extends 
AbstractEventSpy imple
                 if (location.contains("://")) {
                     stringBuilder.append(" (").append(location).append(")");
                 } else {
-                    File rootBasedir = 
mavenSession.getTopLevelProject().getBasedir();
-                    File locationFile = new File(location);
-                    if (location.startsWith(rootBasedir.getPath())) {
-                        stringBuilder
-                                .append(" (")
-                                
.append(rootBasedir.toPath().relativize(locationFile.toPath()))
-                                .append(")");
-                    } else {
-                        stringBuilder.append(" 
(").append(location).append(")");
+                    Path topDirectory = mavenSession.getTopDirectory();
+                    Path locationPath = 
Paths.get(location).toAbsolutePath().normalize();
+                    if (locationPath.startsWith(topDirectory)) {
+                        locationPath = topDirectory.relativize(locationPath);
                     }
+                    stringBuilder.append(" 
(").append(locationPath).append(")");
                 }
             }
             stringBuilder.append(" @ line 
").append(inputLocation.getLineNumber());
@@ -285,8 +283,12 @@ public final class DefaultPluginValidationManager extends 
AbstractEventSpy imple
         String result = prj.getGroupId() + ":" + prj.getArtifactId() + ":" + 
prj.getVersion();
         File currentPom = prj.getFile();
         if (currentPom != null) {
-            File rootBasedir = mavenSession.getTopLevelProject().getBasedir();
-            result += " (" + 
rootBasedir.toPath().relativize(currentPom.toPath()) + ")";
+            Path topDirectory = mavenSession.getTopDirectory();
+            Path current = currentPom.toPath().toAbsolutePath().normalize();
+            if (current.startsWith(topDirectory)) {
+                current = topDirectory.relativize(current);
+            }
+            result += " (" + current + ")";
         }
         return result;
     }
diff --git 
a/maven-embedder/src/main/java/org/apache/maven/cli/event/ExecutionEventLogger.java
 
b/maven-embedder/src/main/java/org/apache/maven/cli/event/ExecutionEventLogger.java
index ca5554339..ae591850b 100644
--- 
a/maven-embedder/src/main/java/org/apache/maven/cli/event/ExecutionEventLogger.java
+++ 
b/maven-embedder/src/main/java/org/apache/maven/cli/event/ExecutionEventLogger.java
@@ -19,6 +19,7 @@
 package org.apache.maven.cli.event;
 
 import java.io.File;
+import java.nio.file.Path;
 import java.util.List;
 import java.util.Objects;
 
@@ -336,8 +337,12 @@ public class ExecutionEventLogger extends 
AbstractExecutionListener {
             File currentPom = project.getFile();
             if (currentPom != null) {
                 MavenSession session = event.getSession();
-                File rootBasedir = session.getTopLevelProject().getBasedir();
-                logger.info("  from " + 
rootBasedir.toPath().relativize(currentPom.toPath()));
+                Path topDirectory = session.getTopDirectory();
+                Path current = 
currentPom.toPath().toAbsolutePath().normalize();
+                if (current.startsWith(topDirectory)) {
+                    current = topDirectory.relativize(current);
+                }
+                logger.info("  from " + current);
             }
 
             // ----------[ packaging ]----------
diff --git 
a/maven-embedder/src/test/java/org/apache/maven/cli/event/ExecutionEventLoggerTest.java
 
b/maven-embedder/src/test/java/org/apache/maven/cli/event/ExecutionEventLoggerTest.java
index 7e830f45c..59b8dc282 100644
--- 
a/maven-embedder/src/test/java/org/apache/maven/cli/event/ExecutionEventLoggerTest.java
+++ 
b/maven-embedder/src/test/java/org/apache/maven/cli/event/ExecutionEventLoggerTest.java
@@ -80,6 +80,7 @@ class ExecutionEventLoggerTest {
         when(rootProject.getBasedir()).thenReturn(basedir);
         MavenSession session = mock(MavenSession.class);
         when(session.getTopLevelProject()).thenReturn(rootProject);
+        when(session.getTopDirectory()).thenReturn(basedir.toPath());
         when(event.getSession()).thenReturn(session);
 
         // execute
@@ -112,6 +113,7 @@ class ExecutionEventLoggerTest {
         MavenSession session = mock(MavenSession.class);
         when(session.getTopLevelProject()).thenReturn(project);
         when(event.getSession()).thenReturn(session);
+        when(session.getTopDirectory()).thenReturn(basedir.toPath());
 
         // execute
         executionEventLogger.projectStarted(event);

Reply via email to