Skip to content

Commit 835c49f

Browse files
whydoubtgitster
authored andcommitted
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 <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 78b06e6 commit 835c49f

File tree

1 file changed

+23
-26
lines changed

1 file changed

+23
-26
lines changed

builtin/blame.c

Lines changed: 23 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2431,14 +2431,8 @@ static struct commit *find_single_final(struct rev_info *revs,
24312431
return found;
24322432
}
24332433

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)
24422436
{
24432437
/*
24442438
* DWIM "git blame --reverse ONE -- PATH" as
@@ -2449,11 +2443,11 @@ static const char *dwim_reverse_initial(struct blame_scoreboard *sb)
24492443
struct commit *head_commit;
24502444
unsigned char head_sha1[20];
24512445

2452-
if (sb->revs->pending.nr != 1)
2446+
if (revs->pending.nr != 1)
24532447
return NULL;
24542448

24552449
/* Is that sole rev a committish? */
2456-
obj = sb->revs->pending.objects[0].item;
2450+
obj = revs->pending.objects[0].item;
24572451
obj = deref_tag(obj, NULL, 0);
24582452
if (obj->type != OBJ_COMMIT)
24592453
return NULL;
@@ -2467,17 +2461,19 @@ static const char *dwim_reverse_initial(struct blame_scoreboard *sb)
24672461

24682462
/* Turn "ONE" into "ONE..HEAD" then */
24692463
obj->flags |= UNINTERESTING;
2470-
add_pending_object(sb->revs, &head_commit->object, "HEAD");
2464+
add_pending_object(revs, &head_commit->object, "HEAD");
24712465

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;
24742469
}
24752470

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)
24772473
{
24782474
int i;
24792475
const char *final_commit_name = NULL;
2480-
struct rev_info *revs = sb->revs;
2476+
struct commit *found = NULL;
24812477

24822478
/*
24832479
* 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)
24902486
obj = deref_tag(obj, NULL, 0);
24912487
if (obj->type != OBJ_COMMIT)
24922488
die("Non commit %s?", revs->pending.objects[i].name);
2493-
if (sb->final)
2489+
if (found)
24942490
die("More than one commit to dig up from, %s and %s?",
24952491
revs->pending.objects[i].name,
24962492
final_commit_name);
2497-
sb->final = (struct commit *) obj;
2493+
found = (struct commit *) obj;
24982494
final_commit_name = revs->pending.objects[i].name;
24992495
}
25002496

25012497
if (!final_commit_name)
2502-
final_commit_name = dwim_reverse_initial(sb);
2498+
found = dwim_reverse_initial(revs, &final_commit_name);
25032499
if (!final_commit_name)
25042500
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;
25062505
}
25072506

25082507
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)
25462545
struct blame_origin *o;
25472546
struct blame_entry *ent = NULL;
25482547
long dashdash_pos, lno;
2549-
char *final_commit_name = NULL;
2548+
const char *final_commit_name = NULL;
25502549
enum object_type type;
25512550
struct commit *final_commit = NULL;
25522551
struct progress_info pi = { NULL, 0 };
@@ -2755,14 +2754,15 @@ int cmd_blame(int argc, const char **argv, const char *prefix)
27552754
sb.revs = &revs;
27562755
sb.contents_from = contents_from;
27572756
sb.reverse = reverse;
2757+
27582758
if (!reverse) {
2759-
final_commit_name = prepare_final(&sb);
2759+
sb.final = find_single_final(&revs, &final_commit_name);
27602760
sb.commits.compare = compare_commits_by_commit_date;
27612761
}
27622762
else if (contents_from)
27632763
die(_("--contents and --reverse do not blend well."));
27642764
else {
2765-
final_commit_name = prepare_initial(&sb);
2765+
sb.final = find_single_initial(&revs, &final_commit_name);
27662766
sb.commits.compare = compare_commits_by_reverse_commit_date;
27672767
if (revs.first_parent_only)
27682768
revs.children.name = NULL;
@@ -2917,10 +2917,7 @@ int cmd_blame(int argc, const char **argv, const char *prefix)
29172917

29182918
if (!incremental)
29192919
setup_pager();
2920-
2921-
free(final_commit_name);
2922-
2923-
if (incremental)
2920+
else
29242921
return 0;
29252922

29262923
blame_sort_final(&sb);

0 commit comments

Comments
 (0)