public static void copyDirectory()

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