builtin-branch: use strbuf in fill_tracking_info()
This is just about using the API, though in case of ~ 10^100 commits, this would fix the problem of writing to unallocated memory as well. ;-) Signed-off-by: Miklos Vajna <vmiklos@frugalware.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
3c59c50d76
commit
d3f9f9a92e
@ -279,7 +279,7 @@ static int ref_cmp(const void *r1, const void *r2)
|
|||||||
return strcmp(c1->name, c2->name);
|
return strcmp(c1->name, c2->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void fill_tracking_info(char *stat, const char *branch_name)
|
static void fill_tracking_info(struct strbuf *stat, const char *branch_name)
|
||||||
{
|
{
|
||||||
int ours, theirs;
|
int ours, theirs;
|
||||||
struct branch *branch = branch_get(branch_name);
|
struct branch *branch = branch_get(branch_name);
|
||||||
@ -287,11 +287,11 @@ static void fill_tracking_info(char *stat, const char *branch_name)
|
|||||||
if (!stat_tracking_info(branch, &ours, &theirs) || (!ours && !theirs))
|
if (!stat_tracking_info(branch, &ours, &theirs) || (!ours && !theirs))
|
||||||
return;
|
return;
|
||||||
if (!ours)
|
if (!ours)
|
||||||
sprintf(stat, "[behind %d] ", theirs);
|
strbuf_addf(stat, "[behind %d] ", theirs);
|
||||||
else if (!theirs)
|
else if (!theirs)
|
||||||
sprintf(stat, "[ahead %d] ", ours);
|
strbuf_addf(stat, "[ahead %d] ", ours);
|
||||||
else
|
else
|
||||||
sprintf(stat, "[ahead %d, behind %d] ", ours, theirs);
|
strbuf_addf(stat, "[ahead %d, behind %d] ", ours, theirs);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int matches_merge_filter(struct commit *commit)
|
static int matches_merge_filter(struct commit *commit)
|
||||||
@ -334,11 +334,8 @@ static void print_ref_item(struct ref_item *item, int maxwidth, int verbose,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (verbose) {
|
if (verbose) {
|
||||||
struct strbuf subject = STRBUF_INIT;
|
struct strbuf subject = STRBUF_INIT, stat = STRBUF_INIT;
|
||||||
const char *sub = " **** invalid ref ****";
|
const char *sub = " **** invalid ref ****";
|
||||||
char stat[128];
|
|
||||||
|
|
||||||
stat[0] = '\0';
|
|
||||||
|
|
||||||
commit = item->commit;
|
commit = item->commit;
|
||||||
if (commit && !parse_commit(commit)) {
|
if (commit && !parse_commit(commit)) {
|
||||||
@ -348,13 +345,14 @@ static void print_ref_item(struct ref_item *item, int maxwidth, int verbose,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (item->kind == REF_LOCAL_BRANCH)
|
if (item->kind == REF_LOCAL_BRANCH)
|
||||||
fill_tracking_info(stat, item->name);
|
fill_tracking_info(&stat, item->name);
|
||||||
|
|
||||||
printf("%c %s%-*s%s %s %s%s\n", c, branch_get_color(color),
|
printf("%c %s%-*s%s %s %s%s\n", c, branch_get_color(color),
|
||||||
maxwidth, item->name,
|
maxwidth, item->name,
|
||||||
branch_get_color(COLOR_BRANCH_RESET),
|
branch_get_color(COLOR_BRANCH_RESET),
|
||||||
find_unique_abbrev(item->commit->object.sha1, abbrev),
|
find_unique_abbrev(item->commit->object.sha1, abbrev),
|
||||||
stat, sub);
|
stat.buf, sub);
|
||||||
|
strbuf_release(&stat);
|
||||||
strbuf_release(&subject);
|
strbuf_release(&subject);
|
||||||
} else {
|
} else {
|
||||||
printf("%c %s%s%s\n", c, branch_get_color(color), item->name,
|
printf("%c %s%s%s\n", c, branch_get_color(color), item->name,
|
||||||
|
Reference in New Issue
Block a user