From 743b00ffdd4c64edba8da02f5a26fd36b5c390c9 Mon Sep 17 00:00:00 2001 From: TapTap Date: Tue, 8 Sep 2026 22:42:02 +0200 Subject: [PATCH] docs: recount RSYNC_COMPAT summary after Phase-4 wave C (symlink-trust + devices + acl/xattr) Wave C moved 12 rows: -l/--links now real (was Partial). New Implemented (7): --munge-links, -k/--copy-dirlinks, -K/--keep-dirlinks, -D, -A/--acls, -X/--xattrs (links was Partial->Implemented). New Partial (5): --devices, --specials, --copy-devices, --write-devices, --fake-super. Summary: Implemented 94->101, Partial 6->10, Not Implemented 41->30 (Total 147). Final Phase-4 summary: 101/3/10/3/30 = 147; PROTOCOL_VERSION 2.13.0. --- RSYNC_COMPAT.md | 6 +++--- src/client/client_send.c | 2 +- src/server/receiver.c | 2 +- src/shared/chunk.c | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/RSYNC_COMPAT.md b/RSYNC_COMPAT.md index b1dae47..5531e52 100644 --- a/RSYNC_COMPAT.md +++ b/RSYNC_COMPAT.md @@ -6,11 +6,11 @@ This document maps rsync's full feature set to FastSync's current implementation | Status | Count | Description | |--------|-------|-------------| -| ✅ Implemented | 94 | Feature works end-to-end | +| ✅ Implemented | 101 | Feature works end-to-end | | 🔀 Alt Arg | 3 | Functionality exists but under different flag/semantics | -| ⚠️ Partial | 6 | Flag parsed/stored but behavior incomplete | +| ⚠️ Partial | 10 | Flag parsed/stored but behavior incomplete | | 🔄 Compatibility No-op | 3 | Flag is accepted for CLI compatibility but has no effect | -| ❌ Not Implemented | 41 | Flag not recognized or no behavior | +| ❌ Not Implemented | 30 | Flag not recognized or no behavior | | **Total** | **147** | | --- diff --git a/src/client/client_send.c b/src/client/client_send.c index 1649788..2f0c00a 100644 --- a/src/client/client_send.c +++ b/src/client/client_send.c @@ -1277,7 +1277,7 @@ static int send_chunk_with_removal(Client* client, Chunk* chunk, Config* config, change_emit_file_sent(config, f); continue; } -/* Symlink entry (-l / -k keep-as-symlink): only the target rides the wire. */ + /* Symlink entry (-l / -k keep-as-symlink): only the target rides the wire. */ if (f->is_symlink) { if (!send_symlink_entry(client, f, config)) return -1; diff --git a/src/server/receiver.c b/src/server/receiver.c index 766dab5..62694fb 100644 --- a/src/server/receiver.c +++ b/src/server/receiver.c @@ -186,7 +186,7 @@ int receiver_process_pending(Config* config, int file_descriptor, const Receiver File* file = file_receive_hardlink(file_descriptor); if (!file || !sink->store_file(file, sink->context)) goto receive_error; -} else if (status == STATUS_SYMLINK) { + } else if (status == STATUS_SYMLINK) { File* sym = file_receive_symlink(file_descriptor, config); if (!sym || !sink->store_file(sym, sink->context)) goto receive_error; diff --git a/src/shared/chunk.c b/src/shared/chunk.c index 974af0c..5b0069e 100644 --- a/src/shared/chunk.c +++ b/src/shared/chunk.c @@ -135,7 +135,7 @@ Data* chunk_serialize(Chunk* chunk, bool use_metadata) { memcpy(data_pointer, wire_path, path_len); data_pointer += path_len; -int entry_type = file->is_dir ? 1 : (file->is_symlink ? 2 : (file->is_special ? 3 : 0)); + int entry_type = file->is_dir ? 1 : (file->is_symlink ? 2 : (file->is_special ? 3 : 0)); memcpy(data_pointer, &entry_type, sizeof(int)); data_pointer += sizeof(int);