Author: nicolas Date: Thu Sep 10 10:06:11 2009 New Revision: 813343 URL: http://svn.apache.org/viewvc?rev=813343&view=rev Log: [MRELEASE-383] svn inconsistent line ending style
CDATA sections after transformation use "\n" as line ending style and break the xml file consistency fix : Filter CDATA sections from jdom tree (like allready done for comments) to apply platform line ending style testcase included Added: maven/release/trunk/maven-release-manager/src/test/resources/projects/rewrite-for-release/cdata-section/ maven/release/trunk/maven-release-manager/src/test/resources/projects/rewrite-for-release/cdata-section/expected-pom.xml maven/release/trunk/maven-release-manager/src/test/resources/projects/rewrite-for-release/cdata-section/pom.xml Modified: maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractRewritePomsPhase.java maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/AbstractReleaseTestCase.java maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/GenerateReleasePomsPhaseTest.java maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/RewritePomsForReleasePhaseTest.java Modified: maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractRewritePomsPhase.java URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractRewritePomsPhase.java?rev=813343&r1=813342&r2=813343&view=diff ============================================================================== --- maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractRewritePomsPhase.java (original) +++ maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractRewritePomsPhase.java Thu Sep 10 10:06:11 2009 @@ -19,6 +19,18 @@ * under the License. */ +import java.io.File; +import java.io.IOException; +import java.io.StringReader; +import java.io.StringWriter; +import java.io.Writer; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + import org.apache.maven.artifact.ArtifactUtils; import org.apache.maven.model.Dependency; import org.apache.maven.model.Extension; @@ -44,6 +56,7 @@ import org.codehaus.plexus.util.IOUtil; import org.codehaus.plexus.util.StringUtils; import org.codehaus.plexus.util.WriterFactory; +import org.jdom.CDATA; import org.jdom.Comment; import org.jdom.Document; import org.jdom.Element; @@ -57,18 +70,6 @@ import org.jdom.output.XMLOutputter; import org.jdom.xpath.XPath; -import java.io.File; -import java.io.IOException; -import java.io.StringReader; -import java.io.StringWriter; -import java.io.Writer; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - /** * Base class for rewriting phases. * @@ -224,6 +225,11 @@ Comment c = (Comment) i.next(); c.setText( ReleaseUtil.normalizeLineEndings( c.getText(), ReleaseUtil.LS ) ); } + for ( Iterator i = document.getDescendants( new ContentFilter( ContentFilter.CDATA ) ); i.hasNext(); ) + { + CDATA c = (CDATA) i.next(); + c.setText( ReleaseUtil.normalizeLineEndings( c.getText(), ReleaseUtil.LS ) ); + } } private void transformDocument( MavenProject project, Element rootElement, ReleaseDescriptor releaseDescriptor, Modified: maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/AbstractReleaseTestCase.java URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/AbstractReleaseTestCase.java?rev=813343&r1=813342&r2=813343&view=diff ============================================================================== --- maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/AbstractReleaseTestCase.java (original) +++ maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/AbstractReleaseTestCase.java Thu Sep 10 10:06:11 2009 @@ -19,6 +19,17 @@ * under the License. */ +import java.io.File; +import java.io.IOException; +import java.io.Reader; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Stack; + import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.ArtifactUtils; import org.apache.maven.artifact.factory.ArtifactFactory; @@ -51,17 +62,6 @@ import org.codehaus.plexus.util.ReaderFactory; import org.jmock.Mock; -import java.io.File; -import java.io.IOException; -import java.io.Reader; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Stack; - /** * Base class for some release tests. * @@ -227,7 +227,13 @@ protected boolean comparePomFiles( List reactorProjects ) throws IOException { - comparePomFiles( reactorProjects, "" ); + return comparePomFiles( reactorProjects, true ); + } + + protected boolean comparePomFiles( List reactorProjects, boolean normalizeLineEndings ) + throws IOException + { + comparePomFiles( reactorProjects, "", normalizeLineEndings ); // TODO: return void since this is redundant return true; @@ -236,28 +242,46 @@ protected void comparePomFiles( List reactorProjects, String expectedFileSuffix ) throws IOException { + comparePomFiles( reactorProjects, expectedFileSuffix, true ); + } + + protected void comparePomFiles( List reactorProjects, String expectedFileSuffix, boolean normalizeLineEndings ) + throws IOException + { for ( Iterator i = reactorProjects.iterator(); i.hasNext(); ) { MavenProject project = (MavenProject) i.next(); - comparePomFiles( project, expectedFileSuffix ); + comparePomFiles( project, expectedFileSuffix, normalizeLineEndings ); } } protected void comparePomFiles( MavenProject project, String expectedFileSuffix ) throws IOException { + comparePomFiles( project, expectedFileSuffix, true ); + } + + protected void comparePomFiles( MavenProject project, String expectedFileSuffix, boolean normalizeLineEndings ) + throws IOException + { File actualFile = project.getFile(); File expectedFile = new File( actualFile.getParentFile(), "expected-pom" + expectedFileSuffix + ".xml" ); - comparePomFiles( expectedFile, actualFile ); + comparePomFiles( expectedFile, actualFile, normalizeLineEndings ); } protected void comparePomFiles( File expectedFile, File actualFile ) throws IOException { - String actual = read( actualFile ); - String expected = read( expectedFile ); + comparePomFiles( expectedFile, actualFile, true ); + } + + protected void comparePomFiles( File expectedFile, File actualFile, boolean normalizeLineEndings ) + throws IOException + { + String actual = read( actualFile, normalizeLineEndings ); + String expected = read( expectedFile, normalizeLineEndings ); expected = expected.replaceAll( "\\$\\{remoterepo\\}", getRemoteRepositoryURL() ); assertEquals( "Check the transformed POM", expected, actual ); } @@ -270,11 +294,24 @@ private String read( File file ) throws IOException { + return read( file, true ); + } + + /** + * Mock-up of {...@link ReleaseUtil#readXmlFile(File)}, except this one REMOVES line endings. There is something fishy + * about the line ending conversion in that method, and it's not the class under test in these test cases. + * + * @param normalizeLineEndings TODO + */ + private String read( File file, boolean normalizeLineEndings ) + throws IOException + { Reader reader = null; try { reader = ReaderFactory.newXmlReader( file ); - return ReleaseUtil.normalizeLineEndings( IOUtil.toString( reader ), "" ); + String xml = IOUtil.toString( reader ); + return normalizeLineEndings ? ReleaseUtil.normalizeLineEndings( xml, "" ) : xml; } finally { Modified: maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/GenerateReleasePomsPhaseTest.java URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/GenerateReleasePomsPhaseTest.java?rev=813343&r1=813342&r2=813343&view=diff ============================================================================== --- maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/GenerateReleasePomsPhaseTest.java (original) +++ maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/GenerateReleasePomsPhaseTest.java Thu Sep 10 10:06:11 2009 @@ -19,6 +19,13 @@ * under the License. */ +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; + import org.apache.maven.Maven; import org.apache.maven.project.MavenProject; import org.apache.maven.scm.ScmFileSet; @@ -35,13 +42,6 @@ import org.jmock.core.matcher.InvokeOnceMatcher; import org.jmock.core.stub.ReturnStub; -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; - /** * Test the generate release POMs phase. * @@ -198,12 +198,14 @@ /* * @see org.apache.maven.shared.release.phase.AbstractReleaseTestCase#compareFiles(org.apache.maven.project.MavenProject, java.lang.String) */ - protected void comparePomFiles( MavenProject project, String expectedFileSuffix ) throws IOException + // @Override + protected void comparePomFiles( MavenProject project, String expectedFileSuffix, boolean normalizeLineEndings ) + throws IOException { File actualFile = ReleaseUtil.getReleasePom( project ); File expectedFile = new File( actualFile.getParentFile(), "expected-release-pom" + expectedFileSuffix + ".xml" ); - comparePomFiles( expectedFile, actualFile ); + comparePomFiles( expectedFile, actualFile, normalizeLineEndings ); // verify scm provider expectations here // TODO: can we move this somewhere better? Modified: maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/RewritePomsForReleasePhaseTest.java URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/RewritePomsForReleasePhaseTest.java?rev=813343&r1=813342&r2=813343&view=diff ============================================================================== --- maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/RewritePomsForReleasePhaseTest.java (original) +++ maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/RewritePomsForReleasePhaseTest.java Thu Sep 10 10:06:11 2009 @@ -19,16 +19,16 @@ * under the License. */ -import org.apache.maven.project.MavenProject; -import org.apache.maven.shared.release.config.ReleaseDescriptor; -import org.apache.maven.shared.release.env.DefaultReleaseEnvironment; -import org.apache.maven.shared.release.util.ReleaseUtil; - import java.io.File; import java.io.IOException; import java.util.Iterator; import java.util.List; +import org.apache.maven.project.MavenProject; +import org.apache.maven.shared.release.config.ReleaseDescriptor; +import org.apache.maven.shared.release.env.DefaultReleaseEnvironment; +import org.apache.maven.shared.release.util.ReleaseUtil; + /** * Test the SCM modification check phase. * @@ -279,7 +279,7 @@ // skip subproject1 - we don't need to worry about its version mapping change, it has no deps of any kind if ( !"groupId".equals( project.getGroupId() ) || !"subproject1".equals( project.getArtifactId() ) ) { - comparePomFiles( project, "-different-version" ); + comparePomFiles( project, "-different-version", true ); } } } @@ -325,10 +325,10 @@ assertTrue( comparePomFiles( reactorProjects ) ); } - + public void testRewritePomForFlatMultiModule() throws Exception - { + { List reactorProjects = createReactorProjects( "rewrite-for-release/pom-with-parent-flat", "/root-project", true ); ReleaseDescriptor config = createConfigurationForPomWithParentAlternateNextVersion( reactorProjects ); @@ -337,6 +337,20 @@ assertTrue( comparePomFiles( reactorProjects ) ); } + // MRELEASE-383 + public void testRewritePomWithCDATASection() + throws Exception + { + List reactorProjects = createReactorProjects( "cdata-section" ); + ReleaseDescriptor config = createDescriptorFromProjects( reactorProjects ); + mapNextVersion( config, "groupId:artifactId" ); + + phase.execute( config, new DefaultReleaseEnvironment(), reactorProjects ); + + // compare POMS without line ending normalization + assertTrue( comparePomFiles( reactorProjects, false ) ); + } + protected ReleaseDescriptor createDescriptorFromProjects( List reactorProjects ) { ReleaseDescriptor descriptor = super.createDescriptorFromProjects( reactorProjects ); Added: maven/release/trunk/maven-release-manager/src/test/resources/projects/rewrite-for-release/cdata-section/expected-pom.xml URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/test/resources/projects/rewrite-for-release/cdata-section/expected-pom.xml?rev=813343&view=auto ============================================================================== --- maven/release/trunk/maven-release-manager/src/test/resources/projects/rewrite-for-release/cdata-section/expected-pom.xml (added) +++ maven/release/trunk/maven-release-manager/src/test/resources/projects/rewrite-for-release/cdata-section/expected-pom.xml Thu Sep 10 10:06:11 2009 @@ -0,0 +1,67 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + ~ Copyright 2005-2006 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. + --> + +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + <groupId>groupId</groupId> + <artifactId>artifactId</artifactId> + <version>1.0</version> + + <prerequisites> + <maven>2.0.4</maven> + </prerequisites> + + <scm> + <connection>scm:svn:file://localhost/tmp/scm-repo/tags/release-label</connection> + <developerConnection>scm:svn:file://localhost/tmp/scm-repo/tags/release-label</developerConnection> + <url>file://localhost/tmp/scm-repo/tags/release-label</url> + </scm> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-eclipse-plugin</artifactId> + <configuration> + <downloadSources>true</downloadSources> + <additionalBuildcommands> + <buildcommand>com.atlassw.tools.eclipse.checkstyle.CheckstyleBuilder</buildcommand> + </additionalBuildcommands> + <additionalProjectnatures> + <projectnature>com.atlassw.tools.eclipse.checkstyle.CheckstyleNature</projectnature> + </additionalProjectnatures> + <additionalConfig> + <file> + <name>.checkstyle</name> + <content> + <![CDATA[<?xml version="1.0" encoding="UTF-8"?> +<fileset-config file-format-version="1.2.0" simple-config="true"> + <fileset name="all" enabled="true" check-config-name="QifCon" local="false"> + <file-match-pattern match-pattern="." include-pattern="true" /> + </fileset> +</fileset-config> +]]> + </content> + </file> + </additionalConfig> + </configuration> + </plugin> + </plugins> + </build> + +</project> \ No newline at end of file Added: maven/release/trunk/maven-release-manager/src/test/resources/projects/rewrite-for-release/cdata-section/pom.xml URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/test/resources/projects/rewrite-for-release/cdata-section/pom.xml?rev=813343&view=auto ============================================================================== --- maven/release/trunk/maven-release-manager/src/test/resources/projects/rewrite-for-release/cdata-section/pom.xml (added) +++ maven/release/trunk/maven-release-manager/src/test/resources/projects/rewrite-for-release/cdata-section/pom.xml Thu Sep 10 10:06:11 2009 @@ -0,0 +1,67 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + ~ Copyright 2005-2006 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. + --> + +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + <groupId>groupId</groupId> + <artifactId>artifactId</artifactId> + <version>1.0-SNAPSHOT</version> + + <prerequisites> + <maven>2.0.4</maven> + </prerequisites> + + <scm> + <connection>scm:svn:file://localhost/tmp/scm-repo/trunk</connection> + <developerConnection>scm:svn:file://localhost/tmp/scm-repo/trunk</developerConnection> + <url>file://localhost/tmp/scm-repo/trunk</url> + </scm> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-eclipse-plugin</artifactId> + <configuration> + <downloadSources>true</downloadSources> + <additionalBuildcommands> + <buildcommand>com.atlassw.tools.eclipse.checkstyle.CheckstyleBuilder</buildcommand> + </additionalBuildcommands> + <additionalProjectnatures> + <projectnature>com.atlassw.tools.eclipse.checkstyle.CheckstyleNature</projectnature> + </additionalProjectnatures> + <additionalConfig> + <file> + <name>.checkstyle</name> + <content> + <![CDATA[<?xml version="1.0" encoding="UTF-8"?> +<fileset-config file-format-version="1.2.0" simple-config="true"> + <fileset name="all" enabled="true" check-config-name="QifCon" local="false"> + <file-match-pattern match-pattern="." include-pattern="true" /> + </fileset> +</fileset-config> +]]> + </content> + </file> + </additionalConfig> + </configuration> + </plugin> + </plugins> + </build> + +</project> \ No newline at end of file