|
|
@ -54,7 +54,7 @@ public class ArbitraryDataDiff { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private void preExecute() { |
|
|
|
private void preExecute() { |
|
|
|
|
|
|
|
LOGGER.info("Generating diff..."); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private void postExecute() { |
|
|
|
private void postExecute() { |
|
|
@ -97,23 +97,28 @@ public class ArbitraryDataDiff { |
|
|
|
Path filePathAfter = pathAfterAbsolute.relativize(after.toAbsolutePath()); |
|
|
|
Path filePathAfter = pathAfterAbsolute.relativize(after.toAbsolutePath()); |
|
|
|
Path filePathBefore = pathBeforeAbsolute.resolve(filePathAfter); |
|
|
|
Path filePathBefore = pathBeforeAbsolute.resolve(filePathAfter); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (filePathAfter.startsWith(".qortal")) { |
|
|
|
|
|
|
|
// Ignore the .qortal metadata folder
|
|
|
|
|
|
|
|
return FileVisitResult.CONTINUE; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
boolean wasAdded = false; |
|
|
|
boolean wasAdded = false; |
|
|
|
boolean wasModified = false; |
|
|
|
boolean wasModified = false; |
|
|
|
|
|
|
|
|
|
|
|
if (!Files.exists(filePathBefore)) { |
|
|
|
if (!Files.exists(filePathBefore)) { |
|
|
|
LOGGER.info("File was added: {}", after.toString()); |
|
|
|
LOGGER.info("File was added: {}", filePathAfter.toString()); |
|
|
|
diff.addedPaths.add(filePathAfter); |
|
|
|
diff.addedPaths.add(filePathAfter); |
|
|
|
wasAdded = true; |
|
|
|
wasAdded = true; |
|
|
|
} |
|
|
|
} |
|
|
|
else if (Files.size(after) != Files.size(filePathBefore)) { |
|
|
|
else if (Files.size(after) != Files.size(filePathBefore)) { |
|
|
|
// Check file size first because it's quicker
|
|
|
|
// Check file size first because it's quicker
|
|
|
|
LOGGER.info("File size was modified: {}", after.toString()); |
|
|
|
LOGGER.info("File size was modified: {}", filePathAfter.toString()); |
|
|
|
diff.modifiedPaths.add(filePathAfter); |
|
|
|
diff.modifiedPaths.add(filePathAfter); |
|
|
|
wasModified = true; |
|
|
|
wasModified = true; |
|
|
|
} |
|
|
|
} |
|
|
|
else if (!Arrays.equals(ArbitraryDataDiff.digestFromPath(after), ArbitraryDataDiff.digestFromPath(filePathBefore))) { |
|
|
|
else if (!Arrays.equals(ArbitraryDataDiff.digestFromPath(after), ArbitraryDataDiff.digestFromPath(filePathBefore))) { |
|
|
|
// Check hashes as a last resort
|
|
|
|
// Check hashes as a last resort
|
|
|
|
LOGGER.info("File contents were modified: {}", after.toString()); |
|
|
|
LOGGER.info("File contents were modified: {}", filePathAfter.toString()); |
|
|
|
diff.modifiedPaths.add(filePathAfter); |
|
|
|
diff.modifiedPaths.add(filePathAfter); |
|
|
|
wasModified = true; |
|
|
|
wasModified = true; |
|
|
|
} |
|
|
|
} |
|
|
@ -148,7 +153,6 @@ public class ArbitraryDataDiff { |
|
|
|
try { |
|
|
|
try { |
|
|
|
final Path pathBeforeAbsolute = this.pathBefore.toAbsolutePath(); |
|
|
|
final Path pathBeforeAbsolute = this.pathBefore.toAbsolutePath(); |
|
|
|
final Path pathAfterAbsolute = this.pathAfter.toAbsolutePath(); |
|
|
|
final Path pathAfterAbsolute = this.pathAfter.toAbsolutePath(); |
|
|
|
final Path diffPathAbsolute = this.diffPath.toAbsolutePath(); |
|
|
|
|
|
|
|
final ArbitraryDataDiff diff = this; |
|
|
|
final ArbitraryDataDiff diff = this; |
|
|
|
|
|
|
|
|
|
|
|
// Check for removals
|
|
|
|
// Check for removals
|
|
|
@ -159,6 +163,11 @@ public class ArbitraryDataDiff { |
|
|
|
Path directoryPathBefore = pathBeforeAbsolute.relativize(before.toAbsolutePath()); |
|
|
|
Path directoryPathBefore = pathBeforeAbsolute.relativize(before.toAbsolutePath()); |
|
|
|
Path directoryPathAfter = pathAfterAbsolute.resolve(directoryPathBefore); |
|
|
|
Path directoryPathAfter = pathAfterAbsolute.resolve(directoryPathBefore); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (directoryPathBefore.startsWith(".qortal")) { |
|
|
|
|
|
|
|
// Ignore the .qortal metadata folder
|
|
|
|
|
|
|
|
return FileVisitResult.CONTINUE; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (!Files.exists(directoryPathAfter)) { |
|
|
|
if (!Files.exists(directoryPathAfter)) { |
|
|
|
LOGGER.info("Directory was removed: {}", directoryPathAfter.toString()); |
|
|
|
LOGGER.info("Directory was removed: {}", directoryPathAfter.toString()); |
|
|
|
diff.removedPaths.add(directoryPathBefore); |
|
|
|
diff.removedPaths.add(directoryPathBefore); |
|
|
@ -173,8 +182,13 @@ public class ArbitraryDataDiff { |
|
|
|
Path filePathBefore = pathBeforeAbsolute.relativize(before.toAbsolutePath()); |
|
|
|
Path filePathBefore = pathBeforeAbsolute.relativize(before.toAbsolutePath()); |
|
|
|
Path filePathAfter = pathAfterAbsolute.resolve(filePathBefore); |
|
|
|
Path filePathAfter = pathAfterAbsolute.resolve(filePathBefore); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (filePathBefore.startsWith(".qortal")) { |
|
|
|
|
|
|
|
// Ignore the .qortal metadata folder
|
|
|
|
|
|
|
|
return FileVisitResult.CONTINUE; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (!Files.exists(filePathAfter)) { |
|
|
|
if (!Files.exists(filePathAfter)) { |
|
|
|
LOGGER.trace("File was removed: {}", before.toString()); |
|
|
|
LOGGER.trace("File was removed: {}", filePathBefore.toString()); |
|
|
|
diff.removedPaths.add(filePathBefore); |
|
|
|
diff.removedPaths.add(filePathBefore); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|