Merge branch 'mg/log-decorate-HEAD'
authorJunio C Hamano <gitster@pobox.com>
Fri, 22 May 2015 19:41:51 +0000 (12:41 -0700)
committerJunio C Hamano <gitster@pobox.com>
Fri, 22 May 2015 19:41:51 +0000 (12:41 -0700)
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

1  2 
log-tree.c
diff --combined log-tree.c
index cf4646b0f4d78dfb9229287859d48022afc21b65,c931615d9267fd774d886e5414e051a25895ffdf..8dba7be92e34e511b1d464983bb6d13861f1555e
@@@ -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)
        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;
  
  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);
  
  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? */
        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) {
                                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);