Merge pull request #1696 from zed-industries/reset-diff-on-set-none-diff-base

Julia created

Reset buffer git diff when setting diff base to None

Change summary

crates/git/src/diff.rs        | 8 ++++++++
crates/language/src/buffer.rs | 5 +++++
2 files changed, 13 insertions(+)

Detailed changes

crates/git/src/diff.rs 🔗

@@ -104,6 +104,11 @@ impl BufferDiff {
         })
     }
 
+    pub fn clear(&mut self, buffer: &text::BufferSnapshot) {
+        self.last_buffer_version = Some(buffer.version().clone());
+        self.tree = SumTree::new();
+    }
+
     pub fn needs_update(&self, buffer: &text::BufferSnapshot) -> bool {
         match &self.last_buffer_version {
             Some(last) => buffer.version().changed_since(last),
@@ -296,6 +301,9 @@ mod tests {
             &diff_base,
             &[(0..1, "", "point five\n"), (2..3, "two\n", "HELLO\n")],
         );
+
+        diff.clear(&buffer);
+        assert_hunks(diff.hunks(&buffer), &buffer, &diff_base, &[]);
     }
 
     #[test]

crates/language/src/buffer.rs 🔗

@@ -707,6 +707,11 @@ impl Buffer {
                 }
             })
             .detach()
+        } else {
+            let snapshot = self.snapshot();
+            self.git_diff_status.diff.clear(&snapshot);
+            self.git_diff_update_count += 1;
+            cx.notify();
         }
     }