From 0b7cd03134fb7c51022f49170fe50bead28c32e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christoph=20R=C3=BC=C3=9Fler?= Date: Tue, 17 Sep 2024 15:48:45 +0200 Subject: [PATCH] Consume addition when before hunk --- gix-blame/tests/blame.rs | 44 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/gix-blame/tests/blame.rs b/gix-blame/tests/blame.rs index eaef12d6ee..089acdc9ea 100644 --- a/gix-blame/tests/blame.rs +++ b/gix-blame/tests/blame.rs @@ -491,6 +491,12 @@ fn process_change( // // <--> (hunk) // <----> (added) + + if added.end <= hunk.range_in_destination.start { + *offset_in_destination += added.end - added.start; + *offset_in_destination -= number_of_lines_deleted; + } + let line_range_in_next_destination = LineRange::with_offset(hunk.range_in_destination.clone(), *offset_in_destination); @@ -499,7 +505,13 @@ fn process_change( hunk.offset() + *offset_in_destination, )); - (None, Some(Change::Added(added, number_of_lines_deleted))) + let new_change = if added.end <= hunk.range_in_destination.start { + None + } else { + Some(Change::Added(added.clone(), number_of_lines_deleted)) + }; + + (None, new_change) } } } @@ -1209,6 +1221,36 @@ fn process_change_works_no_overlap() { assert_eq!(offset_in_destination, Offset::Deleted(3)); } +#[test] +fn process_change_works_no_overlap_2() { + let mut lines_blamed: Vec = vec![]; + let mut new_hunks_to_blame: Vec = vec![]; + let mut offset_in_destination: Offset = Offset::Added(0); + let suspect = ObjectId::null(gix_hash::Kind::Sha1); + + let (hunk, change) = process_change( + &mut lines_blamed, + &mut new_hunks_to_blame, + &mut offset_in_destination, + suspect, + // range_in_destination: 6..8 + Some(UnblamedHunk::new(9..11, Offset::Added(3))), + Some(Change::Added(2..5, 0)), + ); + + assert_eq!(hunk, None); + assert_eq!(change, None); + assert_eq!(lines_blamed, vec![]); + assert_eq!( + new_hunks_to_blame, + vec![UnblamedHunk { + range_in_blamed_file: 9..11, + range_in_destination: 3..5 + }] + ); + assert_eq!(offset_in_destination, Offset::Added(3)); +} + #[test] fn process_change_works_unchanged_hunk() { let mut lines_blamed: Vec = vec![];