@@ -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]
16491687fn 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