public static DirDiff getQuickDiff(DirRequest request) {
List<File> sourceFiles = getFiles(request.getSourceDir(), request.getIncludes(), request.getExcludes());
List<File> targetFiles = getFiles(request.getTargetDir(), request.getIncludes(), request.getExcludes());
Set<String> sourcePaths = new HashSet<String>(getRelativePaths(request.getSourceDir(), sourceFiles));
Set<String> targetPaths = new HashSet<String>(getRelativePaths(request.getTargetDir(), targetFiles));
Set<String> both = SetUtils.intersection(sourcePaths, targetPaths);
Set<String> sourceOnly = SetUtils.difference(sourcePaths, targetPaths);
Set<String> targetOnly = SetUtils.difference(targetPaths, sourcePaths);
logger.debug("source={}, sourceOnly.size()={}", request.getSourceDir(), sourceOnly.size());
logger.debug("target={}, targetOnly.size()={}", request.getTargetDir(), targetOnly.size());
DirDiff result = new DirDiff(request.getSourceDir(), request.getTargetDir());
result.setBoth(new ArrayList<String>(both));
result.setSourceDirOnly(new ArrayList<String>(sourceOnly));
result.setTargetDirOnly(new ArrayList<String>(targetOnly));
Collections.sort(result.getBoth());
Collections.sort(result.getSourceDirOnly());
Collections.sort(result.getTargetDirOnly());
return result;
}