Skip to content

Commit 20a90a2

Browse files
committed
Add assertion that lines always match
1 parent ac2ea10 commit 20a90a2

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

gix-blame/src/file/function.rs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,40 @@ where
241241
continue;
242242
};
243243

244+
// This block asserts that, for every `UnblamedHunk`, all lines in the *Blamed File* are
245+
// identical to the corresponding lines in the *Source File*.
246+
#[cfg(debug_assertions)]
247+
{
248+
let source_blob = odb.find_blob(&entry_id, &mut buf)?.data.to_vec();
249+
let mut source_interner = gix_diff::blob::intern::Interner::new(source_blob.len() / 100);
250+
let source_lines_as_tokens: Vec<_> = tokens_for_diffing(&source_blob)
251+
.tokenize()
252+
.map(|token| source_interner.intern(token))
253+
.collect();
254+
255+
let mut blamed_interner = gix_diff::blob::intern::Interner::new(blamed_file_blob.len() / 100);
256+
let blamed_lines_as_tokens: Vec<_> = tokens_for_diffing(&blamed_file_blob)
257+
.tokenize()
258+
.map(|token| blamed_interner.intern(token))
259+
.collect();
260+
261+
for hunk in hunks_to_blame.iter() {
262+
if let Some(range_in_suspect) = hunk.suspects.get(&suspect) {
263+
let range_in_blamed_file = hunk.range_in_blamed_file.clone();
264+
265+
for (blamed_line_number, source_line_number) in range_in_blamed_file.zip(range_in_suspect.clone()) {
266+
let source_token = source_lines_as_tokens[source_line_number as usize];
267+
let blame_token = blamed_lines_as_tokens[blamed_line_number as usize];
268+
269+
let source_line = BString::new(source_interner[source_token].into());
270+
let blamed_line = BString::new(blamed_interner[blame_token].into());
271+
272+
assert_eq!(source_line, blamed_line);
273+
}
274+
}
275+
}
276+
}
277+
244278
for (pid, (parent_id, parent_commit_time)) in parent_ids.iter().enumerate() {
245279
if let Some(parent_entry_id) =
246280
find_path_entry_in_commit(&odb, parent_id, file_path, &mut buf, &mut buf2, &mut stats)?

0 commit comments

Comments
 (0)