You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by mi...@apache.org on 2019/07/10 14:48:13 UTC

[maven] 01/01: [MNG-6705] Speep up Artifact version check and Parent interpolation

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

michaelo pushed a commit to branch MNG-6705
in repository https://gitbox.apache.org/repos/asf/maven.git

commit c38f3e44a2646af301f38c7f8fe99f17fc06dd34
Author: Guillaume Nodet <gn...@gmail.com>
AuthorDate: Fri Jun 28 10:44:10 2019 +0200

    [MNG-6705] Speep up Artifact version check and Parent interpolation
    
    This closes #260
---
 .../org/apache/maven/artifact/ArtifactUtils.java   | 40 +++++++++++++++-------
 .../org/apache/maven/artifact/DefaultArtifact.java | 12 +------
 .../maven/model/building/DefaultModelBuilder.java  |  9 +++--
 3 files changed, 34 insertions(+), 27 deletions(-)

diff --git a/maven-artifact/src/main/java/org/apache/maven/artifact/ArtifactUtils.java b/maven-artifact/src/main/java/org/apache/maven/artifact/ArtifactUtils.java
index a0f18ad..bd76edd 100644
--- a/maven-artifact/src/main/java/org/apache/maven/artifact/ArtifactUtils.java
+++ b/maven-artifact/src/main/java/org/apache/maven/artifact/ArtifactUtils.java
@@ -54,17 +54,22 @@ public final class ArtifactUtils
 
     public static String toSnapshotVersion( String version )
     {
-        Validate.notBlank( version, "version can neither be null, empty nor blank" );
+        notBlank( version, "version can neither be null, empty nor blank" );
 
-        Matcher m = Artifact.VERSION_FILE_PATTERN.matcher( version );
-        if ( m.matches() )
+        int lastHyphen = version.lastIndexOf( '-' );
+        if ( lastHyphen > 0 )
         {
-            return m.group( 1 ) + "-" + Artifact.SNAPSHOT_VERSION;
-        }
-        else
-        {
-            return version;
+            int prevHyphen = version.lastIndexOf( '-', lastHyphen - 1 );
+            if ( prevHyphen > 0 )
+            {
+                Matcher m = Artifact.VERSION_FILE_PATTERN.matcher( version );
+                if ( m.matches() )
+                {
+                    return m.group( 1 ) + "-" + Artifact.SNAPSHOT_VERSION;
+                }
+            }
         }
+        return version;
     }
 
     public static String versionlessKey( Artifact artifact )
@@ -74,8 +79,8 @@ public final class ArtifactUtils
 
     public static String versionlessKey( String groupId, String artifactId )
     {
-        Validate.notBlank( groupId, "groupId can neither be null, empty nor blank" );
-        Validate.notBlank( artifactId, "artifactId can neither be null, empty nor blank" );
+        notBlank( groupId, "groupId can neither be null, empty nor blank" );
+        notBlank( artifactId, "artifactId can neither be null, empty nor blank" );
 
         return groupId + ":" + artifactId;
     }
@@ -87,13 +92,22 @@ public final class ArtifactUtils
 
     public static String key( String groupId, String artifactId, String version )
     {
-        Validate.notBlank( groupId, "groupId can neither be null, empty nor blank" );
-        Validate.notBlank( artifactId, "artifactId can neither be null, empty nor blank" );
-        Validate.notBlank( version, "version can neither be null, empty nor blank" );
+        notBlank( groupId, "groupId can neither be null, empty nor blank" );
+        notBlank( artifactId, "artifactId can neither be null, empty nor blank" );
+        notBlank( version, "version can neither be null, empty nor blank" );
 
         return groupId + ":" + artifactId + ":" + version;
     }
 
+    private static void notBlank( String str, String message )
+    {
+        int c = str != null && str.length() > 0 ? str.charAt( 0 ) : 0;
+        if ( ( c < '0' || c > '9' ) && ( c < 'a' || c > 'z' ) )
+        {
+            Validate.notBlank( str, message );
+        }
+    }
+
     public static Map<String, Artifact> artifactMapByVersionlessId( Collection<Artifact> artifacts )
     {
         Map<String, Artifact> artifactMap = new LinkedHashMap<>();
diff --git a/maven-artifact/src/main/java/org/apache/maven/artifact/DefaultArtifact.java b/maven-artifact/src/main/java/org/apache/maven/artifact/DefaultArtifact.java
index 3fa1907..d63d6c9 100644
--- a/maven-artifact/src/main/java/org/apache/maven/artifact/DefaultArtifact.java
+++ b/maven-artifact/src/main/java/org/apache/maven/artifact/DefaultArtifact.java
@@ -25,7 +25,6 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.regex.Matcher;
 
 import org.apache.maven.artifact.handler.ArtifactHandler;
 import org.apache.maven.artifact.metadata.ArtifactMetadata;
@@ -387,16 +386,7 @@ public class DefaultArtifact
 
     protected void setBaseVersionInternal( String baseVersion )
     {
-        Matcher m = VERSION_FILE_PATTERN.matcher( baseVersion );
-
-        if ( m.matches() )
-        {
-            this.baseVersion = m.group( 1 ) + "-" + SNAPSHOT_VERSION;
-        }
-        else
-        {
-            this.baseVersion = baseVersion;
-        }
+        this.baseVersion = ArtifactUtils.toSnapshotVersion( baseVersion );
     }
 
     public int compareTo( Artifact a )
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
index d127f56..f981944 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
@@ -396,9 +396,12 @@ public class DefaultModelBuilder
         if ( resultModel.getParent() != null )
         {
             final ModelData parentData = lineage.get( 1 );
-            final Model interpolatedParent = interpolateModel( parentData.getModel(), request, problems );
-            // parentData.setModel( interpolatedParent );
-            parentData.setVersion( interpolatedParent.getVersion() );
+            if ( parentData.getVersion() == null || parentData.getVersion().contains( "${" ) )
+            {
+                final Model interpolatedParent = interpolateModel( parentData.getModel(), request, problems );
+                // parentData.setModel( interpolatedParent );
+                parentData.setVersion( interpolatedParent.getVersion() );
+            }
         }
 
         // url normalization