diff options
| author | tv <tv@krebsco.de> | 2026-11-08 22:44:23 +0000 |
|---|---|---|
| committer | tv <tv@krebsco.de> | 2026-11-08 23:53:02 +0100 |
| commit | eae437ce2734b8d65bf40aa207c134a3c641138f (patch) | |
| tree | 44743e69511d0f56a987497bcbbc03e53cd4dc74 /src/document | |
| parent | 24527adf52ca2d8d3b927feb1b811e10fc55fc5c (diff) | |
sync: signatures go with changes only
A sync message took the signatures its peer wasn't sent yet whenever it
had a body, an Automerge message saying only what we have included. A
signature belongs with the changes it vouches for: they go along the
trees, and a peer that got them elsewhere got the signatures with them.
Signatures now go in a message that carries changes (pushed, offered
as a delta, or in an Automerge message carrying some: SyncSession::
carrying), and in no other.
Diffstat (limited to 'src/document')
| -rw-r--r-- | src/document/sync.rs | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/document/sync.rs b/src/document/sync.rs index 394b10a..440718c 100644 --- a/src/document/sync.rs +++ b/src/document/sync.rs @@ -983,6 +983,13 @@ impl SyncSession { self.state.their_heads.is_none() && we_ready && peer_ready == Some(false) } + /// Whether the message just generated (`generate`) carries changes. + pub(crate) fn carrying(&self) -> bool { + self.sending + .as_ref() + .is_some_and(|sending| !sending.sent.is_empty()) + } + /// Which session this is: a message generated from it reports its send's outcome /// with this (`send_succeeded`, `send_failed`). pub(crate) fn id(&self) -> u64 { |
