@@ -417,7 +417,7 @@ static void finish_early_output(struct rev_info *rev)
417
417
show_early_header (rev , "done" , n );
418
418
}
419
419
420
- static int cmd_log_walk (struct rev_info * rev )
420
+ static int cmd_log_walk_no_free (struct rev_info * rev )
421
421
{
422
422
struct commit * commit ;
423
423
int saved_nrl = 0 ;
@@ -444,7 +444,6 @@ static int cmd_log_walk(struct rev_info *rev)
444
444
* and HAS_CHANGES being accumulated in rev->diffopt, so be careful to
445
445
* retain that state information if replacing rev->diffopt in this loop
446
446
*/
447
- rev -> diffopt .no_free = 1 ;
448
447
while ((commit = get_revision (rev )) != NULL ) {
449
448
if (!log_tree_commit (rev , commit ) && rev -> max_count >= 0 )
450
449
/*
@@ -469,8 +468,6 @@ static int cmd_log_walk(struct rev_info *rev)
469
468
}
470
469
rev -> diffopt .degraded_cc_to_c = saved_dcctc ;
471
470
rev -> diffopt .needed_rename_limit = saved_nrl ;
472
- rev -> diffopt .no_free = 0 ;
473
- diff_free (& rev -> diffopt );
474
471
475
472
if (rev -> remerge_diff ) {
476
473
tmp_objdir_destroy (rev -> remerge_objdir );
@@ -484,6 +481,17 @@ static int cmd_log_walk(struct rev_info *rev)
484
481
return diff_result_code (& rev -> diffopt , 0 );
485
482
}
486
483
484
+ static int cmd_log_walk (struct rev_info * rev )
485
+ {
486
+ int retval ;
487
+
488
+ rev -> diffopt .no_free = 1 ;
489
+ retval = cmd_log_walk_no_free (rev );
490
+ rev -> diffopt .no_free = 0 ;
491
+ diff_free (& rev -> diffopt );
492
+ return retval ;
493
+ }
494
+
487
495
static int git_log_config (const char * var , const char * value , void * cb )
488
496
{
489
497
const char * slot_name ;
@@ -680,6 +688,7 @@ int cmd_show(int argc, const char **argv, const char *prefix)
680
688
681
689
count = rev .pending .nr ;
682
690
objects = rev .pending .objects ;
691
+ rev .diffopt .no_free = 1 ;
683
692
for (i = 0 ; i < count && !ret ; i ++ ) {
684
693
struct object * o = objects [i ].item ;
685
694
const char * name = objects [i ].name ;
@@ -725,12 +734,16 @@ int cmd_show(int argc, const char **argv, const char *prefix)
725
734
rev .pending .nr = rev .pending .alloc = 0 ;
726
735
rev .pending .objects = NULL ;
727
736
add_object_array (o , name , & rev .pending );
728
- ret = cmd_log_walk (& rev );
737
+ ret = cmd_log_walk_no_free (& rev );
729
738
break ;
730
739
default :
731
740
ret = error (_ ("unknown type: %d" ), o -> type );
732
741
}
733
742
}
743
+
744
+ rev .diffopt .no_free = 0 ;
745
+ diff_free (& rev .diffopt );
746
+
734
747
free (objects );
735
748
return ret ;
736
749
}
0 commit comments