in wagon-providers/wagon-ssh-common-test/src/main/java/org/apache/maven/wagon/providers/ssh/ScpCommand.java [385:451]
protected void writeFile( String header, SshFile path )
throws IOException
{
if ( LOG.isDebugEnabled() )
{
LOG.debug( "Writing file {}", path );
}
if ( !header.startsWith( "C" ) )
{
throw new IOException( "Expected a C message but got '" + header + "'" );
}
String perms = header.substring( 1, 5 );
long length = Long.parseLong( header.substring( 6, header.indexOf( ' ', 6 ) ) );
String name = header.substring( header.indexOf( ' ', 6 ) + 1 );
SshFile file;
if ( path.doesExist() && path.isDirectory() )
{
file = root.getFile( path, name );
}
else if ( path.doesExist() && path.isFile() )
{
file = path;
}
else if ( !path.doesExist() && path.getParentFile().doesExist() && path.getParentFile().isDirectory() )
{
file = path;
}
else
{
throw new IOException( "Can not write to " + path );
}
if ( file.doesExist() && file.isDirectory() )
{
throw new IOException( "File is a directory: " + file );
}
else if ( file.doesExist() && !file.isWritable() )
{
throw new IOException( "Can not write to file: " + file );
}
OutputStream os = file.createOutputStream( 0 );
try
{
ack();
byte[] buffer = new byte[8 * 1024];
while ( length > 0 )
{
int len = (int) Math.min( length, buffer.length );
len = in.read( buffer, 0, len );
if ( len <= 0 )
{
throw new IOException( "End of stream reached" );
}
os.write( buffer, 0, len );
length -= len;
}
}
finally
{
os.close();
}
ack();
readAck( false );
}