/** * Compares two {@link FileVersion}s to each other and returns a {@link FileVersionComparison} object. * * @param expectedFileVersion The expected file version (that is compared to the actual file version) * @param actualFileVersion The actual file version (that is compared to the expected file version) * @return Returns a file version comparison object, indicating if there are differences between the file versions */ public FileVersionComparison compare(FileVersion expectedFileVersion, FileVersion actualFileVersion) { FileProperties expectedFileProperties = captureFileProperties(expectedFileVersion); FileProperties actualFileProperties = captureFileProperties(actualFileVersion); return compare(expectedFileProperties, actualFileProperties, true); }
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); } }
private void compareAttributes(FileVersionComparison fileComparison) { if (EnvironmentUtil.isWindows()) { compareDosAttributes(fileComparison); } else if (EnvironmentUtil.isUnixLikeOperatingSystem()) { comparePosixPermissions(fileComparison); } }
FileVersionComparator fileVersionComparator = new FileVersionComparator(root.toFile(), "SHA1"); + StringUtil.toHex(expectedFileChecksum) + ") do not match.", expectedFileChecksum, actualFileChecksum); FileProperties actualFileProperties = fileVersionComparator.captureFileProperties(actualFile, null, true); FileProperties expectedFileProperties = fileVersionComparator.captureFileProperties(expectedFile, null, true); FileVersionComparison fileVersionComparison = fileVersionComparator.compare(expectedFileProperties, actualFileProperties, true);
/** * Compares a {@link FileVersion} with a local {@link File} and returns a {@link FileVersionComparison} object. * * <p>If the actual file does not differ in size, it is necessary to calculate and compare the checksum of the * local file to the file version to reliably determine if it has changed. Unless comparing the size and last * modified date is enough, the <tt>actualFileForceChecksum</tt> parameter must be switched to <tt>true</tt>. * * @param expectedFileVersion The expected file version (that is compared to the actual file) * @param actualFile The actual file (that is compared to the expected file version) * @param actualFileForceChecksum Force a checksum comparison if necessary (if size does not differ) * @return Returns a file version comparison object, indicating if there are differences between the file versions */ public FileVersionComparison compare(FileVersion expectedFileVersion, File actualFile, boolean actualFileForceChecksum) { return compare(expectedFileVersion, actualFile, null, actualFileForceChecksum); }
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; }
public IndexerDeduperListener(DatabaseVersion newDatabaseVersion) { this.fileVersionComparator = new FileVersionComparator(config.getLocalDir(), config.getChunker().getChecksumAlgorithm()); this.secureRandom = new SecureRandom(); this.newDatabaseVersion = newDatabaseVersion; }
@Override public boolean onFileFilter(File file) { logger.log(Level.FINER, "- +File {0}", file); startFileProperties = fileVersionComparator.captureFileProperties(file, null, false); // Check if file has vanished if (!startFileProperties.exists() || startFileProperties.isLocked()) { logger.log(Level.FINER, "- /File: {0}", file); logger.log(Level.INFO, " * NOT ADDING because file has VANISHED (exists = {0}) or is LOCKED (locked = {1}).", new Object[] { startFileProperties.exists(), startFileProperties.isLocked() }); resetFileEnd(); return false; } // Content if (startFileProperties.getType() == FileType.FILE) { logger.log(Level.FINER, "- +FileContent: {0}", file); fileContent = new FileContent(); } return true; }
private void compareFolder(FileVersionComparison fileComparison) { // comparePath(fileComparison); compareAttributes(fileComparison); }
protected FileVersionComparison fileChanges(FileVersion expectedLocalFileVersion) { File actualLocalFile = getAbsolutePathFile(expectedLocalFileVersion.getPath()); FileVersionComparison fileVersionComparison = fileVersionHelper.compare(expectedLocalFileVersion, actualLocalFile, true); return fileVersionComparison; }
public FileSystemAction(Config config, MemoryDatabase winningDatabase, FileVersion file1, FileVersion file2) { this.config = config; this.winningDatabase = winningDatabase; this.fileVersion1 = file1; this.fileVersion2 = file2; this.fileVersionHelper = new FileVersionComparator(config.getLocalDir(), config.getChunker().getChecksumAlgorithm()); }
@Override public void onFileEnd(File file, byte[] rawFileChecksum) { // Get file attributes (get them while file exists) // Note: Do NOT move any File-methods (file.anything()) below the file.exists()-part, // because the file could vanish! FileChecksum fileChecksum = (rawFileChecksum != null) ? new FileChecksum(rawFileChecksum) : null; endFileProperties = fileVersionComparator.captureFileProperties(file, fileChecksum, false); // Check if file has vanished boolean fileIsLocked = endFileProperties.isLocked(); boolean fileVanished = !endFileProperties.exists(); boolean fileHasChanged = startFileProperties.getSize() != endFileProperties.getSize() || startFileProperties.getLastModified() != endFileProperties.getLastModified(); if (fileVanished || fileIsLocked || fileHasChanged) { logger.log(Level.FINER, "- /File: {0}", file); logger.log(Level.INFO, " * NOT ADDING because file has VANISHED (" + !endFileProperties.exists() + "), is LOCKED (" + endFileProperties.isLocked() + "), or has CHANGED (" + fileHasChanged + ")"); resetFileEnd(); return; } // If it's still there, add it to the database addFileVersion(endFileProperties); // Reset resetFileEnd(); }
/** * Compares a {@link FileVersion} with a local {@link File} and returns a {@link FileVersionComparison} object. * * <p>If the actual file does not differ in size, it is necessary to calculate and compare the checksum of the * local file to the file version to reliably determine if it has changed. Unless comparing the size and last * modified date is enough, the <tt>actualFileForceChecksum</tt> parameter must be switched to <tt>true</tt>. * * <p>If the <tt>actualFileKnownChecksum</tt> parameter is set and a checksum comparison is necessary, this * parameter is used to compare checksums. If not and force checksum is enabled, the checksum is calculated * and compared. * * @param expectedFileVersion The expected file version (that is compared to the actual file) * @param actualFile The actual file (that is compared to the expected file version) * @param actualFileKnownChecksum If the checksum of the local file is known, it can be set * @param actualFileForceChecksum Force a checksum comparison if necessary (if size does not differ) * @return Returns a file version comparison object, indicating if there are differences between the file versions */ public FileVersionComparison compare(FileVersion expectedLocalFileVersion, File actualLocalFile, FileChecksum actualFileKnownChecksum, boolean actualFileForceChecksum) { FileProperties expectedLocalFileVersionProperties = captureFileProperties(expectedLocalFileVersion); FileProperties actualFileProperties = captureFileProperties(actualLocalFile, actualFileKnownChecksum, actualFileForceChecksum); return compare(expectedLocalFileVersionProperties, actualFileProperties, actualFileForceChecksum); }
FileVersionComparison fileVersionComparison = fileVersionComparator.compare(expectedLastFileVersion, actualLocalFile.toFile(), forceChecksum);
public FileSystemActionReconciliator(Config config, ChangeSet changeSet) { this.config = config; this.changeSet = changeSet; this.localDatabase = new SqlDatabase(config); this.fileVersionComparator = new FileVersionComparator(config.getLocalDir(), config.getChunker().getChecksumAlgorithm()); }
FileProperties lastFileVersionProperties = fileVersionComparator.captureFileProperties(lastFileVersion); FileVersionComparison lastToNewFileVersionComparison = fileVersionComparator.compare(fileProperties, lastFileVersionProperties, true);
private void determineActionWithLocalVersionAndLocalFileAsExpected(FileVersion winningLastVersion, File winningLastFile, FileVersion localLastVersion, File localLastFile, MemoryDatabase winnersDatabase, List<FileSystemAction> fileSystemActions) { FileVersionComparison winningVersionToLocalVersionComparison = fileVersionComparator.compare(winningLastVersion, localLastVersion);
public StatusOperation(Config config, StatusOperationOptions options) { super(config); this.fileVersionComparator = new FileVersionComparator(config.getLocalDir(), config.getChunker().getChecksumAlgorithm()); this.localDatabase = new SqlDatabase(config); this.options = options; this.eventBus = LocalEventBus.getInstance(); }
private void determineActionNoLocalLastVersion(FileVersion winningLastVersion, File winningLastFile, MemoryDatabase winnersDatabase, List<FileSystemAction> outFileSystemActions) throws Exception { FileVersionComparison winningFileToVersionComparison = fileVersionComparator.compare(winningLastVersion, winningLastFile, true);
FileVersionComparison localFileToVersionComparison = fileVersionComparator.compare(localLastVersion, localLastFile, true);