blame: rework methods that determine 'final' commit
Either prepare_initial or prepare_final is used to determine which commit is marked as 'final'. Call the underlying methods directly to make this more clear. Signed-off-by: Jeff Smith <whydoubt@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Jeff Smith committed
May 24, 2017 at 00:15 UTC
835c49f7d16c5f0307e71da19618fcfe500c2430
1 file changed
+23
-26
builtin/blame.c
+23
-26
@@ -2431,14 +2431,8 @@ static struct commit *find_single_final(struct rev_info *revs,
2431
return found;
2432
}
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)
2436
{
2437
/*
2438
* DWIM "git blame --reverse ONE -- PATH" as
@@ -2449,11 +2443,11 @@ static const char *dwim_reverse_initial(struct blame_scoreboard *sb)
2443
struct commit *head_commit;
2444
unsigned char head_sha1[20];
2445
2452
- if (sb->revs->pending.nr != 1)
2446
+ if (revs->pending.nr != 1)
2447
return NULL;
2448
2449
/* Is that sole rev a committish? */
2456
- obj = sb->revs->pending.objects[0].item;
2450
+ obj = revs->pending.objects[0].item;
2451
obj = deref_tag(obj, NULL, 0);
2452
if (obj->type != OBJ_COMMIT)
2453
return NULL;
@@ -2467,17 +2461,19 @@ static const char *dwim_reverse_initial(struct blame_scoreboard *sb)
2461
2462
/* Turn "ONE" into "ONE..HEAD" then */
2463
obj->flags |= UNINTERESTING;
2470
- add_pending_object(sb->revs, &head_commit->object, "HEAD");
2464
+ add_pending_object(revs, &head_commit->object, "HEAD");
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;
2469
}
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)
2473
{
2474
int i;
2475
const char *final_commit_name = NULL;
2480
- struct rev_info *revs = sb->revs;
2476
+ struct commit *found = NULL;
2477
2478
/*
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)
2486
obj = deref_tag(obj, NULL, 0);
2487
if (obj->type != OBJ_COMMIT)
2488
die("Non commit %s?", revs->pending.objects[i].name);
2493
- if (sb->final)
2489
+ if (found)
2490
die("More than one commit to dig up from, %s and %s?",
2491
revs->pending.objects[i].name,
2492
final_commit_name);
2497
- sb->final = (struct commit *) obj;
2493
+ found = (struct commit *) obj;
2494
final_commit_name = revs->pending.objects[i].name;
2495
}
2496
2497
if (!final_commit_name)
2502
- final_commit_name = dwim_reverse_initial(sb);
2498
+ found = dwim_reverse_initial(revs, &final_commit_name);
2499
if (!final_commit_name)
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;
2505
}
2506
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)
2545
struct blame_origin *o;
2546
struct blame_entry *ent = NULL;
2547
long dashdash_pos, lno;
2549
- char *final_commit_name = NULL;
2548
+ const char *final_commit_name = NULL;
2549
enum object_type type;
2550
struct commit *final_commit = NULL;
2551
struct progress_info pi = { NULL, 0 };
@@ -2755,14 +2754,15 @@ parse_done:
2754
sb.revs = &revs;
2755
sb.contents_from = contents_from;
2756
sb.reverse = reverse;
2757
+
2758
if (!reverse) {
2759
- final_commit_name = prepare_final(&sb);
2759
+ sb.final = find_single_final(&revs, &final_commit_name);
2760
sb.commits.compare = compare_commits_by_commit_date;
2761
}
2762
else if (contents_from)
2763
die(_("--contents and --reverse do not blend well."));
2764
else {
2765
- final_commit_name = prepare_initial(&sb);
2765
+ sb.final = find_single_initial(&revs, &final_commit_name);
2766
sb.commits.compare = compare_commits_by_reverse_commit_date;
2767
if (revs.first_parent_only)
2768
revs.children.name = NULL;
@@ -2917,10 +2917,7 @@ parse_done:
2917
2918
if (!incremental)
2919
setup_pager();
2920
-
2921
- free(final_commit_name);
2922
-
2923
- if (incremental)
2920
+ else
2921
return 0;
2922
2923
blame_sort_final(&sb);