@@ -482,17 +482,33 @@ impl<T, E> ResultSwap<T, E> for Result<T, E> {
482482
483483#[ cfg( feature = "diff" ) ]
484484fn gen_delta ( orig : & Path , new : & Path , patch : & Path ) -> Result < ( ) , std:: io:: Error > {
485+ use std:: io:: Read ;
486+
485487 let orig = OpenOptions :: new ( ) . read ( true ) . open ( orig) . unwrap ( ) ;
486- let mut orig = zstd:: Decoder :: new ( orig) ?;
488+ let mut origb = Vec :: new ( ) ;
489+ zstd:: Decoder :: new ( orig) ?. read_to_end ( & mut origb) ?;
490+ let mut origb = Cursor :: new ( origb) ;
491+
487492 let new = OpenOptions :: new ( ) . read ( true ) . open ( new) . unwrap ( ) ;
488- let mut new = zstd:: Decoder :: new ( new) ?;
493+ let mut newb = Vec :: new ( ) ;
494+ zstd:: Decoder :: new ( new) ?. read_to_end ( & mut newb) ?;
495+ let mut newb = Cursor :: new ( newb) ;
489496
490497 let patch = OpenOptions :: new ( ) . write ( true ) . create ( true ) . open ( patch) . unwrap ( ) ;
491498 let mut patch = zstd:: Encoder :: new ( patch, 22 ) ?;
492499
493- ddelta:: generate_chunked ( & mut orig, & mut new, & mut patch, None , |p| debug ! ( "{p:?}" ) ) . unwrap ( ) ;
500+ let before = memory_stats:: memory_stats ( ) . unwrap ( ) . physical_mem ;
501+ let mut max = before;
502+ ddelta:: generate_chunked ( & mut origb, & mut newb, & mut patch, None , |p| {
503+ debug ! ( "{p:?}" ) ;
504+ max = max. max ( memory_stats:: memory_stats ( ) . unwrap ( ) . physical_mem )
505+ } )
506+ . unwrap ( ) ;
494507 patch. do_finish ( ) ?;
495508
509+ debug ! ( "initial memory usage: {before}" ) ;
510+ debug ! ( "maximum memory usage: {max}" ) ;
511+ debug ! ( "origb: {}, newb: {}" , origb. into_inner( ) . len( ) , newb. into_inner( ) . len( ) ) ;
496512 Ok ( ( ) )
497513}
498514
0 commit comments