This is a variation of the patch provided by Jeff King <peff@xxxxxxxx>: allow '%d' pretty format specifier to show decoration Previously, specifying git log --pretty=format:'%H %s' --decorate would calculate decorations, but not show them. You can now do: git log --pretty=format:'%H (%d) %s' to see them. The difference is that you don't need --decorate when %d has been given because this would be "doppeltgemoppelt" (redundant). Signed-off-by: Michael Dressel <MichaelTiloDressel@xxxxxxxxxxx> --- Documentation/pretty-formats.txt | 1 + builtin-log.c | 24 +++++++++++++++++++++++- pretty.c | 15 +++++++++++++++ 3 files changed, 39 insertions(+), 1 deletions(-) diff --git a/Documentation/pretty-formats.txt b/Documentation/pretty-formats.txt index 388d492..2616d63 100644 --- a/Documentation/pretty-formats.txt +++ b/Documentation/pretty-formats.txt @@ -116,6 +116,7 @@ The placeholders are: - '%cr': committer date, relative - '%ct': committer date, UNIX timestamp - '%ci': committer date, ISO 8601 format +- '%d': decoration - '%e': encoding - '%s': subject - '%b': body diff --git a/builtin-log.c b/builtin-log.c index 1d3c5cb..5424012 100644 --- a/builtin-log.c +++ b/builtin-log.c @@ -50,11 +50,29 @@ static int add_ref_decoration(const char *refname, const unsigned char *sha1, in return 0; } +static int deco_in_format(int argc, const char **argv) +{ + int i; + int deco=0; + for (i=0;i<argc;i++) + { + if ((strstr(argv[i], "pretty=format:") || + strstr(argv[i], "pretty=tformat:")) && + strstr(argv[i], "%d")) + { + deco=1; + break; + } + + } + return deco; +} + static void cmd_log_init(int argc, const char **argv, const char *prefix, struct rev_info *rev) { int i; - int decorate = 0; + int decorate = deco_in_format(argc, argv); rev->abbrev = DEFAULT_ABBREV; rev->commit_format = CMIT_FMT_DEFAULT; @@ -77,6 +95,10 @@ static void cmd_log_init(int argc, const char **argv, const char *prefix, if (rev->diffopt.nr_paths != 1) usage("git logs can only follow renames on one pathname at a time"); } + if (decorate) + { + for_each_ref(add_ref_decoration, NULL); + } for (i = 1; i < argc; i++) { const char *arg = argv[i]; if (!strcmp(arg, "--decorate")) { diff --git a/pretty.c b/pretty.c index a29c290..3430e4d 100644 --- a/pretty.c +++ b/pretty.c @@ -520,8 +520,23 @@ static size_t format_commit_item(struct strbuf *sb, const char *placeholder, return 3; } else return 0; + case 'd': + { + struct name_decoration *d; + const char *prefix = ""; + d = lookup_decoration(&name_decoration, + &commit->object); + while (d) { + strbuf_addstr(sb, prefix); + prefix = ", "; + strbuf_addstr(sb, d->name); + d = d->next; + } + } + return 1; } + /* these depend on the commit */ if (!commit->object.parsed) parse_object(commit->object.sha1); -- 1.6.0.1 -- 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