in wagon-providers/wagon-scm/src/main/java/org/apache/maven/wagon/providers/scm/ScmWagon.java [361:452]
private void putInternal( File source, String targetName )
throws TransferFailedException
{
Resource target = new Resource( targetName );
firePutInitiated( target, source );
try
{
ScmRepository scmRepository = getScmRepository( getRepository().getUrl() );
target.setContentLength( source.length() );
target.setLastModified( source.lastModified() );
firePutStarted( target, source );
String msg = "Wagon: Adding " + source.getName() + " to repository";
ScmProvider scmProvider = getScmProvider( scmRepository.getProvider() );
boolean isDirectory = source.isDirectory();
String checkoutTargetName = isDirectory ? targetName : getDirname( targetName );
boolean recursive = false;
if ( isDirectory )
{
for ( File f : source.listFiles() )
{
if ( f.isDirectory() )
{
recursive = true;
break;
}
}
}
String relPath = ensureDirs( scmProvider, scmRepository, checkoutTargetName, target, recursive );
File newCheckoutDirectory = new File( checkoutDirectory, relPath );
File scmFile = new File( newCheckoutDirectory, isDirectory ? "" : FileUtils.removePath( targetName, '/' ) );
boolean fileAlreadyInScm = scmFile.exists();
if ( !scmFile.equals( source ) )
{
if ( isDirectory )
{
FileUtils.copyDirectoryStructure( source, scmFile );
}
else
{
FileUtils.copyFile( source, scmFile );
}
}
if ( !fileAlreadyInScm || scmFile.isDirectory() )
{
int addedFiles = addFiles( scmProvider, scmRepository, newCheckoutDirectory,
isDirectory ? "" : scmFile.getName() );
if ( !fileAlreadyInScm && addedFiles == 0 )
{
throw new ScmException(
"Unable to add file to SCM: " + scmFile + "; see error messages above for more information" );
}
}
ScmResult result =
scmProvider.checkIn( scmRepository, new ScmFileSet( checkoutDirectory ), makeScmVersion(), msg );
checkScmResult( result );
}
catch ( ScmException e )
{
fireTransferError( target, e, TransferEvent.REQUEST_PUT );
throw new TransferFailedException( "Error interacting with SCM: " + e.getMessage(), e );
}
catch ( IOException e )
{
fireTransferError( target, e, TransferEvent.REQUEST_PUT );
throw new TransferFailedException( "Error interacting with SCM: " + e.getMessage(), e );
}
if ( source.isFile() )
{
postProcessListeners( target, source, TransferEvent.REQUEST_PUT );
}
firePutCompleted( target, source );
}