Skip to content

Commit b7dd436

Browse files
committed
Handle unchanged lines extending past unblamed hunk
1 parent 7a66742 commit b7dd436

File tree

1 file changed

+40
-2
lines changed

1 file changed

+40
-2
lines changed

gix-blame/tests/blame.rs

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,15 @@ fn process_change(
403403
hunk.offset() + *offset_in_destination,
404404
));
405405

406-
(None, None)
406+
let new_change = if unchanged.end > hunk.range_in_destination.end {
407+
let line_range = hunk.range_in_destination.end..unchanged.end;
408+
409+
Some(Change::Unchanged(line_range))
410+
} else {
411+
todo!();
412+
};
413+
414+
(None, new_change)
407415
}
408416
(false, false) => {
409417
if unchanged.end <= hunk.range_in_destination.start {
@@ -1645,6 +1653,36 @@ fn process_change_works_enclosing_addition() {
16451653
assert_eq!(offset_in_destination, Offset::Added(3));
16461654
}
16471655

1656+
#[test]
1657+
fn process_change_works_enclosing_unchanged_lines() {
1658+
let mut lines_blamed: Vec<BlameEntry> = vec![];
1659+
let mut new_hunks_to_blame: Vec<UnblamedHunk> = vec![];
1660+
let mut offset_in_destination: Offset = Offset::Added(3);
1661+
let suspect = ObjectId::null(gix_hash::Kind::Sha1);
1662+
1663+
let (hunk, change) = process_change(
1664+
&mut lines_blamed,
1665+
&mut new_hunks_to_blame,
1666+
&mut offset_in_destination,
1667+
suspect,
1668+
// range_in_destination: 109..113
1669+
Some(UnblamedHunk::new(110..114, Offset::Added(1))),
1670+
Some(Change::Unchanged(109..172)),
1671+
);
1672+
1673+
assert_eq!(hunk, None);
1674+
assert_eq!(change, Some(Change::Unchanged(113..172)));
1675+
assert_eq!(lines_blamed, vec![]);
1676+
assert_eq!(
1677+
new_hunks_to_blame,
1678+
vec![UnblamedHunk {
1679+
range_in_blamed_file: 110..114,
1680+
range_in_destination: 106..110
1681+
}]
1682+
);
1683+
assert_eq!(offset_in_destination, Offset::Added(3));
1684+
}
1685+
16481686
#[test]
16491687
fn process_change_works_unchanged_hunk() {
16501688
let mut lines_blamed: Vec<BlameEntry> = vec![];
@@ -1697,7 +1735,7 @@ fn process_change_works_unchanged_hunk_2() {
16971735
);
16981736

16991737
assert_eq!(hunk, None);
1700-
assert_eq!(change, None);
1738+
assert_eq!(change, Some(Change::Unchanged(5..7)));
17011739
assert_eq!(lines_blamed, vec![]);
17021740
assert_eq!(
17031741
new_hunks_to_blame,

0 commit comments

Comments
 (0)