Merge pull request #1529 from zed-industries/undo-divergence

Antonio Scandurra created

Fix divergence bug in undo/redo

Change summary

crates/language/src/proto.rs |  2 --
crates/rpc/proto/zed.proto   |  3 +--
crates/rpc/src/rpc.rs        |  2 +-
crates/text/src/text.rs      | 12 ++----------
4 files changed, 4 insertions(+), 15 deletions(-)

Detailed changes

crates/language/src/proto.rs 🔗

@@ -39,7 +39,6 @@ pub fn serialize_operation(operation: &Operation) -> proto::Operation {
                 local_timestamp: undo.id.value,
                 lamport_timestamp: lamport_timestamp.value,
                 version: serialize_version(&undo.version),
-                transaction_version: serialize_version(&undo.transaction_version),
                 counts: undo
                     .counts
                     .iter()
@@ -199,7 +198,6 @@ pub fn deserialize_operation(message: proto::Operation) -> Result<Operation> {
                             )
                         })
                         .collect(),
-                    transaction_version: deserialize_version(undo.transaction_version),
                 },
             }),
             proto::operation::Variant::UpdateSelections(message) => {

crates/rpc/proto/zed.proto 🔗

@@ -901,8 +901,7 @@ message Operation {
         uint32 local_timestamp = 2;
         uint32 lamport_timestamp = 3;
         repeated VectorClockEntry version = 4;
-        repeated VectorClockEntry transaction_version = 6;
-        repeated UndoCount counts = 7;
+        repeated UndoCount counts = 5;
     }
 
     message UpdateSelections {

crates/rpc/src/rpc.rs 🔗

@@ -6,4 +6,4 @@ pub use conn::Connection;
 pub use peer::*;
 mod macros;
 
-pub const PROTOCOL_VERSION: u32 = 29;
+pub const PROTOCOL_VERSION: u32 = 30;

crates/text/src/text.rs 🔗

@@ -512,7 +512,6 @@ pub struct EditOperation {
 pub struct UndoOperation {
     pub id: clock::Local,
     pub counts: HashMap<clock::Local, u32>,
-    pub transaction_version: clock::Global,
     pub version: clock::Global,
 }
 
@@ -1109,14 +1108,8 @@ impl Buffer {
                 let mut fragment = fragment.clone();
                 let fragment_was_visible = fragment.visible;
 
-                if fragment.was_visible(&undo.transaction_version, &self.undo_map)
-                    || undo
-                        .counts
-                        .contains_key(&fragment.insertion_timestamp.local())
-                {
-                    fragment.visible = fragment.is_visible(&self.undo_map);
-                    fragment.max_undos.observe(undo.id);
-                }
+                fragment.visible = fragment.is_visible(&self.undo_map);
+                fragment.max_undos.observe(undo.id);
 
                 let old_start = old_fragments.start().1;
                 let new_start = new_fragments.summary().text.visible;
@@ -1297,7 +1290,6 @@ impl Buffer {
             id: self.local_clock.tick(),
             version: self.version(),
             counts,
-            transaction_version: transaction.start,
         };
         self.apply_undo(&undo)?;
         let operation = Operation::Undo {