TapTap
8843f1e3cf
Merge branch 'parity2/f1' into parity/no-wire
2026-09-24 01:25:41 +02:00
TapTap
96e02f52c0
fix(delay-updates): unique staging dir and implied --delete-after ordering ( #317 )
2026-09-24 01:18:13 +02:00
TapTap
f7d5dda93b
Merge PR #327 : wire backlog (2.30.0)
CI / lint (push) Successful in 1m51s
CI / parity-fast (push) Skipped
CI / parity-full (push) Successful in 22s
CI / sanitizers (address) (push) Successful in 54s
CI / sanitizers (undefined) (push) Successful in 43s
CI / build-and-test (push) Successful in 1m18s
CI / fuzz-build (push) Successful in 50s
CI / coverage (push) Successful in 46s
CI / valgrind (push) Successful in 2m39s
2026-09-24 00:37:47 +02:00
TapTap
6d9cdb83ba
Merge branch 'wire/h2' into wire/backlog-230
CI / lint (pull_request) Successful in 1m50s
CI / parity-full (pull_request) Skipped
CI / sanitizers (address) (pull_request) Skipped
CI / sanitizers (undefined) (pull_request) Skipped
CI / fuzz-build (pull_request) Skipped
CI / coverage (pull_request) Skipped
CI / valgrind (pull_request) Skipped
CI / parity-fast (pull_request) Successful in 17s
CI / build-and-test (pull_request) Successful in 55s
2026-09-24 00:25:15 +02:00
TapTap
7c748f1f7a
Merge branch 'wire/h1' into wire/backlog-230
2026-09-24 00:25:15 +02:00
TapTap
884530c9a2
fix(filter): correct per-directory rule owner coordinate; post-clear ownership and bounds
2026-09-24 00:24:52 +02:00
TapTap
729f3ef8e1
fix(protocol): atomic client-msg flag, sanitize peer messages, flush before terminal, serialization probe
2026-09-23 23:56:31 +02:00
TapTap
b414f197af
feat(filter): per-directory merge rules at the receiver; implement e/n/w/- modifiers
2026-09-23 22:46:14 +02:00
TapTap
29f8be161c
feat(protocol): destination-state itemize for dirs/symlinks; --stats deleted breakdown
2026-09-23 21:52:40 +02:00
TapTap
cb2979fdf1
feat(protocol): client-message channel and rsync partial exit 23 (2.30.0)
2026-09-23 20:33:27 +02:00
TapTap
00197102bf
Release v2.29.0
...
CI / lint (push) Successful in 1m48s
CI / parity-fast (push) Skipped
CI / lint (pull_request) Successful in 1m48s
CI / parity-full (pull_request) Skipped
CI / sanitizers (address) (pull_request) Skipped
CI / sanitizers (undefined) (pull_request) Skipped
CI / fuzz-build (pull_request) Skipped
CI / coverage (pull_request) Skipped
CI / valgrind (pull_request) Skipped
CI / parity-full (push) Successful in 19s
CI / sanitizers (address) (push) Successful in 50s
CI / sanitizers (undefined) (push) Successful in 44s
CI / build-and-test (push) Successful in 1m19s
CI / coverage (push) Successful in 45s
CI / fuzz-build (push) Successful in 54s
CI / parity-fast (pull_request) Successful in 20s
CI / build-and-test (pull_request) Successful in 56s
CI / valgrind (push) Successful in 2m43s
- Transport I/O vtable over TCP/TLS; TLS multithreaded sendfile fixed
- Symlink-xattr wire block (protocol 2.29.0; config frame unchanged)
- No-wire parity burn-down: --inc-recursive, in-root --temp-dir,
--delete-before phase-0, rsync-interoperable --fake-super, --devices
per-entry failure, rsyncd.conf key subset (read-only default)
- Protocol version: 2.29.0
- Tested: unit, integration, ASan, UBSan, valgrind, differential parity
v2.29.0
2026-09-23 01:59:54 +02:00
TapTap
13b257d1dd
Merge PR #311 : transport I/O vtable + symlink-xattr wire block (2.29.0)
CI / lint (push) Successful in 1m48s
CI / parity-fast (push) Skipped
CI / parity-full (push) Successful in 20s
CI / sanitizers (address) (push) Successful in 54s
CI / sanitizers (undefined) (push) Successful in 45s
CI / build-and-test (push) Successful in 1m20s
CI / fuzz-build (push) Successful in 48s
CI / coverage (push) Successful in 46s
CI / valgrind (push) Successful in 2m35s
2026-09-23 01:50:51 +02:00
TapTap
f3d7672694
docs: bump release version to 2.29.0 and reconcile protocol docs
CI / lint (pull_request) Successful in 1m48s
CI / parity-full (pull_request) Skipped
CI / sanitizers (address) (pull_request) Skipped
CI / sanitizers (undefined) (pull_request) Skipped
CI / fuzz-build (pull_request) Skipped
CI / coverage (pull_request) Skipped
CI / valgrind (pull_request) Skipped
CI / parity-fast (pull_request) Successful in 20s
CI / build-and-test (pull_request) Successful in 57s
2026-09-23 01:45:30 +02:00
TapTap
18b821d32c
Merge branch 'feat/transport-g2' into feat/transport-xattr
2026-09-23 01:36:25 +02:00
TapTap
6ad065925f
Merge branch 'feat/transport-g1' into feat/transport-xattr
2026-09-23 01:36:25 +02:00
TapTap
46dcefe218
fix(protocol): classify TLS EOF before EINTR retry; harden current-ssl resolver; real TLS regression test
2026-09-23 01:36:08 +02:00
TapTap
b88acdbd3c
fix(xattr): whitelist path-based symlink apply; strengthen symlink xattr tests
2026-09-23 01:01:18 +02:00
TapTap
c29bce54fc
Merge branch 'feat/transport-c2' into feat/transport-xattr
2026-09-23 00:35:05 +02:00
TapTap
d98e971fcc
Merge branch 'feat/transport-c1' into feat/transport-xattr
2026-09-23 00:35:05 +02:00
TapTap
492ce0ce89
feat(xattr): carry and apply symlink xattrs (protocol 2.29.0)
2026-09-23 00:34:39 +02:00
TapTap
ec6692ac41
protocol: add transport I/O vtable over TCP/TLS primitives
...
Introduce ProtocolIoOps (send/recv/has_pending), selected once by
protocol_session_init() and protocol_session_set_ssl(), and dispatch the
send, receive and status-read loops through session->ops instead of
branching on session->ssl at runtime.
Each op performs one transfer attempt and classifies the result
(PROTOCOL_IO_RETRY/CLOSED/ERROR), preserving the WANT_READ/WANT_WRITE
wait_events switching, the SSL_ERROR_SYSCALL/EINTR retry, the
SSL_pending poll gating and the deadline handling. The raw read()/write()
fallback lives in the plaintext ops.
Add unit tests: a socketpair session with a counting ops wrapper proving
the loops dispatch through the vtable, and a worker-thread test that
protocol_current_ssl() resolves the bound session's SSL when io_ssl is NULL.
2026-09-23 00:18:36 +02:00
TapTap
1f8d60e30d
protocol: resolve TLS transport from the bound session, not thread-local io_ssl
...
file_send.c chose between sendfile() and the TLS-aware buffered path by
calling io_get_ssl(), which reads the thread-local io_ssl. A worker thread
that bound a TLS ProtocolSession via protocol_session_bind() never ran the
handshake in that thread, so io_ssl is NULL there and a TLS + --threads
transfer took the raw sendfile() path on an encrypted socket.
Add protocol_current_ssl(), which prefers the bound session's SSL and falls
back to io_ssl on the fd-shim path, and use it in file_send.c. Un-xfail
test_tls_with_multithreading.
2026-09-23 00:18:29 +02:00
TapTap
6db9827b87
Merge PR #310 : restore dumpable flag for ASan/LSan
CI / lint (push) Successful in 1m46s
CI / parity-fast (push) Skipped
CI / parity-full (push) Successful in 21s
CI / sanitizers (address) (push) Successful in 54s
CI / sanitizers (undefined) (push) Successful in 43s
CI / build-and-test (push) Successful in 1m22s
CI / fuzz-build (push) Successful in 48s
CI / coverage (push) Successful in 44s
CI / valgrind (push) Successful in 2m17s
2026-09-22 23:50:54 +02:00
TapTap
a07cc00bb0
test: restore dumpable flag after setuid drop so LSan can run under ASan
CI / lint (pull_request) Successful in 1m48s
CI / parity-full (pull_request) Skipped
CI / sanitizers (address) (pull_request) Skipped
CI / sanitizers (undefined) (pull_request) Skipped
CI / fuzz-build (pull_request) Skipped
CI / coverage (pull_request) Skipped
CI / valgrind (pull_request) Skipped
CI / parity-fast (pull_request) Successful in 18s
CI / build-and-test (pull_request) Successful in 55s
2026-09-22 23:45:41 +02:00
TapTap
3ae7685655
Merge PR #309 : parity burn-down
CI / lint (push) Successful in 1m46s
CI / parity-fast (push) Skipped
CI / parity-full (push) Successful in 22s
CI / sanitizers (address) (push) Failing after 54s
CI / sanitizers (undefined) (push) Successful in 43s
CI / build-and-test (push) Successful in 1m22s
CI / fuzz-build (push) Successful in 49s
CI / coverage (push) Successful in 44s
CI / valgrind (push) Successful in 2m19s
2026-09-22 23:33:21 +02:00
TapTap
4f945a8e39
docs: reconcile RSYNC_COMPAT for parity-next review follow-ups
CI / lint (pull_request) Successful in 1m46s
CI / parity-full (pull_request) Skipped
CI / sanitizers (address) (pull_request) Skipped
CI / sanitizers (undefined) (pull_request) Skipped
CI / fuzz-build (pull_request) Skipped
CI / coverage (pull_request) Skipped
CI / valgrind (pull_request) Skipped
CI / parity-fast (pull_request) Successful in 17s
CI / build-and-test (pull_request) Successful in 54s
2026-09-22 23:27:54 +02:00
TapTap
15f38f5b76
Merge branch 'feat/parity-f4' into feat/parity-next
2026-09-22 23:20:21 +02:00
TapTap
787967d3ce
Merge branch 'feat/parity-f2' into feat/parity-next
2026-09-22 23:20:21 +02:00
TapTap
06e7aef5c9
Merge branch 'feat/parity-f1' into feat/parity-next
2026-09-22 23:20:21 +02:00
TapTap
ee265d78ba
fix(delete-before): replay pre-scan list in --threads path
2026-09-22 23:19:55 +02:00
TapTap
47b1b9b915
fix(xattr): fake-super device round-trip, --devices continue-on-error, harden stat parse
2026-09-22 23:05:40 +02:00
TapTap
bb6c788cf9
fix(daemon): rsync read-only module default; warn on unenforced security keys
2026-09-22 22:53:23 +02:00
TapTap
0b40c47d6a
Merge branch 'feat/parity-b4' into feat/parity-next
...
# Conflicts:
# RSYNC_COMPAT.md
2026-09-22 22:08:16 +02:00
TapTap
6f81005094
Merge branch 'feat/parity-b3' into feat/parity-next
...
# Conflicts:
# RSYNC_COMPAT.md
2026-09-22 22:07:45 +02:00
TapTap
193d358c64
Merge branch 'feat/parity-b2' into feat/parity-next
2026-09-22 22:06:25 +02:00
TapTap
8792e3265a
Merge branch 'feat/parity-b1' into feat/parity-next
2026-09-22 22:06:25 +02:00
TapTap
3ec0ffb644
fix(delete-before): reuse pre-scan file list in single-threaded data pass
2026-09-22 22:05:50 +02:00
TapTap
80e8d7f450
feat(xattr): rsync-interoperable --fake-super stat; fix --devices error parity
2026-09-22 22:03:41 +02:00
TapTap
86741725fd
feat(daemon): accept rsync rsyncd.conf key subset and --dparam mapping
2026-09-22 22:02:09 +02:00
TapTap
f96f1764af
feat(cli): accept --inc-recursive no-op and in-root absolute --temp-dir
2026-09-22 21:58:54 +02:00
TapTap
d780a4625e
Merge PR #308 : close valid residuals of issues #286-#297
CI / lint (push) Successful in 1m45s
CI / parity-fast (push) Skipped
CI / parity-full (push) Successful in 21s
CI / sanitizers (address) (push) Successful in 52s
CI / sanitizers (undefined) (push) Successful in 42s
CI / build-and-test (push) Successful in 1m16s
CI / fuzz-build (push) Successful in 47s
CI / coverage (push) Successful in 44s
CI / valgrind (push) Successful in 2m18s
2026-09-22 17:30:36 +02:00
TapTap
5d1303ffdf
Merge branch 'fix/issues-f4' into fix/issues-triage
CI / lint (pull_request) Successful in 1m45s
CI / parity-full (pull_request) Skipped
CI / sanitizers (address) (pull_request) Skipped
CI / sanitizers (undefined) (pull_request) Skipped
CI / fuzz-build (pull_request) Skipped
CI / coverage (pull_request) Skipped
CI / valgrind (pull_request) Skipped
CI / parity-fast (pull_request) Successful in 17s
CI / build-and-test (pull_request) Successful in 54s
2026-09-22 17:18:59 +02:00
TapTap
06b53c5b3d
Merge branch 'fix/issues-f3' into fix/issues-triage
2026-09-22 17:18:59 +02:00
TapTap
bf09e8893e
Merge branch 'fix/issues-f2' into fix/issues-triage
2026-09-22 17:18:59 +02:00
TapTap
034c27926f
Merge branch 'fix/issues-f1' into fix/issues-triage
2026-09-22 17:18:59 +02:00
TapTap
aa15099d22
fix(output): restore --info=flist header; dir metadata on plan path; root line for -d
2026-09-22 17:17:04 +02:00
TapTap
ff4db23831
fix(identity): free TO name on glob success path; harden test oracle
2026-09-22 17:08:03 +02:00
TapTap
79e45441c0
fix(receiver): defer --dirs directory mode to avoid EACCES on children
...
file_save_directory_to_disk() applied the exact source mode (fchmod)
inline for explicit --dirs/STATUS_MKDIR entries. A restrictive source
mode (e.g. 0555) then made the directory read-only before its children
were written, so a non-root receiver failed each child with EACCES. The
recursive -a path never hit this because it defers directory metadata.
Remove the inline fchmod and let the existing deferred
dir_metadata_list_apply() stamp the exact mode at end of transfer, as the
recursive path does. Keep the inline ownership and xattrs (a direct
file_save_to_disk_full() caller has no deferred pass) and document the
resulting intentional ordering. Capture errno before output_escape() in
the inline timestamp diagnostic so strerror() reports the real error, and
add the missing trailing newline to tests/test_xattr.c.
2026-09-22 17:06:54 +02:00
TapTap
6537227467
test(transport): de-race fallback/fd tests and gate for valgrind
2026-09-22 17:05:54 +02:00
TapTap
309c9aed98
refactor: const-correct dir/root locals in progress itemize
2026-09-22 16:46:23 +02:00