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()); + } }