Use the new function interp_find_active() to avoid calculating the unique hash names, and other things, when they are not even asked for. Unfortunately, we cannot reuse the result of that function, which would be cleaner: there are more users than just git log. Most notably, git-archive with "$Format:...$" substitution. Signed-off-by: Johannes Schindelin <johannes.schindelin@xxxxxx> --- pretty.c | 55 ++++++++++++++++++++++++++++++++++--------------------- 1 files changed, 34 insertions(+), 21 deletions(-) diff --git a/pretty.c b/pretty.c index 490cede..590de4c 100644 --- a/pretty.c +++ b/pretty.c @@ -394,6 +394,8 @@ void format_commit_message(const struct commit *commit, enum { HEADER, SUBJECT, BODY } state; const char *msg = commit->buffer; + interp_find_active(format, table, ARRAY_SIZE(table)); + if (ILEFT_RIGHT + 1 != ARRAY_SIZE(table)) die("invalid interp table!"); @@ -407,12 +409,18 @@ void format_commit_message(const struct commit *commit, /* these depend on the commit */ if (!commit->object.parsed) parse_object(commit->object.sha1); - interp_set_entry(table, IHASH, sha1_to_hex(commit->object.sha1)); - interp_set_entry(table, IHASH_ABBREV, + if (table[IHASH].active) + interp_set_entry(table, IHASH, + sha1_to_hex(commit->object.sha1)); + if (table[IHASH_ABBREV].active) + interp_set_entry(table, IHASH_ABBREV, find_unique_abbrev(commit->object.sha1, DEFAULT_ABBREV)); - interp_set_entry(table, ITREE, sha1_to_hex(commit->tree->object.sha1)); - interp_set_entry(table, ITREE_ABBREV, + if (table[ITREE].active) + interp_set_entry(table, ITREE, + sha1_to_hex(commit->tree->object.sha1)); + if (table[ITREE_ABBREV].active) + interp_set_entry(table, ITREE_ABBREV, find_unique_abbrev(commit->tree->object.sha1, DEFAULT_ABBREV)); interp_set_entry(table, ILEFT_RIGHT, @@ -422,22 +430,27 @@ void format_commit_message(const struct commit *commit, ? "<" : ">"); - parents[1] = 0; - for (i = 0, p = commit->parents; - p && i < sizeof(parents) - 1; - p = p->next) - i += snprintf(parents + i, sizeof(parents) - i - 1, " %s", - sha1_to_hex(p->item->object.sha1)); - interp_set_entry(table, IPARENTS, parents + 1); - - parents[1] = 0; - for (i = 0, p = commit->parents; - p && i < sizeof(parents) - 1; - p = p->next) - i += snprintf(parents + i, sizeof(parents) - i - 1, " %s", - find_unique_abbrev(p->item->object.sha1, - DEFAULT_ABBREV)); - interp_set_entry(table, IPARENTS_ABBREV, parents + 1); + if (table[IPARENTS].active) { + parents[1] = 0; + for (i = 0, p = commit->parents; + p && i < sizeof(parents) - 1; + p = p->next) + i += snprintf(parents + i, sizeof(parents) - i - 1, + " %s", sha1_to_hex(p->item->object.sha1)); + interp_set_entry(table, IPARENTS, parents + 1); + } + + if (table[IPARENTS_ABBREV].active) { + parents[1] = 0; + for (i = 0, p = commit->parents; + p && i < sizeof(parents) - 1; + p = p->next) + i += snprintf(parents + i, sizeof(parents) - i - 1, + " %s", + find_unique_abbrev(p->item->object.sha1, + DEFAULT_ABBREV)); + interp_set_entry(table, IPARENTS_ABBREV, parents + 1); + } for (i = 0, state = HEADER; msg[i] && state < BODY; i++) { int eol; @@ -464,7 +477,7 @@ void format_commit_message(const struct commit *commit, xmemdupz(msg + i + 9, eol - i - 9); i = eol; } - if (msg[i]) + if (table[IBODY].active && msg[i]) table[IBODY].value = xstrdup(msg + i); len = interpolate(sb->buf + sb->len, strbuf_avail(sb), -- 1.5.3.5.1597.g7191 - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html