Two residuals on --delay-updates: (1) the fixed .fastsync-stage name is wiped at prepare even if it was a genuine pre-existing destination entry — use a per-run unique name and refuse to wipe a non-owned collision; (2) rsync's --delay-updates implies --delete-after, but FastSync deletes before publication — publish before the deferred delete commit.
Two residuals on `--delay-updates`: (1) the fixed `.fastsync-stage` name is wiped at prepare even if it was a genuine pre-existing destination entry — use a per-run unique name and refuse to wipe a non-owned collision; (2) rsync's `--delay-updates` implies `--delete-after`, but FastSync deletes before publication — publish before the deferred delete commit.
Files: `src/shared/delay_updates.[ch]`, `src/server/receiver.c` (`receiver_process`/`receiver_send_success_frame`), `src/client/client_cli.c` (`cli_finalize_config`). Risk: atomic publish ordering, `--backup` interplay, `test_temp_dir_exdev.py`/`test_tmp_delorder.py`.
Fixed in PR #328. The receiver now stages under a per-run unique .fastsync-stage.<pid>.<entropy> directory created with O_EXCL, refusing a non-owned collision (a genuine destination entry is never wiped, rsync-verified). --delay-updates now implies --delete-after, and both receivers publish all staged files before the deferred delete commit; --backup files are shielded and a blocking destination dir is cleared at publication under --delete/--force. Residuals: no backup of a deleted extra; crash-leftover staging dirs are not reused. Row ❌ → ⚠️. Closing as completed.
Fixed in PR #328. The receiver now stages under a per-run unique `.fastsync-stage.<pid>.<entropy>` directory created with O_EXCL, refusing a non-owned collision (a genuine destination entry is never wiped, rsync-verified). `--delay-updates` now implies `--delete-after`, and both receivers publish all staged files before the deferred delete commit; `--backup` files are shielded and a blocking destination dir is cleared at publication under `--delete`/`--force`. Residuals: no backup of a *deleted* extra; crash-leftover staging dirs are not reused. Row ❌ → ⚠️. Closing as completed.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Two residuals on
--delay-updates: (1) the fixed.fastsync-stagename is wiped at prepare even if it was a genuine pre-existing destination entry — use a per-run unique name and refuse to wipe a non-owned collision; (2) rsync's--delay-updatesimplies--delete-after, but FastSync deletes before publication — publish before the deferred delete commit.Files:
src/shared/delay_updates.[ch],src/server/receiver.c(receiver_process/receiver_send_success_frame),src/client/client_cli.c(cli_finalize_config). Risk: atomic publish ordering,--backupinterplay,test_temp_dir_exdev.py/test_tmp_delorder.py.Fixed in PR #328. The receiver now stages under a per-run unique
.fastsync-stage.<pid>.<entropy>directory created with O_EXCL, refusing a non-owned collision (a genuine destination entry is never wiped, rsync-verified).--delay-updatesnow implies--delete-after, and both receivers publish all staged files before the deferred delete commit;--backupfiles are shielded and a blocking destination dir is cleared at publication under--delete/--force. Residuals: no backup of a deleted extra; crash-leftover staging dirs are not reused. Row ❌ → ⚠️. Closing as completed.