From: Junio C Hamano Date: Fri, 22 May 2015 19:41:51 +0000 (-0700) Subject: Merge branch 'mg/log-decorate-HEAD' X-Git-Tag: v2.5.0-rc0~91 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/fd707807f012438ab58ce6bd819ea38feca781a7?ds=inline;hp=-c Merge branch 'mg/log-decorate-HEAD' The "log --decorate" enhancement in Git 2.4 that shows the commit at the tip of the current branch e.g. "HEAD -> master", did not work with --decorate=full. * mg/log-decorate-HEAD: log: do not shorten decoration names too early log: decorate HEAD with branch name under --decorate=full, too --- fd707807f012438ab58ce6bd819ea38feca781a7 diff --combined log-tree.c index cf4646b0f4,c931615d92..8dba7be92e --- a/log-tree.c +++ b/log-tree.c @@@ -13,6 -13,8 +13,8 @@@ #include "line-log.h" static struct decoration name_decoration = { "object names" }; + static int decoration_loaded; + static int decoration_flags; static char decoration_colors[][COLOR_MAXLEN] = { GIT_COLOR_RESET, @@@ -92,6 -94,8 +94,8 @@@ static int add_ref_decoration(const cha struct object *obj; enum decoration_type type = DECORATION_NONE; + assert(cb_data == NULL); + if (starts_with(refname, "refs/replace/")) { unsigned char original_sha1[20]; if (!check_replace_refs) @@@ -121,8 -125,6 +125,6 @@@ else if (!strcmp(refname, "HEAD")) type = DECORATION_REF_HEAD; - if (!cb_data || *(int *)cb_data == DECORATE_SHORT_REFS) - refname = prettify_refname(refname); add_name_decoration(type, refname, obj); while (obj->type == OBJ_TAG) { obj = ((struct tag *)obj)->tagged; @@@ -137,7 -139,7 +139,7 @@@ static int add_graft_decoration(const struct commit_graft *graft, void *cb_data) { - struct commit *commit = lookup_commit(graft->sha1); + struct commit *commit = lookup_commit(graft->oid.hash); if (!commit) return 0; add_name_decoration(DECORATION_GRAFTED, "grafted", &commit->object); @@@ -146,11 -148,11 +148,11 @@@ void load_ref_decorations(int flags) { - static int loaded; - if (!loaded) { - loaded = 1; - for_each_ref(add_ref_decoration, &flags); - head_ref(add_ref_decoration, &flags); + if (!decoration_loaded) { + decoration_loaded = 1; + decoration_flags = flags; + for_each_ref(add_ref_decoration, NULL); + head_ref(add_ref_decoration, NULL); for_each_commit_graft(add_graft_decoration, NULL); } } @@@ -196,7 -198,8 +198,8 @@@ static const struct name_decoration *cu branch_name = resolve_ref_unsafe("HEAD", 0, unused, &rru_flags); if (!(rru_flags & REF_ISSYMREF)) return NULL; - if (!skip_prefix(branch_name, "refs/heads/", &branch_name)) + + if (!starts_with(branch_name, "refs/")) return NULL; /* OK, do we have that ref in the list? */ @@@ -209,6 -212,14 +212,14 @@@ return NULL; } + static void show_name(struct strbuf *sb, const struct name_decoration *decoration) + { + if (decoration_flags == DECORATE_SHORT_REFS) + strbuf_addstr(sb, prettify_refname(decoration->name)); + else + strbuf_addstr(sb, decoration->name); + } + /* * The caller makes sure there is no funny color before calling. * format_decorations_extended makes sure the same after return. @@@ -246,7 -257,7 +257,7 @@@ void format_decorations_extended(struc if (decoration->type == DECORATION_REF_TAG) strbuf_addstr(sb, "tag: "); - strbuf_addstr(sb, decoration->name); + show_name(sb, decoration); if (current_and_HEAD && decoration->type == DECORATION_REF_HEAD) { @@@ -255,7 -266,7 +266,7 @@@ strbuf_addstr(sb, " -> "); strbuf_addstr(sb, color_reset); strbuf_addstr(sb, decorate_get_color(use_color, current_and_HEAD->type)); - strbuf_addstr(sb, current_and_HEAD->name); + show_name(sb, current_and_HEAD); } strbuf_addstr(sb, color_reset);