Merge branch 'bc/log-decoration'
authorJunio C Hamano <gitster@pobox.com>
Fri, 10 Jan 2014 18:32:39 +0000 (10:32 -0800)
committerJunio C Hamano <gitster@pobox.com>
Fri, 10 Jan 2014 18:32:39 +0000 (10:32 -0800)
"git log --decorate" did not handle a tag pointed by another tag
nicely.

* bc/log-decoration:
log: properly handle decorations with chained tags

1  2 
log-tree.c
diff --combined log-tree.c
index 642faffdb7d149f162c8716eb13dd878d16baa4b,1982631ca497002b746873cd62fabbc4b7f9d3ce..08970bf46e49f6447ada24e81e5792ea9f92f419
@@@ -98,7 -98,7 +98,7 @@@ static int add_ref_decoration(const cha
        struct object *obj;
        enum decoration_type type = DECORATION_NONE;
  
 -      if (!prefixcmp(refname, "refs/replace/")) {
 +      if (starts_with(refname, "refs/replace/")) {
                unsigned char original_sha1[20];
                if (!read_replace_refs)
                        return 0;
        if (!obj)
                return 0;
  
 -      if (!prefixcmp(refname, "refs/heads/"))
 +      if (starts_with(refname, "refs/heads/"))
                type = DECORATION_REF_LOCAL;
 -      else if (!prefixcmp(refname, "refs/remotes/"))
 +      else if (starts_with(refname, "refs/remotes/"))
                type = DECORATION_REF_REMOTE;
 -      else if (!prefixcmp(refname, "refs/tags/"))
 +      else if (starts_with(refname, "refs/tags/"))
                type = DECORATION_REF_TAG;
        else if (!strcmp(refname, "refs/stash"))
                type = DECORATION_REF_STASH;
                obj = ((struct tag *)obj)->tagged;
                if (!obj)
                        break;
+               if (!obj->parsed)
+                       parse_object(obj->sha1);
                add_name_decoration(DECORATION_REF_TAG, refname, obj);
        }
        return 0;
@@@ -734,7 -736,7 +736,7 @@@ static int log_tree_diff(struct rev_inf
        if (!opt->diff && !DIFF_OPT_TST(&opt->diffopt, EXIT_WITH_STATUS))
                return 0;
  
 -      parse_commit(commit);
 +      parse_commit_or_die(commit);
        sha1 = commit->tree->object.sha1;
  
        /* Root commit? */
                         * parent, showing summary diff of the others
                         * we merged _in_.
                         */
 -                      parse_commit(parents->item);
 +                      parse_commit_or_die(parents->item);
                        diff_tree_sha1(parents->item->tree->object.sha1,
                                       sha1, "", &opt->diffopt);
                        log_tree_diff_flush(opt);
        for (;;) {
                struct commit *parent = parents->item;
  
 -              parse_commit(parent);
 +              parse_commit_or_die(parent);
                diff_tree_sha1(parent->tree->object.sha1,
                               sha1, "", &opt->diffopt);
                log_tree_diff_flush(opt);