You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by hb...@apache.org on 2014/03/30 23:46:16 UTC

git commit: [MNG-5612] avoid fully interpolated values for file based profile activation values but effective values calculated during activation

Repository: maven
Updated Branches:
  refs/heads/master e7d8dad4b -> c17578974


[MNG-5612] avoid fully interpolated values for file based profile
activation values but effective values calculated during activation

Project: http://git-wip-us.apache.org/repos/asf/maven/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven/commit/c1757897
Tree: http://git-wip-us.apache.org/repos/asf/maven/tree/c1757897
Diff: http://git-wip-us.apache.org/repos/asf/maven/diff/c1757897

Branch: refs/heads/master
Commit: c17578974716822ad04e72a0ed5c8b9e5e121dab
Parents: e7d8dad
Author: Hervé Boutemy <hb...@apache.org>
Authored: Sun Mar 30 23:46:03 2014 +0200
Committer: Hervé Boutemy <hb...@apache.org>
Committed: Sun Mar 30 23:46:03 2014 +0200

----------------------------------------------------------------------
 .../model/building/DefaultModelBuilder.java     | 67 ++++++++++++++++++++
 .../activation/FileProfileActivator.java        | 10 +++
 2 files changed, 77 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven/blob/c1757897/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
----------------------------------------------------------------------
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 09718ec..12b458e 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
@@ -30,6 +30,8 @@ import java.util.Map;
 import java.util.HashMap;
 import java.util.Properties;
 
+import org.apache.maven.model.Activation;
+import org.apache.maven.model.ActivationFile;
 import org.apache.maven.model.Build;
 import org.apache.maven.model.Dependency;
 import org.apache.maven.model.DependencyManagement;
@@ -284,6 +286,9 @@ public class DefaultModelBuilder
                 profileSelector.getActiveProfiles( rawModel.getProfiles(), profileActivationContext, problems );
             currentData.setActiveProfiles( activePomProfiles );
 
+            Map<String, ActivationFile> interpolatedActivationFiles = getProfileActivationFiles( rawModel, false );
+            injectProfileActivationFiles( tmpModel, interpolatedActivationFiles );
+
             for ( Profile activeProfile : activePomProfiles )
             {
                 profileInjector.injectProfile( tmpModel, activeProfile, request, problems );
@@ -637,10 +642,72 @@ public class DefaultModelBuilder
         }
     }
 
+    private Map<String, ActivationFile> getProfileActivationFiles( Model model, boolean clone )
+    {
+        Map<String, ActivationFile> activationFiles = new HashMap<String, ActivationFile>();
+        for ( Profile profile : model.getProfiles() )
+        {
+            Activation activation = profile.getActivation();
+
+            if ( activation == null )
+            {
+                continue;
+            }
+
+            ActivationFile file = activation.getFile();
+
+            if ( file == null )
+            {
+                continue;
+            }
+
+            if ( clone )
+            {
+                file = file.clone();
+            }
+
+            activationFiles.put( profile.getId(), file );
+        }
+
+        return activationFiles;
+    }
+
+    private void injectProfileActivationFiles( Model model, Map<String, ActivationFile> activationFiles )
+    {
+        for ( Profile profile : model.getProfiles() )
+        {
+            Activation activation = profile.getActivation();
+
+            if ( activation == null )
+            {
+                continue;
+            }
+
+            ActivationFile file = activation.getFile();
+
+            if ( file == null )
+            {
+                continue;
+            }
+
+            // restore file specification
+            ActivationFile originalFile = activationFiles.get( profile.getId() );
+            file.setExists( originalFile.getExists() );
+            file.setMissing( originalFile.getMissing() );
+        }
+    }
+
     private Model interpolateModel( Model model, ModelBuildingRequest request, ModelProblemCollector problems )
     {
+        // save profiles with file activation before interpolation, since they are evaluated with limited scope
+        Map<String, ActivationFile> originalActivationFiles = getProfileActivationFiles( model, true );
+
         Model result = modelInterpolator.interpolateModel( model, model.getProjectDirectory(), request, problems );
         result.setPomFile( model.getPomFile() );
+
+        // restore profiles with file activation to their value before full interpolation
+        injectProfileActivationFiles( model, originalActivationFiles );
+
         return result;
     }
 

http://git-wip-us.apache.org/repos/asf/maven/blob/c1757897/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/FileProfileActivator.java
----------------------------------------------------------------------
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/FileProfileActivator.java b/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/FileProfileActivator.java
index c6d873a..07ba79b 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/FileProfileActivator.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/FileProfileActivator.java
@@ -145,6 +145,16 @@ public class FileProfileActivator
 
         path = pathTranslator.alignToBaseDirectory( path, basedir );
 
+        // replace activation value with interpolated value
+        if ( missing )
+        {
+            file.setMissing( path );
+        }
+        else
+        {
+            file.setExists( path );
+        }
+
         File f = new File( path );
 
         if ( !f.isAbsolute() )