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

rombert pushed a commit to annotated tag slingstart-maven-plugin-1.6.0
in repository 
https://gitbox.apache.org/repos/asf/sling-slingstart-maven-plugin.git

commit 0fdddedcb0fc4e92b65f996e902b4111c86bf55d
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Wed Nov 9 16:44:53 2016 +0000

    SLING-6266 : Feature version should be converted to OSGi version
    
    git-svn-id: 
https://svn.apache.org/repos/asf/sling/trunk/tooling/maven/slingstart-maven-plugin@1768997
 13f79535-47bb-0310-9956-ffa450edef68
---
 .../sling/maven/slingstart/ModelPreprocessor.java  | 65 +++++++++++++++++++++-
 1 file changed, 64 insertions(+), 1 deletion(-)

diff --git 
a/src/main/java/org/apache/sling/maven/slingstart/ModelPreprocessor.java 
b/src/main/java/org/apache/sling/maven/slingstart/ModelPreprocessor.java
index 25d4e92..419de7b 100644
--- a/src/main/java/org/apache/sling/maven/slingstart/ModelPreprocessor.java
+++ b/src/main/java/org/apache/sling/maven/slingstart/ModelPreprocessor.java
@@ -26,6 +26,7 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 import org.apache.commons.io.IOUtils;
@@ -139,7 +140,7 @@ public class ModelPreprocessor {
         if ( nodeBooleanValue(info.plugin, "setFeatureVersions", false) ) {
             for(final Feature f : info.localModel.getFeatures() ) {
                 if ( f.getVersion() == null ) {
-                    f.setVersion(info.project.getVersion());
+                    f.setVersion(cleanupVersion(info.project.getVersion()));
                 }
             }
         }
@@ -582,4 +583,66 @@ public class ModelPreprocessor {
     protected void mergeModels(final Model base, final Model additional) 
throws MavenExecutionException {
         MergeUtility.merge(base, additional);
     }
+
+    /**
+     * Pattern for converting Maven to OSGi version
+     * Based on the DefaultMaven2OsgiConverter from the Apache Maven Project.
+     */
+    private static final Pattern FUZZY_VERSION = Pattern.compile( 
"(\\d+)(\\.(\\d+)(\\.(\\d+))?)?([^a-zA-Z0-9](.*))?",
+        Pattern.DOTALL );
+
+
+    private String cleanupVersion( final String version ) {
+        final StringBuilder result = new StringBuilder();
+        final Matcher m = FUZZY_VERSION.matcher( version );
+        if ( m.matches() ) {
+            final String major = m.group( 1 );
+            final String minor = m.group( 3 );
+            final String micro = m.group( 5 );
+            final String qualifier = m.group( 7 );
+
+            if ( major != null ) {
+                result.append( major );
+                if ( minor != null ) {
+                    result.append( "." );
+                    result.append( minor );
+                    if ( micro != null ) {
+                        result.append( "." );
+                        result.append( micro );
+                        if ( qualifier != null )
+                        {
+                            result.append( "." );
+                            cleanupModifier( result, qualifier );
+                        }
+                    } else if ( qualifier != null ) {
+                        result.append( ".0." );
+                        cleanupModifier( result, qualifier );
+                    } else {
+                        result.append( ".0" );
+                    }
+                } else if ( qualifier != null ) {
+                    result.append( ".0.0." );
+                    cleanupModifier( result, qualifier );
+                } else {
+                    result.append( ".0.0" );
+                }
+            }
+        } else {
+            result.append( "0.0.0." );
+            cleanupModifier( result, version );
+        }
+        return result.toString();
+    }
+
+    private static void cleanupModifier( final StringBuilder result, final 
String modifier )  {
+        for ( int i = 0; i < modifier.length(); i++ ) {
+            final char c = modifier.charAt( i );
+            if ( ( c >= '0' && c <= '9' ) || ( c >= 'a' && c <= 'z' ) || ( c 
>= 'A' && c <= 'Z' ) || c == '_'
+                || c == '-' ) {
+                result.append( c );
+            } else {
+                result.append( '_' );
+            }
+        }
+    }
 }

-- 
To stop receiving notification emails like this one, please contact
"[email protected]" <[email protected]>.

Reply via email to