You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by de...@apache.org on 2009/11/26 15:38:57 UTC

svn commit: r884570 - in /maven/plugins/trunk/maven-changes-plugin/src: main/java/org/apache/maven/plugin/announcement/AnnouncementMojo.java test/java/org/apache/maven/plugin/announcement/AnnouncementMojoTest.java

Author: dennisl
Date: Thu Nov 26 14:38:57 2009
New Revision: 884570

URL: http://svn.apache.org/viewvc?rev=884570&view=rev
Log:
[MCHANGES-187] If jiraMerge=true then releases that are only in JIRA will not be included in the announcement

o Also make sure that the List parameters are not changed inside the mergeReleases() method. Instead a new List is created for the merged releases.

Modified:
    maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/announcement/AnnouncementMojo.java
    maven/plugins/trunk/maven-changes-plugin/src/test/java/org/apache/maven/plugin/announcement/AnnouncementMojoTest.java

Modified: maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/announcement/AnnouncementMojo.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/announcement/AnnouncementMojo.java?rev=884570&r1=884569&r2=884570&view=diff
==============================================================================
--- maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/announcement/AnnouncementMojo.java (original)
+++ maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/announcement/AnnouncementMojo.java Thu Nov 26 14:38:57 2009
@@ -23,6 +23,7 @@
 import java.io.FileOutputStream;
 import java.io.OutputStreamWriter;
 import java.io.Writer;
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
@@ -473,7 +474,13 @@
         return release;
     }
 
-
+    /**
+     * Get a release with the specified version from the list of releases.
+     *
+     * @param releases A list of releases
+     * @param version The version we want
+     * @return A Release, or null if no release with the specified version can be found
+     */
     protected Release getRelease( List releases, String version )
     {
         Release release = null;
@@ -637,34 +644,60 @@
         }
     }
 
-    protected List mergeReleases( List changesReleases, List jiraReleases )
+    /**
+     * Merge releases from one issue tracker with releases from another issue
+     * tracker. If a release is found in both issue trackers, i.e. they have
+     * the same version, their issues are merged into one release.
+     *
+     * @param firstReleases Releases from the first issue tracker
+     * @param secondReleases Releases from the second issue tracker
+     * @return A list containing the merged releases
+     */
+    protected List mergeReleases( final List firstReleases, final List secondReleases )
     {
-        if ( changesReleases == null && jiraReleases == null )
+        if ( firstReleases == null && secondReleases == null )
         {
             return Collections.EMPTY_LIST;
         }
-        if ( changesReleases == null )
+        if ( firstReleases == null )
         {
-            return jiraReleases;
+            return secondReleases;
         }
-        if ( jiraReleases == null )
+        if ( secondReleases == null )
         {
-            return changesReleases;
+            return firstReleases;
         }
 
-        for ( Iterator iterator = changesReleases.iterator(); iterator.hasNext(); )
+        List mergedReleases = new ArrayList();
+
+        // Loop through the releases from the first issue tracker, merging in
+        // actions from releases with the same version from the second issue
+        // tracker
+        for ( Iterator iterator = firstReleases.iterator(); iterator.hasNext(); )
         {
-            Release release = (Release) iterator.next();
-            Release jiraRelease = getRelease( jiraReleases, release.getVersion() );
-            if ( jiraRelease != null )
+            Release firstRelease = (Release) iterator.next();
+            Release secondRelease = getRelease( secondReleases, firstRelease.getVersion() );
+            if ( secondRelease != null )
             {
-                if ( jiraRelease.getActions() != null )
+                if ( secondRelease.getActions() != null )
                 {
-                    release.getActions().addAll( jiraRelease.getActions() );
+                    firstRelease.getActions().addAll( secondRelease.getActions() );
                 }
             }
+            mergedReleases.add(firstRelease);
+        }
+
+        // Handle releases that are only in the second issue tracker
+        for ( Iterator iterator = secondReleases.iterator(); iterator.hasNext(); )
+        {
+            Release secondRelease = (Release) iterator.next();
+            Release mergedRelease = getRelease( mergedReleases, secondRelease.getVersion() );
+            if ( mergedRelease == null )
+            {
+                mergedReleases.add(secondRelease);
+            }
         }
-        return changesReleases;
+        return mergedReleases;
     }
 
     /*

Modified: maven/plugins/trunk/maven-changes-plugin/src/test/java/org/apache/maven/plugin/announcement/AnnouncementMojoTest.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-changes-plugin/src/test/java/org/apache/maven/plugin/announcement/AnnouncementMojoTest.java?rev=884570&r1=884569&r2=884570&view=diff
==============================================================================
--- maven/plugins/trunk/maven-changes-plugin/src/test/java/org/apache/maven/plugin/announcement/AnnouncementMojoTest.java (original)
+++ maven/plugins/trunk/maven-changes-plugin/src/test/java/org/apache/maven/plugin/announcement/AnnouncementMojoTest.java Thu Nov 26 14:38:57 2009
@@ -2,8 +2,11 @@
 
 import java.io.File;
 import java.io.FileReader;
+import java.util.ArrayList;
+import java.util.List;
 
 import org.apache.maven.plugin.testing.AbstractMojoTestCase;
+import org.apache.maven.plugins.changes.model.Release;
 import org.codehaus.plexus.util.FileUtils;
 import org.codehaus.plexus.util.IOUtil;
 
@@ -66,9 +69,9 @@
         String result = IOUtil.toString( fileReader );
 
         assertContains( "Nice library", result );
-        
+
         assertContains( "Changes in this version include:", result );
-        
+
         assertContains( "New features:", result );
 
         assertContains( "o Added additional documentation on how to configure the plugin.", result );
@@ -94,4 +97,45 @@
     {
         assertTrue( announce.indexOf( content ) > 0 );
     }
+
+    public void testmergeReleases() throws Exception
+    {
+      List firstReleases = new ArrayList();
+      List secondReleases = new ArrayList();
+      List mergedReleases;
+      AnnouncementMojo mojo = new AnnouncementMojo();
+
+      mergedReleases = mojo.mergeReleases(firstReleases, secondReleases);
+      assertEquals("Both empty", 0, mergedReleases.size());
+
+      Release release = new Release();
+      release.setVersion("1.0");
+      firstReleases.add(release);
+
+      mergedReleases = mojo.mergeReleases(firstReleases, secondReleases);
+      assertEquals("One release in first", 1, mergedReleases.size());
+
+      release = new Release();
+      release.setVersion("1.1");
+      secondReleases.add(release);
+
+      mergedReleases = mojo.mergeReleases(firstReleases, secondReleases);
+      assertEquals("One release each", 2, mergedReleases.size());
+
+      release = new Release();
+      release.setVersion("1.1");
+      firstReleases.add(release);
+
+      mergedReleases = mojo.mergeReleases(firstReleases, secondReleases);
+      assertEquals("Two releases in first, one release in second with one version being the same",
+                   2, mergedReleases.size());
+
+      release = new Release();
+      release.setVersion("1.2");
+      secondReleases.add(release);
+
+      mergedReleases = mojo.mergeReleases(firstReleases, secondReleases);
+      assertEquals("Two releases each with one version being the same",
+                   3, mergedReleases.size());
+    }
 }