mirror of
https://github.com/rclone/rclone.git
synced 2026-10-28 22:38:53 -04:00
Before this change, when a file was new or changed on both paths and the pre-sync conflict check deemed the two copies identical, bisync skipped the copy and then rechecked the file after the sync to get its listing info. If the recheck could not confirm equality (for example, hashes unavailable due to --size-only or (--ignore-checksum + no common hash)), the file was rolled back to be retried on the next run, and every later run repeated the same check with the same result. A later change on one side was then handled against a missing or stale listing entry. After this change, files we've declared identical pre-sync are no longer rechecked post-sync. The pre-sync conflict check now also returns the values it compared, and a skipped file is recorded from the listing snapshot. If either path changed between the snapshot and the check, the prior listing is kept and the next run rechecks. When --size-only or (--ignore-checksum + no common hash) are in use, the "new or changed on both paths and equal" case skips the conflict check entirely, because it is unnecessary. The check could only compare sizes, which we already know are equal from the snapshot. The new `test_equal_skipped`, `test_conflict_window`, and `test_conflict_window_size` scenarios cover identical files that change on one path during the sync, files that change between the listing snapshot and the check for identical files, and `--size-only` files with the same size but different content. Co-Authored-By: ASRodrigo1 <45823308+asrodrigo1@users.noreply.github.com>