client: report rsync's 16-byte %c sum header for whole-file transfers
rsync's %c counts the block-checksum bytes received: even a whole-file transfer with no basis receives rsync's 16-byte sum header (append and inplace included), while a dry run receives nothing. FastSync's whole-file path has no equivalent header, so report 16 for parity when delta is inactive, keep 0 for dry runs, and keep the real received bytes when delta is active (FastSync's signature framing differs, so delta %c stays divergent). Add a strict %c/%l/%n differential against rsync and turn the %b check into a real rsync differential (semantics: both count wire bytes and exceed %l; the exact values are protocol-specific).
This commit is contained in:
@@ -590,7 +590,15 @@ void change_emit_file_sent_bytes(const Config* config, const File* file,
|
||||
event.bytes_sent = 0;
|
||||
} else {
|
||||
event.bytes_sent = bytes_sent;
|
||||
event.bytes_read = bytes_read;
|
||||
/* rsync's %c is the block-checksum bytes received for the file. Even a
|
||||
* whole-file transfer (no basis; --append/--inplace included) receives
|
||||
* rsync's 16-byte sum header, so rsync reports 16; a dry run transfers
|
||||
* nothing and reports 0. FastSync's whole-file path has no sum header, so
|
||||
* report rsync's value for parity. With delta enabled the real received
|
||||
* bytes are kept, but FastSync's signature framing differs from rsync's so
|
||||
* those stay numerically divergent. */
|
||||
bool delta_active = config->use_delta && !config->whole_file;
|
||||
event.bytes_read = (!config->dry_run && !delta_active) ? 16 : bytes_read;
|
||||
}
|
||||
char* name = NULL;
|
||||
char* path = NULL;
|
||||
|
||||
Reference in New Issue
Block a user