Move a resaved test file's mtime ahead, so the scan cannot miss it
`a_resaved_file_owes_a_reread_and_loses_its_stale_hash` failed once in a full dr-catalog run (updated 0, expected 1) and passed three times alone. The incremental scan tells a changed file by its mtime at whole-second resolution, and the `resave` helper wrote and renamed the file within the same second as the scan before it, so on a fast enough pass the resave looked like no change at all. The helper now sets the file's and its folder's mtime two seconds ahead, which is what a real resave some time after a scan looks like. Only the test helper changes; the scan's rule is right for real files.
This commit is contained in:
@@ -798,6 +798,17 @@ mod tests {
|
||||
let tmp = target.with_extension("tmp");
|
||||
fs::write(&tmp, bytes).expect("write");
|
||||
fs::rename(&tmp, &target).expect("rename");
|
||||
// A scan tells a changed file by its mtime, at whole-second
|
||||
// resolution; a resave landing in the same second as the scan
|
||||
// before it looks unchanged, and the test fails when the machine
|
||||
// is fast enough. Two seconds ahead, on the file and its folder,
|
||||
// is what a real resave some time later would look like.
|
||||
let later = std::time::SystemTime::now() + std::time::Duration::from_secs(2);
|
||||
for p in [target.as_path(), target.parent().expect("parent")] {
|
||||
fs::File::open(p)
|
||||
.and_then(|f| f.set_modified(later))
|
||||
.expect("set mtime");
|
||||
}
|
||||
self
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user