From c7226385f3765b2a72b7b4d95129fb20fec58d5c Mon Sep 17 00:00:00 2001 From: tv Date: Thu, 5 Nov 2026 04:36:58 +0100 Subject: push changes experiment --- src/transport/mod.rs | 9 +++++++++ src/transport/traffic.rs | 4 +++- src/transport/wire.rs | 2 +- 3 files changed, 13 insertions(+), 2 deletions(-) (limited to 'src/transport') diff --git a/src/transport/mod.rs b/src/transport/mod.rs index 474e386..7e5d41b 100644 --- a/src/transport/mod.rs +++ b/src/transport/mod.rs @@ -743,6 +743,15 @@ pub(crate) enum SyncBody { Message(#[serde(with = "crate::transport::wire::codec::sync_message")] SyncPayload), /// An Automerge sync message, deflated (`compress`): a large one, which shrank. Deflated(#[serde(with = "crate::transport::wire::codec::sync_message")] SyncPayload), + /// Changes passed on along a writer's tree as they are, with the sender's heads, + /// instead of an Automerge sync message (`AppState::push_changes`): where the sender + /// takes the message as delivered, it has everything the receiver has, and needs + /// none of the rest of one (`SyncSession::push`). + Changes { + #[serde(with = "crate::transport::wire::codec::change_hashes")] + heads: Vec, + changes: Vec, + }, /// Instead of a message too large to send in one piece: fetch these changes as a /// blob (`BlobId::Delta`), then sync on. Delta(DeltaSpec), diff --git a/src/transport/traffic.rs b/src/transport/traffic.rs index df95bce..11aa70d 100644 --- a/src/transport/traffic.rs +++ b/src/transport/traffic.rs @@ -198,7 +198,9 @@ fn related(peer: &str, message: &ParsedMessage) -> Option { SyncBody::Delta(spec) => { format!("blob {}", crate::transport::BlobId::Delta(spec.id())) } - SyncBody::Message(_) | SyncBody::Deflated(_) => return None, + SyncBody::Message(_) | SyncBody::Deflated(_) | SyncBody::Changes { .. } => { + return None; + } }, _ => return None, }) diff --git a/src/transport/wire.rs b/src/transport/wire.rs index 2794e69..70ac3ce 100644 --- a/src/transport/wire.rs +++ b/src/transport/wire.rs @@ -14,7 +14,7 @@ use super::{EncodedMessage, MessageKind, ParsedMessage}; /// The wire format's version, the first byte of every payload. Bump it with every change /// to a message type or a codec (`golden_bytes` fails then). -pub(crate) const VERSION: u8 = 32; +pub(crate) const VERSION: u8 = 33; /// What the second byte of a payload says. fn tag(kind: MessageKind) -> u8 { -- cgit v1.3.1