Incremental sync: --incremental flag to skip unchanged files

- New STATUS_CHECK protocol status (value 6)
- Client sends path + size + mtime; server replies OK (skip) or NEXT (send)
- config.h/c: use_incremental field sent/received over wire
- file.c/h: file_send_single_calls_no_path helper for incremental path
- client_cli.c: --incremental flag
- client_send.c: per-file check before send in both single and chunk paths
- server.c: STATUS_CHECK handling in receive_files()
- multiprocessing.c: STATUS_CHECK handling in receive_thread()
- test.py: incremental sync test case
This commit is contained in:
2026-07-16 15:38:48 +02:00
parent 45dd62f568
commit 0bfa68fee7
11 changed files with 199 additions and 11 deletions
+15
View File
@@ -96,6 +96,21 @@ bool file_load_data(File *file) {
return true;
}
bool file_send_single_calls_no_path(File *file, int file_descriptor, bool use_metadata, int compression_level) {
if (compression_level > 0) {
Data *compressed_data = data_compress(file->data, compression_level);
if (compressed_data == NULL) {
log_message(LOG_LEVEL_ERROR, "Failed to compress file data");
return false;
}
data_destroy(file->data);
file->data = compressed_data;
}
if (use_metadata && !metadata_send(file_descriptor, file->metadata)) return false;
if (!send_data(file_descriptor, file->data)) return false;
return true;
}
bool file_send_single_calls(File *file, int file_descriptor, bool use_metadata, int compression_level) {
if (compression_level > 0) {
Data *compressed_data = data_compress(file->data, compression_level);