Merge branch 'mg/fix-log-mergetag-color'
authorJunio C Hamano <gitster@pobox.com>
Wed, 16 Jul 2014 18:32:36 +0000 (11:32 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 16 Jul 2014 18:32:36 +0000 (11:32 -0700)
* mg/fix-log-mergetag-color:
log: correctly identify mergetag signature verification status

1  2 
log-tree.c
diff --combined log-tree.c
index 10e68442b35c9bd9ca1c00c52609a4827b8bace5,b4bbfe127101eb6ff06036b714305adcc7ca5104..c13184aafb603c5462d4c1a8befffc1ef61f3deb
@@@ -98,9 -98,9 +98,9 @@@ 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)
 +              if (!check_replace_refs)
                        return 0;
                if (get_sha1_hex(refname + 13, original_sha1)) {
                        warning("invalid replace ref %s", refname);
        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;
@@@ -376,7 -376,7 +376,7 @@@ static void show_signature(struct rev_i
        struct strbuf gpg_output = STRBUF_INIT;
        int status;
  
 -      if (parse_signed_commit(commit->object.sha1, &payload, &signature) <= 0)
 +      if (parse_signed_commit(commit, &payload, &signature) <= 0)
                goto out;
  
        status = verify_signed_buffer(payload.buf, payload.len,
@@@ -446,16 -446,17 +446,17 @@@ static void show_one_mergetag(struct re
  
        payload_size = parse_signature(extra->value, extra->len);
        status = -1;
-       if (extra->len > payload_size)
-               if (verify_signed_buffer(extra->value, payload_size,
-                                        extra->value + payload_size,
-                                        extra->len - payload_size,
-                                        &verify_message, NULL)) {
-                       if (verify_message.len <= gpg_message_offset)
-                               strbuf_addstr(&verify_message, "No signature\n");
-                       else
-                               status = 0;
-               }
+       if (extra->len > payload_size) {
+               /* could have a good signature */
+               if (!verify_signed_buffer(extra->value, payload_size,
+                                         extra->value + payload_size,
+                                         extra->len - payload_size,
+                                         &verify_message, NULL))
+                       status = 0; /* good */
+               else if (verify_message.len <= gpg_message_offset)
+                       strbuf_addstr(&verify_message, "No signature\n");
+               /* otherwise we couldn't verify, which is shown as bad */
+       }
  
        show_sig_lines(opt, status, verify_message.buf);
        strbuf_release(&verify_message);
@@@ -588,7 -589,7 +589,7 @@@ void show_log(struct rev_info *opt
                show_mergetag(opt, commit);
        }
  
 -      if (!commit->buffer)
 +      if (!get_cached_commit_buffer(commit, NULL))
                return;
  
        if (opt->show_notes) {
@@@ -736,7 -737,7 +737,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);
@@@ -805,16 -806,12 +806,16 @@@ int log_tree_commit(struct rev_info *op
        if (opt->line_level_traverse)
                return line_log_print(opt, commit);
  
 +      if (opt->track_linear && !opt->linear && !opt->reverse_output_stage)
 +              printf("\n%s\n", opt->break_bar);
        shown = log_tree_diff(opt, commit, &log);
        if (!shown && opt->loginfo && opt->always_show_header) {
                log.parent = NULL;
                show_log(opt);
                shown = 1;
        }
 +      if (opt->track_linear && !opt->linear && opt->reverse_output_stage)
 +              printf("\n%s\n", opt->break_bar);
        opt->loginfo = NULL;
        maybe_flush_or_die(stdout, "stdout");
        return shown;