Author: dantran Date: Sun Jan 11 01:25:52 2009 New Revision: 733437 URL: http://svn.apache.org/viewvc?rev=733437&view=rev Log: SCM-375 - Export Mojo should not pre-create initial export directory, the provider should be the one. This make checkout and export behave the same - Use File for exportDirector configuration rather than using String. - Convert bad file URL which derived from windows directory to unix path. - Add --force param into svn export command to support export to existing directory - No need to set workingDirectory for SvnExportCommand, actually workingDirectory has no meaning to all providers when dealing with export command. - Add various export tests
Added: maven/scm/trunk/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/ExportMojoTest.java maven/scm/trunk/maven-scm-plugin/src/test/resources/mojos/export/ maven/scm/trunk/maven-scm-plugin/src/test/resources/mojos/export/export.xml maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/export/ maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/export/SvnExportCommandTest.java Modified: maven/scm/trunk/ (props changed) maven/scm/trunk/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/ExportMojo.java maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/SvnCommandUtils.java maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/SvnCommandLineUtils.java maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/export/SvnExeExportCommand.java Propchange: maven/scm/trunk/ ------------------------------------------------------------------------------ --- svn:ignore (original) +++ svn:ignore Sun Jan 11 01:25:52 2009 @@ -6,3 +6,4 @@ *.ipr *.iws *.iml +.metadata Modified: maven/scm/trunk/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/ExportMojo.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/ExportMojo.java?rev=733437&r1=733436&r2=733437&view=diff ============================================================================== --- maven/scm/trunk/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/ExportMojo.java (original) +++ maven/scm/trunk/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/ExportMojo.java Sun Jan 11 01:25:52 2009 @@ -1,38 +1,33 @@ package org.apache.maven.scm.plugin; /* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 - * + * Licensed to the Apache Software Foundation (ASF) under one or more contributor license + * agreements. See the NOTICE file distributed with this work for additional information regarding + * copyright ownership. The ASF licenses this file to you 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. + * + * 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 java.io.File; +import java.io.IOException; + import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.scm.ScmException; import org.apache.maven.scm.ScmFileSet; import org.apache.maven.scm.command.export.ExportScmResult; import org.apache.maven.scm.repository.ScmRepository; import org.codehaus.plexus.util.FileUtils; -import org.codehaus.plexus.util.StringUtils; - -import java.io.File; -import java.io.IOException; /** * Get a fresh exported copy of the latest source from the configured scm url. - * + * * @author <a href="mailto:eveni...@apache.org">Emmanuel Venisse</a> * @version $Id$ * @goal export @@ -43,25 +38,25 @@ { /** * The version type (branch/tag/revision) of scmVersion. - * + * * @parameter expression="${scmVersionType}" */ private String scmVersionType; /** * The version (revision number/branch name/tag name). - * + * * @parameter expression="${scmVersion}" */ private String scmVersion; /** * The directory to export the sources to. - * - * @parameter expression="${exportDirectory}" + * + * @parameter expression="${exportDirectory}" default-value="${project.build.directory}/export * @required */ - private String exportDirectory; + private File exportDirectory; /** {...@inheritdoc} */ public void execute() @@ -70,12 +65,12 @@ export(); } - protected String getExportDirectory() + protected File getExportDirectory() { return this.exportDirectory; } - public void setExportDirectory( String exportDirectory ) + public void setExportDirectory( File exportDirectory ) { this.exportDirectory = exportDirectory; } @@ -91,17 +86,11 @@ try { - if ( StringUtils.isNotEmpty( getExportDirectory() ) ) + if ( this.exportDirectory.exists() ) { - File f = new File( getExportDirectory() ); - if ( f.exists() ) - { - this.getLog().info( "Removing " + getExportDirectory() ); - - FileUtils.deleteDirectory( getExportDirectory() ); - } + this.getLog().info( "Removing " + this.exportDirectory ); - f.mkdirs(); + FileUtils.deleteDirectory( this.exportDirectory ); } } catch ( IOException e ) @@ -109,9 +98,10 @@ throw new MojoExecutionException( "Cannot remove " + getExportDirectory() ); } - ExportScmResult result = getScmManager().export( repository, new ScmFileSet( - new File( getExportDirectory() ).getAbsoluteFile() ), getScmVersion( scmVersionType, scmVersion ), - getExportDirectory() ); + ExportScmResult result = getScmManager().export( repository, + new ScmFileSet( this.exportDirectory.getAbsoluteFile() ), + getScmVersion( scmVersionType, scmVersion ), + this.exportDirectory.getAbsolutePath() ); checkResult( result ); } Added: maven/scm/trunk/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/ExportMojoTest.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/ExportMojoTest.java?rev=733437&view=auto ============================================================================== --- maven/scm/trunk/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/ExportMojoTest.java (added) +++ maven/scm/trunk/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/ExportMojoTest.java Sun Jan 11 01:25:52 2009 @@ -0,0 +1,62 @@ +package org.apache.maven.scm.plugin; + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more contributor license + * agreements. See the NOTICE file distributed with this work for additional information regarding + * copyright ownership. The ASF licenses this file to you 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 java.io.File; + +import org.apache.maven.plugin.testing.AbstractMojoTestCase; +import org.apache.maven.scm.provider.svn.SvnScmTestUtils; +import org.codehaus.plexus.util.FileUtils; + +/** + * @version $Id: ExportMojoTest.java 687713 2008-08-21 11:12:33Z vsiveton $ + */ +public class ExportMojoTest + extends AbstractMojoTestCase +{ + File exportDir; + + File repository; + + protected void setUp() + throws Exception + { + super.setUp(); + + exportDir = getTestFile( "target/export" ); + + repository = getTestFile( "target/repository" ); + + FileUtils.forceDelete( exportDir ); + } + + public void testExport() + + throws Exception + { + SvnScmTestUtils.initializeRepository( repository ); + + ExportMojo mojo = (ExportMojo) lookupMojo( "export", getTestFile( "src/test/resources/mojos/export/export.xml" ) ); + + mojo.setExportDirectory( exportDir.getAbsoluteFile() ); + + mojo.execute(); + + assertTrue( exportDir.listFiles().length > 0 ); + assertFalse( new File( exportDir, ".svn" ).exists() ); + } + +} Added: maven/scm/trunk/maven-scm-plugin/src/test/resources/mojos/export/export.xml URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-plugin/src/test/resources/mojos/export/export.xml?rev=733437&view=auto ============================================================================== --- maven/scm/trunk/maven-scm-plugin/src/test/resources/mojos/export/export.xml (added) +++ maven/scm/trunk/maven-scm-plugin/src/test/resources/mojos/export/export.xml Sun Jan 11 01:25:52 2009 @@ -0,0 +1,34 @@ +<!-- + ~ Licensed to the Apache Software Foundation (ASF) under one + ~ or more contributor license agreements. See the NOTICE file + ~ distributed with this work for additional information + ~ regarding copyright ownership. The ASF licenses this file + ~ to you 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> + <build> + <plugins> + <plugin> + <artifactId>maven-scm-plugin</artifactId> + <configuration> + <settings implementation="org.apache.maven.settings.Settings"/> + <exportDirectory>target/export</exportDirectory> + <connectionType>connection</connectionType> + <connectionUrl>scm:svn:file:///${basedir}/target/repository/trunk</connectionUrl> + </configuration> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/SvnCommandUtils.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/SvnCommandUtils.java?rev=733437&r1=733436&r2=733437&view=diff ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/SvnCommandUtils.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/SvnCommandUtils.java Sun Jan 11 01:25:52 2009 @@ -35,7 +35,9 @@ * <p/> * Svn 1.3.1 doesn't use the username information specified by --username when the url * uses the svn+ssh scheme. This allows to fix it. See MRELEASE-35. - * + * </p> + * Convert file url which derived from windows file path to unix path. + * </p> * @param url the url, not <code>null</code> * @param username the username, may be <code>null</code> * @return the fixed url @@ -50,6 +52,12 @@ int cutIdx = idx < 0 ? "svn+ssh://".length() : idx + 1; url = "svn+ssh://" + username + "@" + url.substring( cutIdx ); } + else if ( url.startsWith( "file://" ) ) + { + //some svn commands does not understand windows path separator in file URL derived from windows file path + url = url.replace( '\\', '/' ); + } + return url; } } Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/SvnCommandLineUtils.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/SvnCommandLineUtils.java?rev=733437&r1=733436&r2=733437&view=diff ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/SvnCommandLineUtils.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/SvnCommandLineUtils.java Sun Jan 11 01:25:52 2009 @@ -88,7 +88,10 @@ //Do nothing } - cl.setWorkingDirectory( workingDirectory.getAbsolutePath() ); + if ( workingDirectory != null ) + { + cl.setWorkingDirectory( workingDirectory.getAbsolutePath() ); + } if ( !StringUtils.isEmpty( System.getProperty( "maven.scm.svn.config_directory" ) ) ) { Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/export/SvnExeExportCommand.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/export/SvnExeExportCommand.java?rev=733437&r1=733436&r2=733437&view=diff ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/export/SvnExeExportCommand.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/export/SvnExeExportCommand.java Sun Jan 11 01:25:52 2009 @@ -40,8 +40,6 @@ import org.codehaus.plexus.util.cli.CommandLineUtils; import org.codehaus.plexus.util.cli.Commandline; -import java.io.File; - /** * @author <a href="mailto:eveni...@apache.org">Emmanuel Venisse</a> * @version $Id$ @@ -74,7 +72,7 @@ url = SvnCommandUtils.fixUrl( url, repository.getUser() ); Commandline cl = - createCommandLine( (SvnScmProviderRepository) repo, fileSet.getBasedir(), version, url, outputDirectory ); + createCommandLine( (SvnScmProviderRepository) repo, version, url, outputDirectory ); SvnUpdateConsumer consumer = new SvnUpdateConsumer( getLogger(), fileSet.getBasedir() ); @@ -83,7 +81,10 @@ if ( getLogger().isInfoEnabled() ) { getLogger().info( "Executing: " + SvnCommandLineUtils.cryptPassword( cl ) ); - getLogger().info( "Working directory: " + cl.getWorkingDirectory().getAbsolutePath() ); + if ( cl.getWorkingDirectory() != null ) + { + getLogger().info( "Working directory: " + cl.getWorkingDirectory().getAbsolutePath() ); + } } int exitCode; @@ -110,15 +111,14 @@ // // ---------------------------------------------------------------------- - public static Commandline createCommandLine( SvnScmProviderRepository repository, File workingDirectory, - ScmVersion version, String url, String outputSirectory ) + public static Commandline createCommandLine( SvnScmProviderRepository repository, ScmVersion version, String url, String outputSirectory ) { if ( version != null && StringUtils.isEmpty( version.getName() ) ) { version = null; } - Commandline cl = SvnCommandLineUtils.getBaseSvnCommandLine( workingDirectory, repository ); + Commandline cl = SvnCommandLineUtils.getBaseSvnCommandLine( null, repository ); cl.createArg().setValue( "export" ); @@ -131,6 +131,9 @@ cl.createArg().setValue( version.getName() ); } } + + //support exporting to an existing directory + cl.createArg().setValue( "--force" ); cl.createArg().setValue( url ); Added: maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/export/SvnExportCommandTest.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/export/SvnExportCommandTest.java?rev=733437&view=auto ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/export/SvnExportCommandTest.java (added) +++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/export/SvnExportCommandTest.java Sun Jan 11 01:25:52 2009 @@ -0,0 +1,33 @@ +package org.apache.maven.scm.provider.svn.svnexe.command.export; + +import java.io.File; + +import org.apache.maven.scm.ScmTestCase; +import org.apache.maven.scm.provider.svn.repository.SvnScmProviderRepository; +import org.apache.maven.scm.repository.ScmRepository; +import org.codehaus.plexus.util.cli.Commandline; + +public class SvnExportCommandTest + extends ScmTestCase +{ + + public void testGetExportCommandLine() + throws Exception + { + File exportDirectory = new File( getBasedir() ); + + testCommandLine( "scm:svn:http://foo.com/svn/trunk", exportDirectory, "svn --non-interactive export --force scm:svn:http://foo.com/svn/trunk " + exportDirectory ); + } + + private void testCommandLine( String scmUrl, File exportDirectory, String commandLine ) + throws Exception + { + ScmRepository repository = getScmManager().makeScmRepository( scmUrl ); + + SvnScmProviderRepository svnRepository = (SvnScmProviderRepository) repository.getProviderRepository(); + + Commandline cl = SvnExeExportCommand.createCommandLine( svnRepository, null, scmUrl, exportDirectory.getAbsolutePath() ); + + assertCommandLine( commandLine, exportDirectory, cl ); + } +}