@@ -2431,14 +2431,8 @@ static struct commit *find_single_final(struct rev_info *revs,
2431
2431
return found ;
2432
2432
}
2433
2433
2434
- static char * prepare_final (struct blame_scoreboard * sb )
2435
- {
2436
- const char * name ;
2437
- sb -> final = find_single_final (sb -> revs , & name );
2438
- return xstrdup_or_null (name );
2439
- }
2440
-
2441
- static const char * dwim_reverse_initial (struct blame_scoreboard * sb )
2434
+ static struct commit * dwim_reverse_initial (struct rev_info * revs ,
2435
+ const char * * name_p )
2442
2436
{
2443
2437
/*
2444
2438
* DWIM "git blame --reverse ONE -- PATH" as
@@ -2449,11 +2443,11 @@ static const char *dwim_reverse_initial(struct blame_scoreboard *sb)
2449
2443
struct commit * head_commit ;
2450
2444
unsigned char head_sha1 [20 ];
2451
2445
2452
- if (sb -> revs -> pending .nr != 1 )
2446
+ if (revs -> pending .nr != 1 )
2453
2447
return NULL ;
2454
2448
2455
2449
/* Is that sole rev a committish? */
2456
- obj = sb -> revs -> pending .objects [0 ].item ;
2450
+ obj = revs -> pending .objects [0 ].item ;
2457
2451
obj = deref_tag (obj , NULL , 0 );
2458
2452
if (obj -> type != OBJ_COMMIT )
2459
2453
return NULL ;
@@ -2467,17 +2461,19 @@ static const char *dwim_reverse_initial(struct blame_scoreboard *sb)
2467
2461
2468
2462
/* Turn "ONE" into "ONE..HEAD" then */
2469
2463
obj -> flags |= UNINTERESTING ;
2470
- add_pending_object (sb -> revs , & head_commit -> object , "HEAD" );
2464
+ add_pending_object (revs , & head_commit -> object , "HEAD" );
2471
2465
2472
- sb -> final = (struct commit * )obj ;
2473
- return sb -> revs -> pending .objects [0 ].name ;
2466
+ if (name_p )
2467
+ * name_p = revs -> pending .objects [0 ].name ;
2468
+ return (struct commit * )obj ;
2474
2469
}
2475
2470
2476
- static char * prepare_initial (struct blame_scoreboard * sb )
2471
+ static struct commit * find_single_initial (struct rev_info * revs ,
2472
+ const char * * name_p )
2477
2473
{
2478
2474
int i ;
2479
2475
const char * final_commit_name = NULL ;
2480
- struct rev_info * revs = sb -> revs ;
2476
+ struct commit * found = NULL ;
2481
2477
2482
2478
/*
2483
2479
* There must be one and only one negative commit, and it must be
@@ -2490,19 +2486,22 @@ static char *prepare_initial(struct blame_scoreboard *sb)
2490
2486
obj = deref_tag (obj , NULL , 0 );
2491
2487
if (obj -> type != OBJ_COMMIT )
2492
2488
die ("Non commit %s?" , revs -> pending .objects [i ].name );
2493
- if (sb -> final )
2489
+ if (found )
2494
2490
die ("More than one commit to dig up from, %s and %s?" ,
2495
2491
revs -> pending .objects [i ].name ,
2496
2492
final_commit_name );
2497
- sb -> final = (struct commit * ) obj ;
2493
+ found = (struct commit * ) obj ;
2498
2494
final_commit_name = revs -> pending .objects [i ].name ;
2499
2495
}
2500
2496
2501
2497
if (!final_commit_name )
2502
- final_commit_name = dwim_reverse_initial (sb );
2498
+ found = dwim_reverse_initial (revs , & final_commit_name );
2503
2499
if (!final_commit_name )
2504
2500
die ("No commit to dig up from?" );
2505
- return xstrdup (final_commit_name );
2501
+
2502
+ if (name_p )
2503
+ * name_p = final_commit_name ;
2504
+ return found ;
2506
2505
}
2507
2506
2508
2507
static int blame_copy_callback (const struct option * option , const char * arg , int unset )
@@ -2546,7 +2545,7 @@ int cmd_blame(int argc, const char **argv, const char *prefix)
2546
2545
struct blame_origin * o ;
2547
2546
struct blame_entry * ent = NULL ;
2548
2547
long dashdash_pos , lno ;
2549
- char * final_commit_name = NULL ;
2548
+ const char * final_commit_name = NULL ;
2550
2549
enum object_type type ;
2551
2550
struct commit * final_commit = NULL ;
2552
2551
struct progress_info pi = { NULL , 0 };
@@ -2755,14 +2754,15 @@ int cmd_blame(int argc, const char **argv, const char *prefix)
2755
2754
sb .revs = & revs ;
2756
2755
sb .contents_from = contents_from ;
2757
2756
sb .reverse = reverse ;
2757
+
2758
2758
if (!reverse ) {
2759
- final_commit_name = prepare_final ( & sb );
2759
+ sb . final = find_single_final ( & revs , & final_commit_name );
2760
2760
sb .commits .compare = compare_commits_by_commit_date ;
2761
2761
}
2762
2762
else if (contents_from )
2763
2763
die (_ ("--contents and --reverse do not blend well." ));
2764
2764
else {
2765
- final_commit_name = prepare_initial ( & sb );
2765
+ sb . final = find_single_initial ( & revs , & final_commit_name );
2766
2766
sb .commits .compare = compare_commits_by_reverse_commit_date ;
2767
2767
if (revs .first_parent_only )
2768
2768
revs .children .name = NULL ;
@@ -2917,10 +2917,7 @@ int cmd_blame(int argc, const char **argv, const char *prefix)
2917
2917
2918
2918
if (!incremental )
2919
2919
setup_pager ();
2920
-
2921
- free (final_commit_name );
2922
-
2923
- if (incremental )
2920
+ else
2924
2921
return 0 ;
2925
2922
2926
2923
blame_sort_final (& sb );
0 commit comments