diff --git a/changes/src/main/org/apache/maven/changes/ReleaseVersion.java b/changes/src/main/org/apache/maven/changes/ReleaseVersion.java
index 86f0cdea..eb30a36c 100644
--- a/changes/src/main/org/apache/maven/changes/ReleaseVersion.java
+++ b/changes/src/main/org/apache/maven/changes/ReleaseVersion.java
@@ -28,7 +28,7 @@ import org.dom4j.io.*;
/**
* @author Brett Porter
*
- * @version $Id: ReleaseVersion.java,v 1.2 2004/03/02 15:37:56 evenisse Exp $
+ * @version $Id: ReleaseVersion.java,v 1.3 2004/04/22 07:34:56 brett Exp $
*/
public class ReleaseVersion
{
@@ -39,7 +39,7 @@ public class ReleaseVersion
releaseVersion( changesFile, currentVersion, version, dateFormat.format( new Date() ) );
}
- public static final void releaseVersion( File changesFile, String currentVersion, String version, String date )
+ static final Document transformVersion( File changesFile, String currentVersion, String version, String date )
throws DocumentException, FileNotFoundException, UnsupportedEncodingException, IOException
{
SAXReader r = new SAXReader();
@@ -52,18 +52,38 @@ public class ReleaseVersion
for ( Iterator i = releases.elementIterator( "release" ); i.hasNext(); )
{
- Element e = (Element) i.next();
+ Element e = ( Element ) i.next();
Attribute v = e.attribute( "version" );
if ( v != null )
{
String text = v.getText();
+ Attribute d = e.attribute( "date" );
+ boolean updateRelease = false;
if ( text.equals( currentVersion ) || text.equals( version ) )
+ {
+ updateRelease = true;
+ }
+ if ( updateRelease && d != null )
+ {
+ DateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd" );
+ try
+ {
+ dateFormat.parse( d.getText() );
+ // date is set correctly
+ updateRelease = false;
+ }
+ catch ( ParseException ex )
+ {
+ // intentional
+ }
+ }
+
+ if ( updateRelease )
{
v.setText( version );
- Attribute d = e.attribute( "date" );
if ( d == null )
{
e.addAttribute( "date", date );
@@ -72,10 +92,25 @@ public class ReleaseVersion
{
d.setText( date );
}
+ return doc;
}
}
}
-
+
+ // indicates no transform necessary
+ return null;
+ }
+
+ public static final void releaseVersion( File changesFile, String currentVersion, String version, String date )
+ throws DocumentException, FileNotFoundException, UnsupportedEncodingException, IOException
+ {
+ Document doc = transformVersion( changesFile, currentVersion, version, date );
+ if ( doc == null )
+ {
+ // no transform necessary
+ return;
+ }
+
// Backup the original first.
FileUtils.copyFile( changesFile, new File( changesFile + ".backup" ) );
@@ -91,3 +126,4 @@ public class ReleaseVersion
writer.write( doc );
}
}
+
diff --git a/changes/src/test-data/test-existing-release-current-version-in-cvs.xml b/changes/src/test-data/test-existing-release-current-version-in-cvs.xml
new file mode 100644
index 00000000..d6aae4b1
--- /dev/null
+++ b/changes/src/test-data/test-existing-release-current-version-in-cvs.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+ Changes plugin changes
+ Brett Porter
+
+
+
+ Don't overwrite currentVersion if it already has a release date. Add unit tests.
+
+
+
diff --git a/changes/src/test-data/test-existing-release-current-version-released-and-target-version-in-cvs.xml b/changes/src/test-data/test-existing-release-current-version-released-and-target-version-in-cvs.xml
new file mode 100644
index 00000000..535586a7
--- /dev/null
+++ b/changes/src/test-data/test-existing-release-current-version-released-and-target-version-in-cvs.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+ Changes plugin changes
+ Brett Porter
+
+
+
+ Fix something else
+
+
+ Fix something
+
+
+
diff --git a/changes/src/test-data/test-existing-release-current-version-released-and-target-version-released.xml b/changes/src/test-data/test-existing-release-current-version-released-and-target-version-released.xml
new file mode 100644
index 00000000..6659ccee
--- /dev/null
+++ b/changes/src/test-data/test-existing-release-current-version-released-and-target-version-released.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+ Changes plugin changes
+ Brett Porter
+
+
+
+ Fix something else
+
+
+ Fix something
+
+
+
diff --git a/changes/src/test-data/test-existing-release-current-version-released.xml b/changes/src/test-data/test-existing-release-current-version-released.xml
new file mode 100644
index 00000000..69da659f
--- /dev/null
+++ b/changes/src/test-data/test-existing-release-current-version-released.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+ Changes plugin changes
+ Brett Porter
+
+
+
+ Fix something
+
+
+
diff --git a/changes/src/test-data/test-existing-release-target-version-in-cvs.xml b/changes/src/test-data/test-existing-release-target-version-in-cvs.xml
new file mode 100644
index 00000000..9aaf22d8
--- /dev/null
+++ b/changes/src/test-data/test-existing-release-target-version-in-cvs.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+ Changes plugin changes
+ Brett Porter
+
+
+
+ Fix something
+
+
+
diff --git a/changes/src/test-data/test-existing-release-target-version-released.xml b/changes/src/test-data/test-existing-release-target-version-released.xml
new file mode 100644
index 00000000..69da659f
--- /dev/null
+++ b/changes/src/test-data/test-existing-release-target-version-released.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+ Changes plugin changes
+ Brett Porter
+
+
+
+ Fix something
+
+
+
diff --git a/changes/src/test-data/test-no-versions.xml b/changes/src/test-data/test-no-versions.xml
new file mode 100644
index 00000000..94d46f5a
--- /dev/null
+++ b/changes/src/test-data/test-no-versions.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+ Changes plugin changes
+ Brett Porter
+
+
+
+
diff --git a/changes/src/test-data/test-one-unrelated-release.xml b/changes/src/test-data/test-one-unrelated-release.xml
new file mode 100644
index 00000000..f9de2a3e
--- /dev/null
+++ b/changes/src/test-data/test-one-unrelated-release.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+ Changes plugin changes
+ Brett Porter
+
+
+
+ Don't overwrite currentVersion if it already has a release date. Add unit tests.
+
+
+
diff --git a/changes/src/test/org/apache/maven/changes/ReleaseVersionTest.java b/changes/src/test/org/apache/maven/changes/ReleaseVersionTest.java
new file mode 100644
index 00000000..5cd66a93
--- /dev/null
+++ b/changes/src/test/org/apache/maven/changes/ReleaseVersionTest.java
@@ -0,0 +1,241 @@
+package org.apache.maven.changes;
+
+/* ====================================================================
+ * Copyright 2001-2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ====================================================================
+ */
+
+import junit.framework.TestCase;
+
+import java.io.File;
+import java.util.List;
+
+import org.dom4j.Element;
+import org.dom4j.Document;
+import org.dom4j.io.SAXReader;
+
+/**
+ */
+public class ReleaseVersionTest
+ extends TestCase
+{
+ /**
+ * Constructor.
+ *
+ * @param name Name of the test.
+ */
+ public ReleaseVersionTest( String name )
+ {
+ super( name );
+ }
+
+ public void testExistingReleaseTargetVersionReleased()
+ throws Exception
+ {
+ File changesFile = new File( System.getProperty( "basedir" ), "/src/test-data/test-existing-release-target-version-released.xml" );
+ Document doc = ReleaseVersion.transformVersion( changesFile, "1.1", "1.2", "2004-04-21" );
+
+ assertNull( "check transform required", doc );
+
+ SAXReader r = new SAXReader();
+
+ doc = r.read( changesFile );
+
+ List nodes = doc.selectNodes( "/document/body/release" );
+
+ assertEquals( "check exactly 1 release", 1, nodes.size() );
+
+ Element release = ( Element ) nodes.get( 0 );
+
+ assertEquals( "Check version is 1.2", "1.2", release.attribute( "version" ).getText() );
+ assertEquals( "Check date is 2003-03-23", "2003-03-23", release.attribute( "date" ).getText() );
+ }
+
+ public void testExistingReleaseTargetVersionInCvs()
+ throws Exception
+ {
+ File changesFile = new File( System.getProperty( "basedir" ), "/src/test-data/test-existing-release-target-version-in-cvs.xml" );
+ Document doc = ReleaseVersion.transformVersion( changesFile, "1.1", "1.2", "2004-04-21" );
+
+ assertNotNull( "check transform required", doc );
+
+ List nodes = doc.selectNodes( "/document/body/release" );
+
+ assertEquals( "check exactly 1 release", 1, nodes.size() );
+
+ Element release = ( Element ) nodes.get( 0 );
+
+ assertEquals( "Check version is 1.2", "1.2", release.attribute( "version" ).getText() );
+ assertEquals( "Check date is 2004-04-21", "2004-04-21", release.attribute( "date" ).getText() );
+ }
+
+ public void testExistingReleaseCurrentVersionReleasedAndTargetVersionInCvs()
+ throws Exception
+ {
+ File changesFile = new File( System.getProperty( "basedir" ), "/src/test-data/test-existing-release-current-version-released-and-target-version-in-cvs.xml" );
+ Document doc = ReleaseVersion.transformVersion( changesFile, "1.1", "1.2", "2004-04-21" );
+
+ assertNotNull( "check transform required", doc );
+
+ List nodes = doc.selectNodes( "/document/body/release" );
+
+ assertEquals( "check exactly 2 releases", 2, nodes.size() );
+
+ Element release = ( Element ) nodes.get( 0 );
+
+ assertEquals( "Check version is 1.2", "1.2", release.attribute( "version" ).getText() );
+ assertEquals( "Check date is 2004-04-21", "2004-04-21", release.attribute( "date" ).getText() );
+
+ release = ( Element ) nodes.get( 1 );
+
+ assertEquals( "Check version is 1.1", "1.1", release.attribute( "version" ).getText() );
+ assertEquals( "Check date is 2003-03-23", "2003-03-23", release.attribute( "date" ).getText() );
+ }
+
+ public void testExistingReleaseCurrentVersionReleasedAndTargetVersionReleased()
+ throws Exception
+ {
+ File changesFile = new File( System.getProperty( "basedir" ), "/src/test-data/test-existing-release-current-version-released-and-target-version-released.xml" );
+ Document doc = ReleaseVersion.transformVersion( changesFile, "1.1", "1.2", "2004-04-21" );
+
+ assertNull( "check transform required", doc );
+
+ SAXReader r = new SAXReader();
+
+ doc = r.read( changesFile );
+
+ List nodes = doc.selectNodes( "/document/body/release" );
+
+ assertEquals( "check exactly 2 releases", 2, nodes.size() );
+
+ Element release = ( Element ) nodes.get( 0 );
+
+ assertEquals( "Check version is 1.2", "1.2", release.attribute( "version" ).getText() );
+ assertEquals( "Check date is 2003-03-23", "2003-03-23", release.attribute( "date" ).getText() );
+
+ release = ( Element ) nodes.get( 1 );
+
+ assertEquals( "Check version is 1.1", "1.1", release.attribute( "version" ).getText() );
+ assertEquals( "Check date is 2002-02-22", "2002-02-22", release.attribute( "date" ).getText() );
+ }
+
+ public void testExistingReleaseCurrentVersionReleased()
+ throws Exception
+ {
+ File changesFile = new File( System.getProperty( "basedir" ), "/src/test-data/test-existing-release-current-version-released.xml" );
+ Document doc = ReleaseVersion.transformVersion( changesFile, "1.2", "1.2", "2004-04-21" );
+
+ assertNull( "check transform required", doc );
+
+ SAXReader r = new SAXReader();
+
+ doc = r.read( changesFile );
+
+ List nodes = doc.selectNodes( "/document/body/release" );
+
+ assertEquals( "check exactly 1 release", 1, nodes.size() );
+
+ Element release = ( Element ) nodes.get( 0 );
+
+ assertEquals( "Check version is 1.2", "1.2", release.attribute( "version" ).getText() );
+ assertEquals( "Check date is 2004-04-21", "2003-03-23", release.attribute( "date" ).getText() );
+ }
+
+ public void testExistingReleaseCurrentVersionInCvs()
+ throws Exception
+ {
+ Document doc = ReleaseVersion.transformVersion(
+ new File( System.getProperty( "basedir" ), "/src/test-data/test-existing-release-current-version-in-cvs.xml" ),
+ "1.2-SNAPSHOT", "1.2", "2004-04-21" );
+
+ assertNotNull( "check transform required", doc );
+
+ List nodes = doc.selectNodes( "/document/body/release" );
+
+ assertEquals( "check exactly 1 release", 1, nodes.size() );
+
+ Element release = ( Element ) nodes.get( 0 );
+
+ assertEquals( "Check version is 1.2", "1.2", release.attribute( "version" ).getText() );
+ assertEquals( "Check date is 2004-04-21", "2004-04-21", release.attribute( "date" ).getText() );
+ }
+
+ public void testOneUnrelatedRelease()
+ throws Exception
+ {
+ File changesFile = new File( System.getProperty( "basedir" ), "/src/test-data/test-one-unrelated-release.xml" );
+ Document doc = ReleaseVersion.transformVersion( changesFile, "1.2-SNAPSHOT", "1.2", "2004-04-21" );
+
+ assertNull( "check transform required", doc );
+
+ SAXReader r = new SAXReader();
+ doc = r.read( changesFile );
+
+ List nodes = doc.selectNodes( "/document/body/release" );
+
+ assertEquals( "check exactly 1 releases", 1, nodes.size() );
+
+ Element release = ( Element ) nodes.get( 0 );
+
+ assertEquals( "Check version is 1.1", "1.1", release.attribute( "version" ).getText() );
+ assertEquals( "Check date is 2003-03-23", "2003-03-23", release.attribute( "date" ).getText() );
+
+ /* assumes addition of elements
+ assertNotNull( "check transform required", doc );
+
+ List nodes = doc.selectNodes( "/document/body/release" );
+
+ assertEquals( "check exactly 2 releases", 2, nodes.size() );
+
+ Element release = ( Element ) nodes.get( 0 );
+
+ assertEquals( "Check version is 1.2", "1.2", release.attribute( "version" ).getText() );
+ assertEquals( "Check date is 2004-04-21", "2004-04-21", release.attribute( "date" ).getText() );
+
+ release = ( Element ) nodes.get( 1 );
+ assertEquals( "Check version is 1.1", "1.1", release.attribute( "version" ).getText() );
+ assertEquals( "Check date is 2003-03-23", "2003-03-23", release.attribute( "date" ).getText() );
+*/
+ }
+
+ public void testNoReleases()
+ throws Exception
+ {
+ File changesFile = new File( System.getProperty( "basedir" ), "/src/test-data/test-no-versions.xml" );
+ Document doc = ReleaseVersion.transformVersion( changesFile, "1.0-SNAPSHOT", "1.0", "2004-04-21" );
+
+ assertNull( "check transform required", doc );
+ SAXReader r = new SAXReader();
+ doc = r.read( changesFile );
+
+ List nodes = doc.selectNodes( "/document/body/release" );
+
+ assertEquals( "check no release", 0, nodes.size() );
+
+ /* assumes addition of elements
+ assertNotNull( "check transform required", doc );
+
+ List nodes = doc.selectNodes( "/document/body/release" );
+
+ assertEquals( "check only 1 release", 1, nodes.size() );
+
+ Element release = ( Element ) nodes.get( 0 );
+
+ assertEquals( "Check version is 1.0", "1.0", release.attribute( "version" ).getText() );
+ assertEquals( "Check date is 2004-04-21", "2004-04-21", release.attribute( "date" ).getText() );
+ */
+ }
+}
+
diff --git a/changes/xdocs/changes.xml b/changes/xdocs/changes.xml
index 1be94bb3..b02554cc 100644
--- a/changes/xdocs/changes.xml
+++ b/changes/xdocs/changes.xml
@@ -24,7 +24,8 @@
Vincent Massol
-
+
+ Don't overwrite currentVersion if it already has a release date. Add unit tests.
Added documentation for the format of changes.xml file.