Author: carlos Date: Tue Mar 7 10:19:58 2006 New Revision: 383955 URL: http://svn.apache.org/viewcvs?rev=383955&view=rev Log: Fixed problem when directory already was in scm but some of the files weren't
Modified: maven/sandbox/wagon-scm/src/main/java/org/apache/maven/wagon/providers/scm/ScmWagon.java maven/sandbox/wagon-scm/src/test/java/org/apache/maven/wagon/providers/scm/AbstractScmWagonTest.java Modified: maven/sandbox/wagon-scm/src/main/java/org/apache/maven/wagon/providers/scm/ScmWagon.java URL: http://svn.apache.org/viewcvs/maven/sandbox/wagon-scm/src/main/java/org/apache/maven/wagon/providers/scm/ScmWagon.java?rev=383955&r1=383954&r2=383955&view=diff ============================================================================== --- maven/sandbox/wagon-scm/src/main/java/org/apache/maven/wagon/providers/scm/ScmWagon.java (original) +++ maven/sandbox/wagon-scm/src/main/java/org/apache/maven/wagon/providers/scm/ScmWagon.java Tue Mar 7 10:19:58 2006 @@ -19,6 +19,7 @@ import org.apache.maven.scm.ScmException; import org.apache.maven.scm.ScmFileSet; import org.apache.maven.scm.ScmResult; +import org.apache.maven.scm.command.add.AddScmResult; import org.apache.maven.scm.manager.NoSuchScmProviderException; import org.apache.maven.scm.manager.ScmManager; import org.apache.maven.scm.provider.ScmProvider; @@ -42,6 +43,7 @@ /** * @author <a href="[EMAIL PROTECTED]">Brett Porter</a> * @author <a href="[EMAIL PROTECTED]">Emmanuel Venisse</a> + * @author <a href="[EMAIL PROTECTED]">Carlos Sanchez</a> * @version $Id$ */ public class ScmWagon @@ -157,6 +159,12 @@ putInternal( source, resourceName ); } + /** + * Puts both files and directories + * @param source + * @param resourceName + * @throws TransferFailedException + */ private void putInternal( File source, String resourceName ) throws TransferFailedException { @@ -218,9 +226,14 @@ } } - if ( !fileAlreadyInScm ) + if ( !fileAlreadyInScm || scmFile.isDirectory() ) { - addFiles( scmProvider, scmRepository, basedir, scmFile ); + int addedFiles = addFiles( scmProvider, scmRepository, basedir, scmFile ); + if ( addedFiles == 0 ) + { + //TODO improve error message with the returned message from SCM + throw new TransferFailedException( "Unable to add file to SCM: " + scmFile ); + } } result = scmProvider.checkIn( scmRepository, new ScmFileSet( basedir, scmFile.getName(), null ), null, msg ); @@ -245,12 +258,23 @@ firePutCompleted( resource, source ); } - private void addFiles( ScmProvider scmProvider, ScmRepository scmRepository, File basedir, File scmFile ) - throws TransferFailedException, ScmException + /** + * Add a file or directory to a SCM repository. + * If it's a directory all its contents are added recursively. + * + * @param scmProvider SCM provider + * @param scmRepository SCM repository + * @param basedir local directory corresponding to scmRepository + * @param scmFile file or directory to add + * @throws ScmException + * @return the number of files added. + */ + private int addFiles( ScmProvider scmProvider, ScmRepository scmRepository, File basedir, File scmFile ) + throws ScmException { - ScmResult result = scmProvider.add( scmRepository, new ScmFileSet( basedir, scmFile ) ); + AddScmResult result = scmProvider.add( scmRepository, new ScmFileSet( basedir, scmFile ) ); - checkScmResult( result ); + int addedFiles = result.getAddedFiles().size(); String reservedScmFile = scmProvider.getScmSpecificFilename(); @@ -262,12 +286,17 @@ { if ( reservedScmFile != null && !reservedScmFile.equals( files[i].getName() ) ) { - addFiles( scmProvider, scmRepository, basedir, files[i] ); + addedFiles += addFiles( scmProvider, scmRepository, basedir, files[i] ); } } } + + return addedFiles; } + /** + * @return true + */ public boolean supportsDirectoryCopy() { return true; @@ -284,6 +313,11 @@ putInternal( sourceDirectory, destinationDirectory ); } + /** + * Check that the ScmResult was a successful operation + * @param result + * @throws TransferFailedException if result was not a successful operation + */ private void checkScmResult( ScmResult result ) throws TransferFailedException { Modified: maven/sandbox/wagon-scm/src/test/java/org/apache/maven/wagon/providers/scm/AbstractScmWagonTest.java URL: http://svn.apache.org/viewcvs/maven/sandbox/wagon-scm/src/test/java/org/apache/maven/wagon/providers/scm/AbstractScmWagonTest.java?rev=383955&r1=383954&r2=383955&view=diff ============================================================================== --- maven/sandbox/wagon-scm/src/test/java/org/apache/maven/wagon/providers/scm/AbstractScmWagonTest.java (original) +++ maven/sandbox/wagon-scm/src/test/java/org/apache/maven/wagon/providers/scm/AbstractScmWagonTest.java Tue Mar 7 10:19:58 2006 @@ -17,10 +17,15 @@ */ import java.io.File; +import java.io.IOException; +import java.util.List; import org.apache.maven.wagon.FileTestUtils; +import org.apache.maven.wagon.ResourceDoesNotExistException; +import org.apache.maven.wagon.TransferFailedException; import org.apache.maven.wagon.Wagon; import org.apache.maven.wagon.WagonTestCase; +import org.apache.maven.wagon.authorization.AuthorizationException; import org.codehaus.plexus.util.FileUtils; /** @@ -59,6 +64,20 @@ protected String getProtocol() { return "scm"; + } + + protected void createDirectory( Wagon wagon, String resourceToCreate, String[] resourcesNotPresent, String dirName ) + throws Exception + { + super.createDirectory( wagon, resourceToCreate, resourcesNotPresent, dirName ); + FileUtils.deleteDirectory( getCheckoutDirectory() ); + } + + protected void assertResourcesAreInRemoteSide( Wagon wagon, List resourceNames ) + throws IOException, TransferFailedException, ResourceDoesNotExistException, AuthorizationException + { + FileUtils.deleteDirectory( getCheckoutDirectory() ); + super.assertResourcesAreInRemoteSide( wagon, resourceNames ); } }