Feature: Delete policies and ordering (--delete-before, --delete-after, --delete-excluded, --max-delete) #179

Closed
opened 2026-07-30 18:32:17 +02:00 by TapTap · 0 comments
Owner

Corresponding rsync flags/behavior:

  • --delete — already implemented: delete files on receiver not in source
  • --delete-before — delete before starting transfer
  • --delete-after — delete after completing transfer
  • --delete-excluded — also delete excluded files on the receiver
  • --max-delete=N — don't delete more than N files

Current FastSync behavior:
FastSync implements only --delete, and deletions happen after the manifest is received (effectively --delete-after). There is no control over ordering, no --delete-excluded, and no limit on the number of deletions.

Proposed changes:

  • CLI flags: --delete-before, --delete-after (default), --delete-excluded, --max-delete=N
  • Config fields: DeletePolicy delete_policy, bool delete_excluded, int max_delete
  • Implementation:
    • --delete-before: build manifest during scan, send it early, wait for server to finish deletions before sending file data
    • --delete-after: current behavior
    • --delete-excluded: include excluded source paths in the manifest so the receiver removes them
    • --max-delete=N: abort if deletion count exceeds N
  • Protocol: extend with STATUS_DELETE_MANIFEST sent before data when --delete-before is used

Priority: medium
Rationale: Ordering matters for disk-space management (--delete-before frees space before receiving) and safety (--max-delete prevents catastrophic deletes).

Acceptance criteria:

  • --delete-before removes extra files before any new data is written
  • --delete-excluded removes files on the receiver that match source --exclude patterns
  • --max-delete=10 aborts when more than 10 files would be deleted
  • Default behavior remains --delete-after
**Corresponding rsync flags/behavior:** - `--delete` — already implemented: delete files on receiver not in source - `--delete-before` — delete before starting transfer - `--delete-after` — delete after completing transfer - `--delete-excluded` — also delete excluded files on the receiver - `--max-delete=N` — don't delete more than N files **Current FastSync behavior:** FastSync implements only `--delete`, and deletions happen after the manifest is received (effectively `--delete-after`). There is no control over ordering, no `--delete-excluded`, and no limit on the number of deletions. **Proposed changes:** - CLI flags: `--delete-before`, `--delete-after` (default), `--delete-excluded`, `--max-delete=N` - Config fields: `DeletePolicy delete_policy`, `bool delete_excluded`, `int max_delete` - Implementation: - `--delete-before`: build manifest during scan, send it early, wait for server to finish deletions before sending file data - `--delete-after`: current behavior - `--delete-excluded`: include excluded source paths in the manifest so the receiver removes them - `--max-delete=N`: abort if deletion count exceeds N - Protocol: extend with `STATUS_DELETE_MANIFEST` sent before data when `--delete-before` is used **Priority:** medium **Rationale:** Ordering matters for disk-space management (`--delete-before` frees space before receiving) and safety (`--max-delete` prevents catastrophic deletes). **Acceptance criteria:** - [ ] `--delete-before` removes extra files before any new data is written - [ ] `--delete-excluded` removes files on the receiver that match source `--exclude` patterns - [ ] `--max-delete=10` aborts when more than 10 files would be deleted - [ ] Default behavior remains `--delete-after`
TapTap added the enhancementneeds-triage labels 2026-07-30 18:32:17 +02:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: TapTap/FastSync#179