Index: wagon-providers/wagon-ftp/src/main/java/org/apache/maven/wagon/providers/ftp/FtpWagon.java =================================================================== --- wagon-providers/wagon-ftp/src/main/java/org/apache/maven/wagon/providers/ftp/FtpWagon.java (revision 399104) +++ wagon-providers/wagon-ftp/src/main/java/org/apache/maven/wagon/providers/ftp/FtpWagon.java (working copy) @@ -22,6 +22,7 @@ import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPFile; import org.apache.commons.net.ftp.FTPReply; +import org.apache.commons.net.ftp.FTPCommand; import org.apache.maven.wagon.ConnectionException; import org.apache.maven.wagon.InputData; import org.apache.maven.wagon.OutputData; @@ -42,8 +43,8 @@ public class FtpWagon extends StreamWagon -{ - private FTPClient ftp; +{ + private FTPClient ftp; public void openConnection() throws ConnectionException, AuthenticationException @@ -176,6 +177,20 @@ } super.firePutCompleted( resource, file ); + + try + { + String temp_name = resource.getName(); + String new_name = removeTempFileExtension( resource ); + + ftp.sendCommand( FTPCommand.RENAME_FROM, temp_name ); + ftp.sendCommand( FTPCommand.RENAME_TO, new_name ); + } + catch ( IOException e) + { + e.printStackTrace(); + } + } @@ -219,6 +234,8 @@ OutputStream os; Resource resource = outputData.getResource(); + + resource.setName(resource.getName() + TEMP_FILE_EXTENSION); RepositoryPermissions permissions = repository.getPermissions(); Index: wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/ScpWagon.java =================================================================== --- wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/ScpWagon.java (revision 399104) +++ wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/ScpWagon.java (working copy) @@ -67,6 +67,8 @@ String dir = PathUtils.dirname( resourceName ); dir = StringUtils.replace( dir, "\\", "/" ); + resourceName = resourceName + TEMP_FILE_EXTENSION; + Resource resource = new Resource( resourceName ); firePutInitiated( resource, source ); @@ -162,6 +164,8 @@ checkAck( in ); + System.out.println( "HENRY>>>" + resource.getName() ); + putTransfer( resource, source, out, false ); sendEom( out ); @@ -196,9 +200,14 @@ } } + String temp_name = basedir + PATH_SEPARATOR + resource.getName(); + String new_name = basedir + PATH_SEPARATOR + removeTempFileExtension( resource ); + + renameTempFile( temp_name, new_name ); + try - { - if ( permissions != null && permissions.getGroup() != null ) + { + if ( permissions != null && permissions.getGroup() != null ) { executeCommand( "chgrp -f " + permissions.getGroup() + " " + path ); } Index: wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/SftpWagon.java =================================================================== --- wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/SftpWagon.java (revision 399104) +++ wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/SftpWagon.java (working copy) @@ -62,6 +62,8 @@ String dir = PathUtils.dirname( resourceName ); dir = StringUtils.replace( dir, "\\", "/" ); + resourceName = resourceName + TEMP_FILE_EXTENSION; + Resource resource = new Resource( resourceName ); firePutInitiated( resource, source ); @@ -78,7 +80,7 @@ { filename = resourceName; } - + try { channel = (ChannelSftp) session.openChannel( SFTP_CHANNEL ); @@ -131,6 +133,11 @@ firePutCompleted( resource, source ); + String temp_name = basedir + PATH_SEPARATOR + resource.getName(); + String new_name = basedir + PATH_SEPARATOR + removeTempFileExtension( resource ); + + renameTempFile( temp_name, new_name ); + String[] dirs = PathUtils.dirnames( dir ); for ( int i = 0; i < dirs.length; i++ ) { Index: wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/AbstractSshWagon.java =================================================================== --- wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/AbstractSshWagon.java (revision 399104) +++ wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/AbstractSshWagon.java (working copy) @@ -574,4 +574,17 @@ { return true; } + + protected void renameTempFile( String temp_file_name, String new_file_name ) throws TransferFailedException + { + try + { + executeCommand( "mv " + temp_file_name + " " + new_file_name ); + } + catch ( CommandExecutionException e ) + { + throw new TransferFailedException( "Error performing commands for file transfer", e ); + } + } + } Index: wagon-providers/wagon-ssh-external/src/main/java/org/apache/maven/wagon/providers/sshext/ScpExternalWagon.java =================================================================== --- wagon-providers/wagon-ssh-external/src/main/java/org/apache/maven/wagon/providers/sshext/ScpExternalWagon.java (revision 399104) +++ wagon-providers/wagon-ssh-external/src/main/java/org/apache/maven/wagon/providers/sshext/ScpExternalWagon.java (working copy) @@ -360,6 +360,8 @@ firePutStarted( resource, source ); + resourceName = resourceName + TEMP_FILE_EXTENSION; + executeScpCommand( source, basedir + "/" + resourceName, true ); postProcessListeners( resource, source, TransferEvent.REQUEST_PUT ); @@ -386,6 +388,15 @@ throw new TransferFailedException( "Error executing command for transfer", e ); } firePutCompleted( resource, source ); + + try + { + executeCommand( "mv " + resourceName + " " + resourceName.substring( 0, resourceName.indexOf( TEMP_FILE_EXTENSION ) ) ); + } + catch ( CommandExecutionException e) + { + throw new TransferFailedException( "Error executing command for transfer", e ); + } } public void executeCommand( String command ) Index: wagon-providers/wagon-file/src/main/java/org/apache/maven/wagon/providers/file/FileWagon.java =================================================================== --- wagon-providers/wagon-file/src/main/java/org/apache/maven/wagon/providers/file/FileWagon.java (revision 399104) +++ wagon-providers/wagon-file/src/main/java/org/apache/maven/wagon/providers/file/FileWagon.java (working copy) @@ -42,12 +42,14 @@ */ public class FileWagon extends StreamWagon -{ +{ public void fillInputData( InputData inputData ) throws TransferFailedException, ResourceDoesNotExistException { Resource resource = inputData.getResource(); + + //resource.setName( resource.getName() + TEMP_FILE_EXTENSION ); File file = new File( getRepository().getBasedir(), resource.getName() ); @@ -76,6 +78,8 @@ throws TransferFailedException { Resource resource = outputData.getResource(); + + resource.setName( resource.getName() + TEMP_FILE_EXTENSION ); File file = new File( getRepository().getBasedir(), resource.getName() ); @@ -133,4 +137,19 @@ throw new TransferFailedException( "Error copying directory structure", e ); } } + + protected void firePutCompleted( Resource resource, File localfile ) + { + super.firePutCompleted( resource, localfile ); + + String temp_name = resource.getName(); + String new_name = removeTempFileExtension( resource ); + + File temp_file = new File ( getRepository().getBasedir(), temp_name ); + File new_file = new File ( getRepository().getBasedir(), new_name ); + + temp_file.renameTo( new_file ); + + resource.setName( new_name ); + } } Index: wagon-provider-api/src/main/java/org/apache/maven/wagon/AbstractWagon.java =================================================================== --- wagon-provider-api/src/main/java/org/apache/maven/wagon/AbstractWagon.java (revision 399104) +++ wagon-provider-api/src/main/java/org/apache/maven/wagon/AbstractWagon.java (working copy) @@ -51,6 +51,8 @@ public abstract class AbstractWagon implements Wagon { + protected static final String TEMP_FILE_EXTENSION = ".tmp.file"; + protected static final int DEFAULT_BUFFER_SIZE = 1024 * 4; protected Repository repository; @@ -667,4 +669,9 @@ { this.interactive = interactive; } + + protected String removeTempFileExtension( Resource resource ) + { + return resource.getName().substring( 0, resource.getName().indexOf( TEMP_FILE_EXTENSION ) ); + } }