@Override public void execute() { // Might be nothing to do if (skip) { return; } // Make sure we are configured correctly Assert.notNull(requests, "requests is null"); // Show how many files we are copying logger.info("Copying {} files", requests.size()); // Perform the file system copy List<CopyFileResult> results = FileSystemUtils.copyFiles(requests); // Store the results in our internal member variable this.results = results; }
@Override public List<SyncResult> sync(List<DirRequest> requests) { logger.info("Synchronizing {} directories", requests.size()); for (DirRequest request : requests) { String src = FileSystemUtils.getRelativePathQuietly(request.getRelativeDir(), request.getSourceDir()); String dst = FileSystemUtils.getRelativePathQuietly(request.getRelativeDir(), request.getTargetDir()); logger.info(" [{}] -> [{}]", src, dst); } // Scan the file system and record the differences between the directories. // This does a deep, heavy, scan of both directories. // It recursively examines the contents of both directories. // Files that exist in both, are compared for equality using an MD5 checksum List<DirDiff> diffs = getDiffs(requests); // Use the diff info to generate a list of files to copy List<CopyFileRequest> copyRequests = getCopyFileRequests(diffs); // Show how many files we are copying if (copyRequests.size() > 0) { logger.info("Copying {} files", copyRequests.size()); } // Copy the files and record the results List<CopyFileResult> copyResults = FileSystemUtils.copyFiles(copyRequests); // Log the number of files copied logger.debug("Copied {} files", copyResults.size()); // Convert the diff information into sync information (adds, deletes, updates) List<SyncResult> results = getSyncResults(diffs); // return the sync info return results; }
public static SyncResult syncFiles(SyncRequest request) throws IOException { logger.info("Sync [{}] -> [{}]", request.getSrcDir(), request.getDstDir()); List<File> dstFiles = getAllNonScmFiles(request.getDstDir()); List<File> srcFiles = request.getSrcFiles(); List<String> dstPaths = getRelativePaths(request.getDstDir(), dstFiles); List<String> srcPaths = getRelativePaths(request.getSrcDir(), srcFiles); List<String> adds = new ArrayList<String>(); List<String> updates = new ArrayList<String>(); List<String> deletes = new ArrayList<String>(); for (String srcPath : srcPaths) { boolean existing = dstPaths.contains(srcPath); if (existing) { updates.add(srcPath); } else { adds.add(srcPath); } } for (String dstPath : dstPaths) { boolean extra = !srcPaths.contains(dstPath); if (extra) { deletes.add(dstPath); } } copyFiles(request.getSrcDir(), request.getSrcFiles(), request.getDstDir()); SyncResult result = new SyncResult(); result.setAdds(getFullPaths(request.getDstDir(), adds)); result.setUpdates(getFullPaths(request.getDstDir(), updates)); result.setDeletes(getFullPaths(request.getDstDir(), deletes)); return result; }