Adds RSYNC_COMPAT.md — comprehensive mapping of 141 rsync features to FastSync implementation status.
✅ 44 implemented
⚠️ 31 partial (flag parsed but behavior incomplete)
❌ 66 not yet implemented
Includes priority recommendations for next features to implement.
Adds RSYNC_COMPAT.md — comprehensive mapping of 141 rsync features to FastSync implementation status.
- ✅ 44 implemented
- ⚠️ 31 partial (flag parsed but behavior incomplete)
- ❌ 66 not yet implemented
Includes priority recommendations for next features to implement.
[1] RSYNC_COMPAT.md:143 — -l, --links incorrectly marked ✅
Symlink targets are never transmitted or recreated on the receiving side. FileMetadata stores mode/uid/gid/mtime — NOT the link target path. file_restore_metadata() uses chmod()/chown() which cannot create symlinks. to_disk() always creates a regular file via fwrite(). No symlink() call exists anywhere in the codebase.
Fix: Change to ⚠️ Partial — "Scanner includes symlinks; target path not transmitted"
[2] RSYNC_COMPAT.md:118 — -p, --perms incorrectly marked ✅ -p is repurposed for SSH port (client_cli.c:69-72). --perms is never parsed — triggers "Unknown option" error. Permissions ARE preserved through -M/--preserve, but -p has different semantics.
Fix: Change to 🔀 Alt Arg — "-p means SSH port; permissions preserved via -M/--preserve"
WARNING
[3] RSYNC_COMPAT.md:162 — -c, --checksum have different semantics -c is an alias for compression (not checksum). --checksum sets config->checksum.
Fix: Change to 🔀 Alt Arg — "-c means compression; --checksum stored and forwarded to scanner"
[4] RSYNC_COMPAT.md:190 — --address note is wrong --address sets config->address, NOT config->bind_address. These are separate flags.
Fix: Change note to "address config field"
[5] RSYNC_COMPAT.md:85,164 — --whole-file duplicated
Appears in both Section 5 (-W, --whole-file) and Section 11 (--whole-file). Same rsync flag.
Fix: Remove one entry
[6] RSYNC_COMPAT.md:215,238 — --secluded-args duplicated
Appears in both Section 15 and Section 17. Same rsync flag.
Fix: Remove duplicate from Section 15
[7] RSYNC_COMPAT.md:9 — Summary counts don't match actuals
Actual unique rows: ~137, not 142. Counts are off by ~3.
Fix: Recount after removing duplicates
STYLE
[8] RSYNC_COMPAT.md:178 — --skip-compress note misleading
Internal skip list is hardcoded, not user-configurable like rsync's --skip-compress=LIST.
Fix: "Internal skip for hardcoded types; not user-configurable"
[9] RSYNC_COMPAT.md:86 — --block-size note incomplete
FastSync uses it for delta blocks, not checksum blocks like rsync.
Fix: "Parsed as --delta-block; controls delta transfer block size"
## PR Review
```
=== PR REVIEW SUMMARY ===
Branch: docs/rsync-compat
Files reviewed: 1 (RSYNC_COMPAT.md)
Issues found: 9
CRITICAL: 2
WARNING: 5
STYLE: 2
```
### CRITICAL
**[1] RSYNC_COMPAT.md:143 — `-l`, `--links` incorrectly marked ✅**
Symlink targets are never transmitted or recreated on the receiving side. `FileMetadata` stores mode/uid/gid/mtime — NOT the link target path. `file_restore_metadata()` uses `chmod()`/`chown()` which cannot create symlinks. `to_disk()` always creates a regular file via `fwrite()`. No `symlink()` call exists anywhere in the codebase.
> Fix: Change to ⚠️ Partial — "Scanner includes symlinks; target path not transmitted"
**[2] RSYNC_COMPAT.md:118 — `-p`, `--perms` incorrectly marked ✅**
`-p` is repurposed for SSH port (`client_cli.c:69-72`). `--perms` is never parsed — triggers "Unknown option" error. Permissions ARE preserved through `-M`/`--preserve`, but `-p` has different semantics.
> Fix: Change to 🔀 Alt Arg — "-p means SSH port; permissions preserved via -M/--preserve"
### WARNING
**[3] RSYNC_COMPAT.md:162 — `-c`, `--checksum` have different semantics**
`-c` is an alias for compression (not checksum). `--checksum` sets `config->checksum`.
> Fix: Change to 🔀 Alt Arg — "-c means compression; --checksum stored and forwarded to scanner"
**[4] RSYNC_COMPAT.md:190 — `--address` note is wrong**
`--address` sets `config->address`, NOT `config->bind_address`. These are separate flags.
> Fix: Change note to "`address` config field"
**[5] RSYNC_COMPAT.md:85,164 — `--whole-file` duplicated**
Appears in both Section 5 (`-W`, `--whole-file`) and Section 11 (`--whole-file`). Same rsync flag.
> Fix: Remove one entry
**[6] RSYNC_COMPAT.md:215,238 — `--secluded-args` duplicated**
Appears in both Section 15 and Section 17. Same rsync flag.
> Fix: Remove duplicate from Section 15
**[7] RSYNC_COMPAT.md:9 — Summary counts don't match actuals**
Actual unique rows: ~137, not 142. Counts are off by ~3.
> Fix: Recount after removing duplicates
### STYLE
**[8] RSYNC_COMPAT.md:178 — `--skip-compress` note misleading**
Internal skip list is hardcoded, not user-configurable like rsync's `--skip-compress=LIST`.
> Fix: "Internal skip for hardcoded types; not user-configurable"
**[9] RSYNC_COMPAT.md:86 — `--block-size` note incomplete**
FastSync uses it for delta blocks, not checksum blocks like rsync.
> Fix: "Parsed as --delta-block; controls delta transfer block size"
---
### VERDICT
**[FAIL]** — 2 critical issues: `-l`/`--links` and `-p`/`--perms` incorrectly marked ✅ Implemented.
- Fix -l/--links: mark as Partial (symlink targets not transmitted)
- Fix -p/--perms: mark as Alt Arg (-p means SSH port, not perms)
- Fix -c/--checksum: mark as Alt Arg (-c means compression)
- Fix --address note: correct config field name
- Remove --whole-file duplicate (Section 5 and 11)
- Remove --secluded-args duplicate (Section 15 and 17)
- Fix --skip-compress note: clarify hardcoded, not user-configurable
- Fix --block-size note: clarify delta transfer, not checksum blocks
- Recount summary totals: 39/5/30/62 = 136 total
TapTap
merged commit 98cb8e212e into dev2026-08-02 09:20:37 +02:00
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.
Adds RSYNC_COMPAT.md — comprehensive mapping of 141 rsync features to FastSync implementation status.
Includes priority recommendations for next features to implement.
64a4a8345ato0b68974b42PR Review
CRITICAL
[1] RSYNC_COMPAT.md:143 —
-l,--linksincorrectly marked ✅Symlink targets are never transmitted or recreated on the receiving side.
FileMetadatastores mode/uid/gid/mtime — NOT the link target path.file_restore_metadata()useschmod()/chown()which cannot create symlinks.to_disk()always creates a regular file viafwrite(). Nosymlink()call exists anywhere in the codebase.[2] RSYNC_COMPAT.md:118 —
-p,--permsincorrectly marked ✅-pis repurposed for SSH port (client_cli.c:69-72).--permsis never parsed — triggers "Unknown option" error. Permissions ARE preserved through-M/--preserve, but-phas different semantics.WARNING
[3] RSYNC_COMPAT.md:162 —
-c,--checksumhave different semantics-cis an alias for compression (not checksum).--checksumsetsconfig->checksum.[4] RSYNC_COMPAT.md:190 —
--addressnote is wrong--addresssetsconfig->address, NOTconfig->bind_address. These are separate flags.[5] RSYNC_COMPAT.md:85,164 —
--whole-fileduplicatedAppears in both Section 5 (
-W,--whole-file) and Section 11 (--whole-file). Same rsync flag.[6] RSYNC_COMPAT.md:215,238 —
--secluded-argsduplicatedAppears in both Section 15 and Section 17. Same rsync flag.
[7] RSYNC_COMPAT.md:9 — Summary counts don't match actuals
Actual unique rows: ~137, not 142. Counts are off by ~3.
STYLE
[8] RSYNC_COMPAT.md:178 —
--skip-compressnote misleadingInternal skip list is hardcoded, not user-configurable like rsync's
--skip-compress=LIST.[9] RSYNC_COMPAT.md:86 —
--block-sizenote incompleteFastSync uses it for delta blocks, not checksum blocks like rsync.
VERDICT
[FAIL] — 2 critical issues:
-l/--linksand-p/--permsincorrectly marked ✅ Implemented.