in wagon-providers/wagon-scm/src/main/java/org/apache/maven/wagon/providers/scm/ScmWagon.java [707:763]
public void get( String resourceName, File destination )
throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException
{
Resource resource = new Resource( resourceName );
fireGetInitiated( resource, destination );
fireGetStarted( resource, destination );
try
{
String subdir = getDirname( resourceName );
ScmResult res = tryPartialCheckout( subdir, false );
if ( !res.isSuccess() && ( partCOSubdir.length() == 0 || res instanceof UpdateScmResult ) )
{
// inability to checkout SVN or CVS subdir is not fatal. We just assume it doesn't exist
// inability to update existing subdir or checkout root is fatal
throw new ScmException( "command failed: " + res.getCommandOutput().trim() );
}
resourceName = resourceName.substring( partCOSubdir.length() );
// TODO: limitations:
// - destination filename must match that in the repository - should allow the "-d" CVS equiv to be passed
// in
// - we don't get granular exceptions from SCM (ie, auth, not found)
// - need to make it non-recursive to save time
// - exists() check doesn't test if it is in SCM already
File scmFile = new File( checkoutDirectory, resourceName );
if ( !scmFile.exists() )
{
throw new ResourceDoesNotExistException( "Unable to find resource " + destination + " after checkout" );
}
if ( !scmFile.equals( destination ) )
{
FileUtils.copyFile( scmFile, destination );
}
}
catch ( ScmException e )
{
fireTransferError( resource, e, TransferEvent.REQUEST_GET );
throw new TransferFailedException( "Error getting file from SCM", e );
}
catch ( IOException e )
{
fireTransferError( resource, e, TransferEvent.REQUEST_GET );
throw new TransferFailedException( "Error getting file from SCM", e );
}
postProcessListeners( resource, destination, TransferEvent.REQUEST_GET );
fireGetCompleted( resource, destination );
}