From d9d79a4f0b4c3f5ece2b099d61fa587fc6987920 Mon Sep 17 00:00:00 2001 From: brett Date: Thu, 22 Apr 2004 07:34:57 +0000 Subject: [PATCH] PR: MPCHANGES-7 fix version handling git-svn-id: https://svn.apache.org/repos/asf/maven/maven-1/plugins/trunk@115032 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/maven/changes/ReleaseVersion.java | 46 +++- ...xisting-release-current-version-in-cvs.xml | 31 +++ ...ion-released-and-target-version-in-cvs.xml | 34 +++ ...n-released-and-target-version-released.xml | 34 +++ ...sting-release-current-version-released.xml | 31 +++ ...existing-release-target-version-in-cvs.xml | 31 +++ ...isting-release-target-version-released.xml | 31 +++ changes/src/test-data/test-no-versions.xml | 28 ++ .../test-data/test-one-unrelated-release.xml | 31 +++ .../maven/changes/ReleaseVersionTest.java | 241 ++++++++++++++++++ changes/xdocs/changes.xml | 3 +- 11 files changed, 535 insertions(+), 6 deletions(-) create mode 100644 changes/src/test-data/test-existing-release-current-version-in-cvs.xml create mode 100644 changes/src/test-data/test-existing-release-current-version-released-and-target-version-in-cvs.xml create mode 100644 changes/src/test-data/test-existing-release-current-version-released-and-target-version-released.xml create mode 100644 changes/src/test-data/test-existing-release-current-version-released.xml create mode 100644 changes/src/test-data/test-existing-release-target-version-in-cvs.xml create mode 100644 changes/src/test-data/test-existing-release-target-version-released.xml create mode 100644 changes/src/test-data/test-no-versions.xml create mode 100644 changes/src/test-data/test-one-unrelated-release.xml create mode 100644 changes/src/test/org/apache/maven/changes/ReleaseVersionTest.java 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.