in vault-sync/src/main/java/org/apache/jackrabbit/vault/sync/impl/TreeSync.java [233:311]
private void sync(SyncResult res, Entry e, boolean recursive) throws RepositoryException, IOException {
if (e.fStat == FilterStatus.OUTSIDE) {
if (syncMode == SyncMode.JCR2FS) {
if (e.fsType == Type.FILE) {
deleteFile(res, e);
} else if (e.fsType == Type.DIRECTORY) {
deleteDirectory(res, e);
}
}
} else if (e.jcrType == Type.DIRECTORY) {
if (e.fsType == Type.DIRECTORY) {
if (recursive) {
sync(res, e.node, e.file);
}
} else if (e.fsType == Type.MISSING) {
if (syncMode == SyncMode.FS2JCR) {
if (e.fStat == FilterStatus.CONTAINED) {
deleteFolder(res, e);
}
} else {
createDirectory(res, e);
if (recursive) {
sync(res, e.node, e.file);
}
}
} else {
logConflict(e);
}
} else if (e.jcrType == Type.FILE) {
if (e.fsType == Type.FILE) {
if (e.fStat == FilterStatus.CONTAINED) {
syncFiles(res, e);
}
} else if (e.fsType == Type.MISSING) {
if (e.fStat == FilterStatus.CONTAINED) {
if (syncMode == SyncMode.FS2JCR) {
deleteNtFile(res, e);
} else {
writeFile(res, e);
}
}
} else {
logConflict(e);
}
} else if (e.jcrType == Type.FULL_COVERAGE) {
log.debug("refusing to traverse full coverage aggregates {}", e.node.getPath());
} else if (e.jcrType == Type.UNSUPPORTED) {
log.debug("refusing to traverse unsupported {}", e.node.getPath());
} else if (e.jcrType == Type.MISSING) {
if (e.fsType == Type.FILE) {
if (e.fStat == FilterStatus.CONTAINED) {
if (syncMode == SyncMode.FS2JCR) {
writeNtFile(res, e);
} else {
deleteFile(res, e);
}
}
} else if (e.fsType == Type.DIRECTORY) {
if (e.fStat == FilterStatus.CONTAINED) {
if (syncMode == SyncMode.FS2JCR) {
writeFolder(res, e);
if (e.node != null && recursive) {
sync(res, e.node, e.file);
}
} else {
deleteDirectory(res, e);
}
} else {
if (syncMode == SyncMode.FS2JCR) {
// create intermediate node???
log.warn("Creation of unknown intermediate nodes not supported yet. fsPath={} jcrPath={}", e.getFsPath(), e.getJcrPath());
}
}
} else {
logConflict(e);
}
}
}