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