in wagon-providers/wagon-scm/src/main/java/org/apache/maven/wagon/providers/scm/ScmWagon.java [612:660]
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);
}