add '%d' pretty format specifier to show decoration

Add a new format placeholder, %d, which expands to a ref name decoration
(think git log --decorate).  It expands to an empty string if the commit
has no decoration, or otherwise to a comma (and space) separated list of
decorations, surrounded by parentheses and a leading space.

Michael Dressel implemented an initial version and chose the letter d,
Junio suggested to add a leading space and parentheses.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
René Scharfe 2008-09-04 23:40:03 +02:00 committed by Junio C Hamano
parent cab4feb67d
commit 3b3d443feb
2 changed files with 22 additions and 0 deletions

View File

@ -116,6 +116,7 @@ The placeholders are:
- '%cr': committer date, relative
- '%ct': committer date, UNIX timestamp
- '%ci': committer date, ISO 8601 format
- '%d': ref names, like the --decorate option of linkgit:git-log[1]
- '%e': encoding
- '%s': subject
- '%b': body

View File

@ -5,6 +5,7 @@
#include "revision.h"
#include "string-list.h"
#include "mailmap.h"
#include "log-tree.h"
static char *user_format;
@ -481,6 +482,23 @@ static void parse_commit_header(struct format_commit_context *context)
context->commit_header_parsed = 1;
}
static void format_decoration(struct strbuf *sb, const struct commit *commit)
{
struct name_decoration *d;
const char *prefix = " (";
load_ref_decorations();
d = lookup_decoration(&name_decoration, &commit->object);
while (d) {
strbuf_addstr(sb, prefix);
prefix = ", ";
strbuf_addstr(sb, d->name);
d = d->next;
}
if (prefix[0] == ',')
strbuf_addch(sb, ')');
}
static size_t format_commit_item(struct strbuf *sb, const char *placeholder,
void *context)
{
@ -573,6 +591,9 @@ static size_t format_commit_item(struct strbuf *sb, const char *placeholder,
? '<'
: '>');
return 1;
case 'd':
format_decoration(sb, commit);
return 1;
}
/* For the rest we have to parse the commit header. */