Fix incremental skip regression from modify-window nsec comparison
metadata_mtime_matches() required exact nanosecond equality at the default modify_window=0, but destination write-time nsecs never match source creation-time nsecs unless -M preserves metadata. Compare whole seconds (rsync's default quick-check) at window 0; keep the subsecond-refined tolerance for explicit window values.
This commit is contained in:
@@ -43,6 +43,8 @@ bool metadata_mtime_matches(time_t left_sec, long left_nsec, time_t right_sec, l
|
|||||||
seconds--;
|
seconds--;
|
||||||
nanoseconds += 1000000000LL;
|
nanoseconds += 1000000000LL;
|
||||||
}
|
}
|
||||||
|
if (modify_window == 0)
|
||||||
|
return left == right;
|
||||||
return seconds < modify_window || (seconds == modify_window && nanoseconds == 0);
|
return seconds < modify_window || (seconds == modify_window && nanoseconds == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -131,7 +131,7 @@ static void test_metadata_mtime_window() {
|
|||||||
EXPECT_FALSE(metadata_mtime_matches(100, 100000000, 102, 900000000, 2));
|
EXPECT_FALSE(metadata_mtime_matches(100, 100000000, 102, 900000000, 2));
|
||||||
EXPECT_TRUE(metadata_mtime_matches(100, 900000000, 102, 900000000, 2));
|
EXPECT_TRUE(metadata_mtime_matches(100, 900000000, 102, 900000000, 2));
|
||||||
EXPECT_FALSE(metadata_mtime_matches(100, 900000000, 101, 100000001, 0));
|
EXPECT_FALSE(metadata_mtime_matches(100, 900000000, 101, 100000001, 0));
|
||||||
EXPECT_FALSE(metadata_mtime_matches(100, 100000000, 100, 100000001, 0));
|
EXPECT_TRUE(metadata_mtime_matches(100, 100000000, 100, 100000001, 0));
|
||||||
EXPECT_TRUE(metadata_mtime_matches(100, 100000000, 100, 100000000, 0));
|
EXPECT_TRUE(metadata_mtime_matches(100, 100000000, 100, 100000000, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user