private List listDirsForCopy()

in src/main/java/com/ericsson/gerrit/plugins/highavailability/SetupLocalHAReplica.java [91:139]


  private List<Path> listDirsForCopy() throws IOException {
    ImmutableList.Builder<Path> toSkipBuilder = ImmutableList.builder();
    toSkipBuilder.add(
        masterSitePaths.resolve(masterConfig.getString("gerrit", null, "basePath")),
        masterSitePaths.db_dir,
        masterSitePaths.logs_dir,
        replicaSitePaths.site_path,
        masterSitePaths.site_path.resolve(sharedDir),
        masterSitePaths.tmp_dir);
    if ("h2".equals(masterConfig.getString(DATABASE, null, "type"))) {
      toSkipBuilder.add(
          masterSitePaths.resolve(masterConfig.getString(DATABASE, null, DATABASE)).getParent());
    }
    final ImmutableList<Path> toSkip = toSkipBuilder.build();

    final ArrayList<Path> dirsForCopy = new ArrayList<>();
    Files.walkFileTree(
        masterSitePaths.site_path,
        EnumSet.of(FileVisitOption.FOLLOW_LINKS),
        Integer.MAX_VALUE,
        new SimpleFileVisitor<Path>() {
          @Override
          public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs)
              throws IOException {
            if (Files.isSameFile(dir, masterSitePaths.site_path)) {
              return FileVisitResult.CONTINUE;
            }

            Path p = masterSitePaths.site_path.relativize(dir);
            if (shouldSkip(p)) {
              return FileVisitResult.SKIP_SUBTREE;
            }
            dirsForCopy.add(p);
            return FileVisitResult.CONTINUE;
          }

          private boolean shouldSkip(Path p) throws IOException {
            Path resolved = masterSitePaths.site_path.resolve(p);
            for (Path skip : toSkip) {
              if (skip.toFile().exists() && Files.isSameFile(resolved, skip)) {
                return true;
              }
            }
            return false;
          }
        });

    return dirsForCopy;
  }