private void putInternal()

in wagon-providers/wagon-scm/src/main/java/org/apache/maven/wagon/providers/scm/ScmWagon.java [317:391]


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