Skip to content

Commit 9d5b033

Browse files
committed
Cut or ignore ranges that exceed max_lines
1 parent 5f6d416 commit 9d5b033

File tree

2 files changed

+38
-1
lines changed

2 files changed

+38
-1
lines changed

gix-blame/src/file/tests.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1080,6 +1080,30 @@ mod blame_ranges {
10801080
assert_eq!(ranges.to_zero_based_exclusive_ranges(100), vec![0..10]);
10811081
}
10821082

1083+
#[test]
1084+
fn to_zero_based_exclusive_ignores_range_past_max_lines() {
1085+
let mut ranges = BlameRanges::from_one_based_inclusive_range(1..=5).unwrap();
1086+
ranges.add_one_based_inclusive_range(16..=20).unwrap();
1087+
1088+
assert_eq!(ranges.to_zero_based_exclusive_ranges(7), vec![0..5]);
1089+
}
1090+
1091+
#[test]
1092+
fn to_zero_based_exclusive_range_doesnt_exceed_max_lines() {
1093+
let mut ranges = BlameRanges::from_one_based_inclusive_range(1..=5).unwrap();
1094+
ranges.add_one_based_inclusive_range(6..=10).unwrap();
1095+
1096+
assert_eq!(ranges.to_zero_based_exclusive_ranges(7), vec![0..7]);
1097+
}
1098+
1099+
#[test]
1100+
fn to_zero_based_exclusive_merged_ranges_dont_exceed_max_lines() {
1101+
let mut ranges = BlameRanges::from_one_based_inclusive_range(1..=4).unwrap();
1102+
ranges.add_one_based_inclusive_range(6..=10).unwrap();
1103+
1104+
assert_eq!(ranges.to_zero_based_exclusive_ranges(7), vec![0..4, 5..7]);
1105+
}
1106+
10831107
#[test]
10841108
fn default_is_full_file() {
10851109
let ranges = BlameRanges::default();

gix-blame/src/types.rs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,20 @@ impl BlameRanges {
132132
let full_range = 0..max_lines;
133133
vec![full_range]
134134
}
135-
Self::PartialFile(ranges) => ranges.clone(),
135+
Self::PartialFile(ranges) => ranges
136+
.iter()
137+
.filter_map(|range| {
138+
if range.end < max_lines {
139+
return Some(range.clone());
140+
}
141+
142+
if range.start < max_lines {
143+
Some(range.start..max_lines)
144+
} else {
145+
None
146+
}
147+
})
148+
.collect(),
136149
}
137150
}
138151
}

0 commit comments

Comments
 (0)