in wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/jsch/ScpWagon.java [224:318]
public void fillInputData( InputData inputData )
throws TransferFailedException, ResourceDoesNotExistException
{
Resource resource = inputData.getResource();
String path = getPath( getRepository().getBasedir(), resource.getName() );
//String cmd = "scp -p -f " + path;
String cmd = "scp -p -f \"" + path + "\"";
fireTransferDebug( "Executing command: " + cmd );
try
{
channel = (ChannelExec) session.openChannel( EXEC_CHANNEL );
channel.setCommand( cmd );
// get I/O streams for remote scp
channelOutputStream = channel.getOutputStream();
InputStream in = channel.getInputStream();
inputData.setInputStream( in );
channel.connect();
sendEom( channelOutputStream );
int exitCode = in.read();
if ( exitCode == 'T' )
{
String line = readLine( in );
String[] times = line.split( " " );
resource.setLastModified( Long.valueOf( times[0] ).longValue() * 1000 );
sendEom( channelOutputStream );
exitCode = in.read();
}
String line = readLine( in );
if ( exitCode != COPY_START_CHAR )
{
if ( exitCode == 1 && ( line.contains( "No such file or directory" )
|| line.indexOf( "no such file or directory" ) != 1 ) )
{
throw new ResourceDoesNotExistException( line );
}
else
{
throw new IOException( "Exit code: " + exitCode + " - " + line );
}
}
if ( line == null )
{
throw new EOFException( "Unexpected end of data" );
}
String perms = line.substring( 0, 4 );
fireTransferDebug( "Remote file permissions: " + perms );
if ( line.charAt( 4 ) != ACK_SEPARATOR && line.charAt( 5 ) != ACK_SEPARATOR )
{
throw new IOException( "Invalid transfer header: " + line );
}
int index = line.indexOf( ACK_SEPARATOR, 5 );
if ( index < 0 )
{
throw new IOException( "Invalid transfer header: " + line );
}
long filesize = Long.parseLong( line.substring( 5, index ) );
fireTransferDebug( "Remote file size: " + filesize );
resource.setContentLength( filesize );
String filename = line.substring( index + 1 );
fireTransferDebug( "Remote filename: " + filename );
sendEom( channelOutputStream );
}
catch ( JSchException e )
{
handleGetException( resource, e );
}
catch ( IOException e )
{
handleGetException( resource, e );
}
}