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