boolean contentChanged = winningFileToVersionComparison.getFileChanges().contains(FileChange.CHANGED_CHECKSUM) || winningFileToVersionComparison.getFileChanges().contains(FileChange.CHANGED_SIZE); if (winningFileToVersionComparison.areEqual()) { logger.log(Level.INFO, " -> (1) Equals: Nothing to do, winning version equals winning file: "+winningLastVersion+" AND "+winningLastFile); else if (winningFileToVersionComparison.getFileChanges().contains(FileChange.DELETED)) { FileSystemAction action = new NewFileSystemAction(config, winnersDatabase, assembler, winningLastVersion); outFileSystemActions.add(action); else if (winningFileToVersionComparison.getFileChanges().contains(FileChange.NEW)) { FileSystemAction action = new DeleteFileSystemAction(config, null, winningLastVersion, winnersDatabase); outFileSystemActions.add(action); else if (winningFileToVersionComparison.getFileChanges().contains(FileChange.CHANGED_LINK_TARGET)) { FileSystemAction action = new NewSymlinkFileSystemAction(config, winningLastVersion, winnersDatabase); outFileSystemActions.add(action); else if (!contentChanged && (winningFileToVersionComparison.getFileChanges().contains(FileChange.CHANGED_LAST_MOD_DATE) || winningFileToVersionComparison.getFileChanges().contains(FileChange.CHANGED_ATTRIBUTES))) { else if (winningFileToVersionComparison.getFileChanges().contains(FileChange.CHANGED_PATH)) { logger.log(Level.INFO, " -> (6) Changed path: winning file has a different path: "+winningLastVersion+" AND "+winningLastFile); throw new Exception("What happend here?");
if (localFileToVersionComparison.areEqual()) { determineActionWithLocalVersionAndLocalFileAsExpected(winningLastVersion, winningLastFile, localLastVersion, localLastFile, winnersDatabase, fileSystemActions);
FileVersionComparison lastToNewFileVersionComparison = fileVersionComparator.compare(fileProperties, lastFileVersionProperties, true); boolean newVersionDiffersFromToLastVersion = !lastToNewFileVersionComparison.areEqual();
boolean contentChanged = winningVersionToLocalVersionComparison.getFileChanges().contains(FileChange.CHANGED_CHECKSUM) || winningVersionToLocalVersionComparison.getFileChanges().contains(FileChange.CHANGED_SIZE); if (winningVersionToLocalVersionComparison.areEqual()) { // Local file = local version = winning version! logger.log(Level.INFO, " -> (8) Equals: Nothing to do, local file equals local version equals winning version: local file = "+localLastFile+", local version = "+localLastVersion+", winning version = "+winningLastVersion); else if (winningVersionToLocalVersionComparison.getFileChanges().contains(FileChange.DELETED)) { FileSystemAction action = new ChangeFileSystemAction(config, winnersDatabase, assembler, localLastVersion, winningLastVersion); fileSystemActions.add(action); else if (winningVersionToLocalVersionComparison.getFileChanges().contains(FileChange.NEW)) { FileSystemAction action = new DeleteFileSystemAction(config, localLastVersion, winningLastVersion, winnersDatabase); fileSystemActions.add(action); else if (winningVersionToLocalVersionComparison.getFileChanges().contains(FileChange.CHANGED_LINK_TARGET)) { FileSystemAction action = new NewSymlinkFileSystemAction(config, winningLastVersion, winnersDatabase); fileSystemActions.add(action); else if (!contentChanged && (winningVersionToLocalVersionComparison.getFileChanges().contains(FileChange.CHANGED_LAST_MOD_DATE) || winningVersionToLocalVersionComparison.getFileChanges().contains(FileChange.CHANGED_ATTRIBUTES) || winningVersionToLocalVersionComparison.getFileChanges().contains(FileChange.CHANGED_PATH))) {
forceChecksum); if (fileVersionComparison.areEqual()) { changeSet.getUnchangedFiles().add(relativeFilePath);
allowedChangesList.add(FileChange.CHANGED_PATH); if (!CollectionUtil.containsOnly(fileVersionComparison.getFileChanges(), allowedChangesList)) { fail("Files are not equal: Actual file differs from expected file: " + fileVersionComparison.getFileChanges());
private void determineActionWithLocalVersionAndLocalFileDiffers(FileVersion winningLastVersion, File winningLastFile, FileVersion localLastVersion, File localLastFile, MemoryDatabase winnersDatabase, List<FileSystemAction> fileSystemActions, FileVersionComparison localFileToVersionComparison) { if (localFileToVersionComparison.getFileChanges().contains(FileChange.DELETED)) { boolean winningLastVersionDeleted = winningLastVersion.getStatus() == FileStatus.DELETED; if (!winningLastVersionDeleted) { FileSystemAction action = new ChangeFileSystemAction(config, winnersDatabase, assembler, localLastVersion, winningLastVersion); fileSystemActions.add(action); logger.log(Level.INFO, " -> (14) Content changed: Local file does NOT exist, and winning version changed: local file = "+localLastFile+", local version = "+localLastVersion+", winning version = "+winningLastVersion); logger.log(Level.INFO, " -> "+action); changeSet.getChangedFiles().add(winningLastVersion.getPath()); } else { logger.log(Level.INFO, " -> (15) Doing nothing: Local file does NOT exist, and winning version is marked DELETED: local file = "+localLastFile+", local version = "+localLastVersion+", winning version = "+winningLastVersion); } } else { FileSystemAction action = new ChangeFileSystemAction(config, winnersDatabase, assembler, winningLastVersion, localLastVersion); fileSystemActions.add(action); logger.log(Level.INFO, " -> (16) Content changed: Local file differs from last version: local file = "+localLastFile+", local version = "+localLastVersion+", winning version = "+winningLastVersion); logger.log(Level.INFO, " -> "+action); changeSet.getChangedFiles().add(winningLastVersion.getPath()); } }
public FileVersionComparison compare(FileProperties expectedFileProperties, FileProperties actualFileProperties, boolean compareChecksums) { FileVersionComparison fileComparison = new FileVersionComparison(); fileComparison.fileChanges = new HashSet<FileChange>(); fileComparison.expectedFileProperties = expectedFileProperties; fileComparison.actualFileProperties = actualFileProperties; boolean cancelFurtherTests = performCancellingTests(fileComparison); if (cancelFurtherTests) { return fileComparison; } switch (actualFileProperties.getType()) { case FILE: compareFile(fileComparison, compareChecksums); break; case FOLDER: compareFolder(fileComparison); break; case SYMLINK: compareSymlink(fileComparison); break; default: throw new RuntimeException("This should not happen. Unknown file type: " + actualFileProperties.getType()); } return fileComparison; }
@Override public FileSystemActionResult execute() throws Exception { if (fileExists(fileVersion2)) { FileVersionComparison fileComparison = fileChanges(fileVersion2); if (fileComparison.areEqual()) { // Nothing to do. } else if (CollectionUtil.containsOnly(fileComparison.getFileChanges(), FileChange.CHANGED_LINK_TARGET)) { deleteFile(fileVersion2); createSymlink(fileVersion2); } else { moveToConflictFile(fileVersion2); createSymlink(fileVersion2); } } else { createSymlink(fileVersion2); } return new FileSystemActionResult(); }
private void compareFile(FileVersionComparison fileComparison, boolean compareChecksums) { comparePath(fileComparison); compareModifiedDate(fileComparison); compareSize(fileComparison); compareAttributes(fileComparison); // Check if checksum comparison necessary if (fileComparison.getFileChanges().contains(FileChange.CHANGED_SIZE)) { fileComparison.fileChanges.add(FileChange.CHANGED_CHECKSUM); } else if (compareChecksums) { compareChecksum(fileComparison); } }
protected boolean fileAsExpected(FileVersion expectedLocalFileVersion, FileChange... allowedFileChanges) { FileVersionComparison fileVersionComparison = fileChanges(expectedLocalFileVersion); if (fileVersionComparison.areEqual()) { return true; } else if (allowedFileChanges.length > 0) { return CollectionUtil.containsOnly(fileVersionComparison.getFileChanges(), allowedFileChanges); } else { return false; } }