in appengine-plugins-core/src/main/java/com/google/cloud/tools/io/FileUtil.java [57:102]
public static void copyDirectory(final Path source, final Path destination, List<Path> excludes)
throws IOException {
Preconditions.checkNotNull(source);
Preconditions.checkNotNull(destination);
Preconditions.checkArgument(Files.isDirectory(source), "Source is not a directory");
Preconditions.checkArgument(Files.isDirectory(destination), "Destination is not a directory");
Preconditions.checkArgument(
!Files.isSameFile(source, destination), "Source and destination are the same");
Preconditions.checkArgument(
!destination.toAbsolutePath().startsWith(source.toAbsolutePath()),
"destination is child of source");
Files.walkFileTree(
source,
new SimpleFileVisitor<Path>() {
final CopyOption[] copyOptions = new CopyOption[] {StandardCopyOption.COPY_ATTRIBUTES};
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs)
throws IOException {
if (dir.equals(source)) {
return FileVisitResult.CONTINUE;
}
if (excludes.contains(dir)) {
return FileVisitResult.SKIP_SUBTREE;
}
Files.copy(dir, destination.resolve(source.relativize(dir)), copyOptions);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
throws IOException {
if (excludes.contains(file)) {
return FileVisitResult.CONTINUE;
}
Files.copy(file, destination.resolve(source.relativize(file)), copyOptions);
return FileVisitResult.CONTINUE;
}
});
}