[ 
http://jira.codehaus.org/browse/MNG-3106?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_112045
 ] 

Andy Bryant commented on MNG-3106:
----------------------------------

Something like the following should do the trick. This modifies the 
DefaultProfileManager isActive method so that:
- if no activator matches return false (current behaviour)
- if any activators match, they ALL must consider the profile to be active

Index: DefaultProfileManager.java
===================================================================
--- DefaultProfileManager.java  (revision 590008)
+++ DefaultProfileManager.java  (working copy)
@@ -254,17 +254,27 @@
         {
             activators = container.lookupList( ProfileActivator.ROLE );

+            boolean matchedActivator = false;
+            boolean activate = true;
+
             for ( Iterator activatorIterator = activators.iterator(); 
activatorIterator.hasNext(); )
             {
                 ProfileActivator activator = (ProfileActivator) 
activatorIterator.next();

                 if ( activator.canDetermineActivation( profile ) )
                 {
-                    return activator.isActive( profile );
+                    matchedActivator = true;
+                    activate &= activator.isActive( profile );
                 }
             }
-
-            return false;
+            if (!matchedActivator)
+            {
+                return false;
+            }
+            else
+            {
+                return activate;
+            }
         }
         catch ( ComponentLookupException e )
         {


> Multiple profile activation conditions broken
> ---------------------------------------------
>
>                 Key: MNG-3106
>                 URL: http://jira.codehaus.org/browse/MNG-3106
>             Project: Maven 2
>          Issue Type: Bug
>          Components: Profiles
>    Affects Versions: 2.0.4
>            Reporter: Andy Bryant
>             Fix For: 2.0.x
>
>
> Having multiple profile activation conditions behaves in an unexpected 
> manner. It doesn't cause a build failure, but the actual algorithm for 
> activating a profile is very different from expected. My expectation was that 
> if you include multiple conditions, they are ANDed together. However what 
> appears to happen is that the conditions overwrite each other.
> If an <os> condition is added, it overrides any <property> or <file> 
> conditions regardless of their results.
> If a <file> condition is added, it overrides any <property> condition 
> regardless of results
> The following table gives a sample of conditions matched, and whether the 
> profile was activated as a result:
> Property  File  OS   Result   Expected
>      T           T      -         T                T
>      T           F      -         F                F
>      F           T      -         T                F
>      F           F      -         F                F
>      T           -      T         T                T
>      T           -      F         F                F
>      F           -      T         T                F
>      F           -      F         F                F
>      F           F     T         T                F 
>      T           T      F        F                F

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to