Release Notes: - Git Beta: Fixed a bug where discarding a hunk in the project diff view performed two concurrent saves of the buffer. - Git Beta: Fixed an issue where diff hunks appeared in the wrong state after failing to write to the git index.
Showing the changes to crates/buffer_diff/src/buffer_diff.rs (1 of 14 files). Show all
Unified · Split
| @@ -663,11 +663,13 @@ impl std::fmt::Debug for BufferDiff { · 662 unmodified lines | ||
| 663 | 663 | } |
| 664 | 664 | } |
| 665 | 665 | |
| 666 | +#[derive(Clone, Debug)] | |
| 666 | 667 | pub enum BufferDiffEvent { |
| 667 | 668 | DiffChanged { |
| 668 | 669 | changed_range: Option<Range<text::Anchor>>, |
| 669 | 670 | }, |
| 670 | 671 | LanguageChanged, |
| 672 | + HunksStagedOrUnstaged(Option<Rope>), | |
| 671 | 673 | } |
| 672 | 674 | |
| 673 | 675 | impl EventEmitter<BufferDiffEvent> for BufferDiff {} |
| @@ -762,6 +764,17 @@ impl BufferDiff { · 88 unmodified lines | ||
| 762 | 764 | self.secondary_diff.clone() |
| 763 | 765 | } |
| 764 | 766 | |
| 767 | + pub fn clear_pending_hunks(&mut self, cx: &mut Context<Self>) { | |
| 768 | + if let Some(secondary_diff) = &self.secondary_diff { | |
| 769 | + secondary_diff.update(cx, |diff, _| { | |
| 770 | + diff.inner.pending_hunks.clear(); | |
| 771 | + }); | |
| 772 | + cx.emit(BufferDiffEvent::DiffChanged { | |
| 773 | + changed_range: Some(Anchor::MIN..Anchor::MAX), | |
| 774 | + }); | |
| 775 | + } | |
| 776 | + } | |
| 777 | + | |
| 765 | 778 | pub fn stage_or_unstage_hunks( |
| 766 | 779 | &mut self, |
| 767 | 780 | stage: bool, |
| @@ -784,6 +797,9 @@ impl BufferDiff { · 16 unmodified lines | ||
| 784 | 797 | } |
| 785 | 798 | }); |
| 786 | 799 | } |
| 800 | + cx.emit(BufferDiffEvent::HunksStagedOrUnstaged( | |
| 801 | + new_index_text.clone(), | |
| 802 | + )); | |
| 787 | 803 | if let Some((first, last)) = hunks.first().zip(hunks.last()) { |
| 788 | 804 | let changed_range = first.buffer_range.start..last.buffer_range.end; |
| 789 | 805 | cx.emit(BufferDiffEvent::DiffChanged { |
| @@ -900,6 +916,14 @@ impl BufferDiff { · 110 unmodified lines | ||
| 900 | 916 | } |
| 901 | 917 | } |
| 902 | 918 | |
| 919 | + pub fn hunks<'a>( | |
| 920 | + &'a self, | |
| 921 | + buffer_snapshot: &'a text::BufferSnapshot, | |
| 922 | + cx: &'a App, | |
| 923 | + ) -> impl 'a + Iterator<Item = DiffHunk> { | |
| 924 | + self.hunks_intersecting_range(Anchor::MIN..Anchor::MAX, buffer_snapshot, cx) | |
| 925 | + } | |
| 926 | + | |
| 903 | 927 | pub fn hunks_intersecting_range<'a>( |
| 904 | 928 | &'a self, |
| 905 | 929 | range: Range<text::Anchor>, |