diff options
| author | Paul <dominiak.pawel@gmail.com> | 2024-03-02 15:06:31 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-03-02 09:06:31 -0500 |
| commit | 977f89ae0d8cd46bd8cab67a5fcc37b876abe31d (patch) | |
| tree | 1e7f4e2130f224af67a0103971190e78c690366e /src/handlers/diff_header_diff.rs | |
| parent | f7ae06a5f1e6943d4a78c8ede313ecd89c8563db (diff) | |
Fix headers of modified binary files, closes #1621 (#1629)
Diffstat (limited to 'src/handlers/diff_header_diff.rs')
| -rw-r--r-- | src/handlers/diff_header_diff.rs | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/handlers/diff_header_diff.rs b/src/handlers/diff_header_diff.rs index a79f6e1..f8a007e 100644 --- a/src/handlers/diff_header_diff.rs +++ b/src/handlers/diff_header_diff.rs @@ -1,4 +1,5 @@ use crate::delta::{DiffType, InMergeConflict, MergeParents, State, StateMachine}; +use crate::handlers::diff_header::{get_repeated_file_path_from_diff_line, FileEvent}; impl<'a> StateMachine<'a> { #[inline] @@ -25,6 +26,19 @@ impl<'a> StateMachine<'a> { self.handle_pending_line_with_diff_name()?; self.handled_diff_header_header_line_file_pair = None; self.diff_line = self.line.clone(); + + // Pre-fill header fields from the diff line. For added, removed or renamed files + // these are updated precisely on actual header minus and header plus lines. + // But for modified binary files which are not added, removed or renamed, there + // are no minus and plus lines. Without the code below, in such cases the file names + // would remain unchanged from the previous diff, or empty for the very first diff. + let name = get_repeated_file_path_from_diff_line(&self.line).unwrap_or_default(); + self.minus_file = name.clone(); + self.plus_file = name.clone(); + self.minus_file_event = FileEvent::Change; + self.plus_file_event = FileEvent::Change; + self.current_file_pair = Some((self.minus_file.clone(), self.plus_file.clone())); + if !self.should_skip_line() { self.emit_line_unchanged()?; } |
