in commons-vfs2-ant/src/main/java/org/apache/commons/vfs2/tasks/AbstractSyncTask.java [213:284]
private void handleFiles() throws Exception {
// Locate the destination folder, and make sure it exists
final FileObject destFolder = resolveFile(destDirUrl);
destFolder.createFolder();
// Locate the source files, and make sure they exist
FileName srcDirName = null;
if (srcDirUrl != null) {
srcDirName = resolveFile(srcDirUrl).getName();
}
final ArrayList<FileObject> srcs = new ArrayList<>();
for (final SourceInfo src : srcFiles) {
final FileObject srcFile = resolveFile(src.file);
if (!srcFile.exists()) {
final String message = Messages.getString("vfs.tasks/sync.src-file-no-exist.warn", srcFile);
logOrDie(message, Project.MSG_WARN);
} else {
srcs.add(srcFile);
}
}
// Scan the source files
final Set<FileObject> destFiles = new HashSet<>();
for (final FileObject rootFile : srcs) {
final FileName rootName = rootFile.getName();
if (rootFile.isFile()) {
// Build the destination file name
final String relName;
if (srcDirName == null || !srcDirIsBase) {
relName = rootName.getBaseName();
} else {
relName = srcDirName.getRelativeName(rootName);
}
final FileObject destFile = destFolder.resolveFile(relName, NameScope.DESCENDENT);
// Do the copy
handleFile(destFiles, rootFile, destFile);
} else {
// Find matching files
// If srcDirIsBase is true, select also the subdirectories
final FileObject[] files = rootFile
.findFiles(srcDirIsBase ? Selectors.SELECT_ALL : Selectors.SELECT_FILES);
for (final FileObject srcFile : files) {
// Build the destination file name
final String relName;
if (srcDirName == null || !srcDirIsBase) {
relName = rootName.getRelativeName(srcFile.getName());
} else {
relName = srcDirName.getRelativeName(srcFile.getName());
}
final FileObject destFile = destFolder.resolveFile(relName, NameScope.DESCENDENT);
// Do the copy
handleFile(destFiles, srcFile, destFile);
}
}
}
// Scan the destination files for files with no source file
if (detectMissingSourceFiles()) {
final FileObject[] allDestFiles = destFolder.findFiles(Selectors.SELECT_FILES);
for (final FileObject destFile : allDestFiles) {
if (!destFiles.contains(destFile)) {
handleMissingSourceFile(destFile);
}
}
}
}