in wagon-providers/wagon-ftp/src/main/java/org/apache/maven/wagon/providers/ftp/FtpWagon.java [265:346]
public void fillOutputData( OutputData outputData )
throws TransferFailedException
{
OutputStream os;
Resource resource = outputData.getResource();
RepositoryPermissions permissions = repository.getPermissions();
try
{
if ( !ftp.changeWorkingDirectory( getRepository().getBasedir() ) )
{
throw new TransferFailedException(
"Required directory: '" + getRepository().getBasedir() + "' " + "is missing" );
}
String[] dirs = PathUtils.dirnames( resource.getName() );
for ( String dir : dirs )
{
boolean dirChanged = ftp.changeWorkingDirectory( dir );
if ( !dirChanged )
{
// first, try to create it
boolean success = ftp.makeDirectory( dir );
if ( success )
{
if ( permissions != null && permissions.getGroup() != null )
{
// ignore failures
ftp.sendSiteCommand( "CHGRP " + permissions.getGroup() + " " + dir );
}
if ( permissions != null && permissions.getDirectoryMode() != null )
{
// ignore failures
ftp.sendSiteCommand( "CHMOD " + permissions.getDirectoryMode() + " " + dir );
}
dirChanged = ftp.changeWorkingDirectory( dir );
}
}
if ( !dirChanged )
{
throw new TransferFailedException( "Unable to create directory " + dir );
}
}
// we come back to original basedir so
// FTP wagon is ready for next requests
if ( !ftp.changeWorkingDirectory( getRepository().getBasedir() ) )
{
throw new TransferFailedException( "Unable to return to the base directory" );
}
os = ftp.storeFileStream( resource.getName() );
if ( os == null )
{
String msg =
"Cannot transfer resource: '" + resource + "'. Output stream is null. FTP Server response: "
+ ftp.getReplyString();
throw new TransferFailedException( msg );
}
fireTransferDebug( "resource = " + resource );
}
catch ( IOException e )
{
throw new TransferFailedException( "Error transferring over FTP", e );
}
outputData.setOutputStream( os );
}