Browse Source

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>
maint
René Scharfe 16 years ago committed by Junio C Hamano
parent
commit
3b3d443feb
  1. 1
      Documentation/pretty-formats.txt
  2. 21
      pretty.c

1
Documentation/pretty-formats.txt

@ -116,6 +116,7 @@ The placeholders are: @@ -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

21
pretty.c

@ -5,6 +5,7 @@ @@ -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) @@ -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, @@ -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. */

Loading…
Cancel
Save