Include saved mtime and fingerprint when serializing buffers

Antonio Scandurra created

This still doesn't include:

- An assertion in the randomized test to ensure buffers are not spuriously
marked as modified
- Sending an update when synchronizing buffers after a reconnection

Change summary

crates/language/src/buffer.rs | 7 +++++++
crates/rpc/proto/zed.proto    | 2 ++
2 files changed, 9 insertions(+)

Detailed changes

crates/language/src/buffer.rs 🔗

@@ -385,6 +385,11 @@ impl Buffer {
             rpc::proto::LineEnding::from_i32(message.line_ending)
                 .ok_or_else(|| anyhow!("missing line_ending"))?,
         ));
+        this.saved_version_fingerprint = message.saved_version_fingerprint;
+        this.saved_mtime = message
+            .saved_mtime
+            .ok_or_else(|| anyhow!("invalid saved_mtime"))?
+            .into();
         Ok(this)
     }
 
@@ -395,6 +400,8 @@ impl Buffer {
             base_text: self.base_text().to_string(),
             diff_base: self.diff_base.as_ref().map(|h| h.to_string()),
             line_ending: proto::serialize_line_ending(self.line_ending()) as i32,
+            saved_version_fingerprint: self.saved_version_fingerprint.clone(),
+            saved_mtime: Some(self.saved_mtime.into()),
         }
     }
 

crates/rpc/proto/zed.proto 🔗

@@ -975,6 +975,8 @@ message BufferState {
     string base_text = 3;
     optional string diff_base = 4;
     LineEnding line_ending = 5;
+    string saved_version_fingerprint = 6;
+    Timestamp saved_mtime = 7;
 }
 
 message BufferChunk {