public void get()

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);
    }