summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoel Klinghed <the_jk@spawned.biz>2024-11-06 00:18:04 +0100
committerJoel Klinghed <the_jk@spawned.biz>2024-11-06 00:18:04 +0100
commitc8b261535c069c47df70592f2acba35b2c29a54c (patch)
treef938d34a4f828dd4aecf52efd5badaf9efdd3d07
parent717b7da35d3c38baaf5d975ea76c376ead922211 (diff)
Change SingleMerge to only use second precision when comparing last modified
Otherwise you get problems with one file system uses seconds and another milliseconds and suddenly two files that are created at the same time does not have the same timestamp. Makes the test suite take 2 seconds longer to run but it is what it is.
-rw-r--r--libs/io/src/main/java/org/the_jk/cleversync/io/SingleMerge.kt5
-rw-r--r--libs/io/src/test/java/org/the_jk/cleversync/io/SingleMergeLocalTest.kt3
-rw-r--r--libs/test-utils/src/main/java/org/the_jk/cleversync/io/BaseSingleMergeTest.kt13
3 files changed, 13 insertions, 8 deletions
diff --git a/libs/io/src/main/java/org/the_jk/cleversync/io/SingleMerge.kt b/libs/io/src/main/java/org/the_jk/cleversync/io/SingleMerge.kt
index f9107db..711daae 100644
--- a/libs/io/src/main/java/org/the_jk/cleversync/io/SingleMerge.kt
+++ b/libs/io/src/main/java/org/the_jk/cleversync/io/SingleMerge.kt
@@ -100,7 +100,10 @@ object SingleMerge {
} else {
val targetFile = targetContent.files.find { it.name == sourceName }
if (targetFile != null) {
- if (targetFile.size != sourceSize || sourceLastModified > targetFile.lastModified) {
+ // When comparing times, reduce to nearest second, anything else
+ // over network based filesystems is just silly.
+ if (targetFile.size != sourceSize ||
+ sourceLastModified.epochSecond > targetFile.lastModified.epochSecond) {
actions.add(Action.Copy(sourceName, overwrite = true))
}
} else {
diff --git a/libs/io/src/test/java/org/the_jk/cleversync/io/SingleMergeLocalTest.kt b/libs/io/src/test/java/org/the_jk/cleversync/io/SingleMergeLocalTest.kt
index 07cc848..d13213c 100644
--- a/libs/io/src/test/java/org/the_jk/cleversync/io/SingleMergeLocalTest.kt
+++ b/libs/io/src/test/java/org/the_jk/cleversync/io/SingleMergeLocalTest.kt
@@ -3,7 +3,6 @@ package org.the_jk.cleversync.io
import org.junit.Rule
import org.junit.rules.TemporaryFolder
import org.the_jk.cleversync.local.LocalTreeFactory
-import kotlin.time.Duration.Companion.milliseconds
class SingleMergeLocalTest : BaseSingleMergeTest() {
@Rule
@@ -21,6 +20,4 @@ class SingleMergeLocalTest : BaseSingleMergeTest() {
}
override fun targetSupportsSymlinks() = true
-
- override fun minModificationTime() = 10.milliseconds
}
diff --git a/libs/test-utils/src/main/java/org/the_jk/cleversync/io/BaseSingleMergeTest.kt b/libs/test-utils/src/main/java/org/the_jk/cleversync/io/BaseSingleMergeTest.kt
index 65d870b..c50f6fa 100644
--- a/libs/test-utils/src/main/java/org/the_jk/cleversync/io/BaseSingleMergeTest.kt
+++ b/libs/test-utils/src/main/java/org/the_jk/cleversync/io/BaseSingleMergeTest.kt
@@ -6,7 +6,7 @@ import org.junit.Assert
import org.junit.Assume
import org.junit.Before
import org.junit.Test
-import kotlin.time.Duration
+import kotlin.time.Duration.Companion.seconds
abstract class BaseSingleMergeTest {
private lateinit var src: ModifiableTree
@@ -67,7 +67,7 @@ abstract class BaseSingleMergeTest {
fun oneFileAlreadyExistsSameSizeContentOlder() {
val tgtFile = tgt.createFile("foo")
tgtFile.write().writer().use { it.write("Cruel World") }
- Thread.sleep(minModificationTime().inWholeMilliseconds)
+ Thread.sleep(MIN_MODIFICATION_TIME.inWholeMilliseconds)
val srcFile = src.createFile("foo")
srcFile.write().writer().use { it.write("Hello World") }
@@ -84,7 +84,7 @@ abstract class BaseSingleMergeTest {
fun oneFileAlreadyExistsSameSizeContentNewer() {
val srcFile = src.createFile("foo")
srcFile.write().writer().use { it.write("Hello World") }
- Thread.sleep(minModificationTime().inWholeMilliseconds)
+ Thread.sleep(MIN_MODIFICATION_TIME.inWholeMilliseconds)
val tgtFile = tgt.createFile("foo")
tgtFile.write().writer().use { it.write("hello world") }
@@ -705,5 +705,10 @@ abstract class BaseSingleMergeTest {
abstract fun target(): ModifiableTree
abstract fun targetSupportsSymlinks(): Boolean
- abstract fun minModificationTime(): Duration
+ private companion object {
+ // See SingleMerge, anything less than a second is ignored
+ // Not great, but for network file systems we really can't
+ // be asking for better.
+ val MIN_MODIFICATION_TIME = 1.seconds
+ }
}