@@ -241,6 +241,40 @@ where
241
241
continue ;
242
242
} ;
243
243
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
+
244
278
for ( pid, ( parent_id, parent_commit_time) ) in parent_ids. iter ( ) . enumerate ( ) {
245
279
if let Some ( parent_entry_id) =
246
280
find_path_entry_in_commit ( & odb, parent_id, file_path, & mut buf, & mut buf2, & mut stats) ?
0 commit comments