in cli/cli/src/main/java/org/apache/sling/ide/cli/impl/ContentSync.java [69:130]
protected void activate(Config cfg) throws Exception {
File projectDir = new File(cfg.projectDir());
WorkspaceProject prj = FSResources.create(projectDir, projectDir, filterLocator);
logger.trace("Working on project {0} at {1}", prj.getName(), prj.getOSPath());
Repository repo = repoFactory.connectRepository(new RepositoryInfo(cfg.username(), cfg.password(), URI.create(cfg.repositoryUrl())));
repo.newListChildrenNodeCommand("/").execute();
logger.trace("Connected to {0} ", repo.getRepositoryInfo());
Path syncDirPath = prj.getSyncDirectory().getOSPath();
watcher = new DirWatcher(syncDirPath);
logger.trace("Watching syncDir {0}", syncDirPath);
watcherThread = new Thread(new Runnable() {
@Override
public void run() {
try {
while ( ! Thread.currentThread().isInterrupted() ) {
Event event = watcher.poll();
Path path = event.getPath();
WorkspacePath resourceRelativePath = WorkspacePaths.fromOsPath(path);
logger.trace("Change detected in workspace path {0}", resourceRelativePath);
if ( event.getKind() == StandardWatchEventKinds.ENTRY_CREATE ||
event.getKind() == StandardWatchEventKinds.ENTRY_MODIFY ) {
try {
Command<?> cmd = commandFactory.
newCommandForAddedOrUpdatedResource(repo, prj.getSyncDirectory().getFile(resourceRelativePath));
if ( cmd != null )
cmd.execute();
} catch (IOException e) {
logger.warn("Sync failed for path " + resourceRelativePath , e);
}
}
if ( event.getKind() == StandardWatchEventKinds.ENTRY_DELETE ) {
try {
Command<?> cmd = commandFactory.newCommandForRemovedResource(repo, prj.getSyncDirectory().getFile(resourceRelativePath));
if ( cmd != null )
cmd.execute();
} catch (IOException e) {
logger.warn("Sync failed for path " + resourceRelativePath , e);
}
}
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
});
watcherThread.start();
}