]> git.cameronkatri.com Git - cgit.git/blobdiff - ui-log.c
ui-shared: add rel-vcs microformat links to HTML header
[cgit.git] / ui-log.c
index 93af0cee4d5f39c18e3e4727b8662b9f197f8391..657ff3cb76a835ae090452669c05ec49d904fc23 100644 (file)
--- a/ui-log.c
+++ b/ui-log.c
@@ -1,6 +1,6 @@
 /* ui-log.c: functions for log output
  *
- * Copyright (C) 2006 Lars Hjemli
+ * Copyright (C) 2006-2014 cgit Development Team <cgit@lists.zx2c4.com>
  *
  * Licensed under GNU General Public License v2
  *   (see COPYING for full license text)
@@ -10,7 +10,7 @@
 #include "ui-log.h"
 #include "html.h"
 #include "ui-shared.h"
-#include "vector.h"
+#include "argv-array.h"
 
 int files, add_lines, rem_lines;
 
@@ -56,27 +56,28 @@ static void inspect_files(struct diff_filepair *pair)
 
 void show_commit_decorations(struct commit *commit)
 {
-       struct name_decoration *deco;
+       const struct name_decoration *deco;
        static char buf[1024];
 
        buf[sizeof(buf) - 1] = 0;
-       deco = lookup_decoration(&name_decoration, &commit->object);
+       deco = get_name_decoration(&commit->object);
+       html("<span class='decoration'>");
        while (deco) {
-               if (!prefixcmp(deco->name, "refs/heads/")) {
+               if (starts_with(deco->name, "refs/heads/")) {
                        strncpy(buf, deco->name + 11, sizeof(buf) - 1);
                        cgit_log_link(buf, NULL, "branch-deco", buf, NULL,
                                      ctx.qry.vpath, 0, NULL, NULL,
                                      ctx.qry.showmsg);
                }
-               else if (!prefixcmp(deco->name, "tag: refs/tags/")) {
+               else if (starts_with(deco->name, "tag: refs/tags/")) {
                        strncpy(buf, deco->name + 15, sizeof(buf) - 1);
                        cgit_tag_link(buf, NULL, "tag-deco", ctx.qry.head, buf);
                }
-               else if (!prefixcmp(deco->name, "refs/tags/")) {
+               else if (starts_with(deco->name, "refs/tags/")) {
                        strncpy(buf, deco->name + 10, sizeof(buf) - 1);
                        cgit_tag_link(buf, NULL, "tag-deco", ctx.qry.head, buf);
                }
-               else if (!prefixcmp(deco->name, "refs/remotes/")) {
+               else if (starts_with(deco->name, "refs/remotes/")) {
                        if (!ctx.repo->enable_remote_branches)
                                goto next;
                        strncpy(buf, deco->name + 13, sizeof(buf) - 1);
@@ -89,11 +90,12 @@ void show_commit_decorations(struct commit *commit)
                        strncpy(buf, deco->name, sizeof(buf) - 1);
                        cgit_commit_link(buf, NULL, "deco", ctx.qry.head,
                                         sha1_to_hex(commit->object.sha1),
-                                        ctx.qry.vpath, 0);
+                                        ctx.qry.vpath);
                }
 next:
                deco = deco->next;
        }
+       html("</span>");
 }
 
 static void print_commit(struct commit *commit, struct rev_info *revs)
@@ -163,10 +165,12 @@ static void print_commit(struct commit *commit, struct rev_info *revs)
                }
        }
        cgit_commit_link(info->subject, NULL, NULL, ctx.qry.head,
-                        sha1_to_hex(commit->object.sha1), ctx.qry.vpath, 0);
+                        sha1_to_hex(commit->object.sha1), ctx.qry.vpath);
        show_commit_decorations(commit);
        html("</td><td>");
+       cgit_open_filter(ctx.repo->email_filter, info->author_email, "log");
        html_txt(info->author);
+       cgit_close_filter(ctx.repo->email_filter);
 
        if (revs->graph) {
                html("</td><td>");
@@ -286,77 +290,64 @@ void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern
 {
        struct rev_info rev;
        struct commit *commit;
-       struct vector vec = VECTOR_INIT(char *);
+       struct argv_array rev_argv = ARGV_ARRAY_INIT;
        int i, columns = commit_graph ? 4 : 3;
        int must_free_tip = 0;
-       struct strbuf argbuf = STRBUF_INIT;
 
-       /* First argv is NULL */
-       vector_push(&vec, NULL, 0);
+       /* rev_argv.argv[0] will be ignored by setup_revisions */
+       argv_array_push(&rev_argv, "log_rev_setup");
 
        if (!tip)
                tip = ctx.qry.head;
        tip = disambiguate_ref(tip, &must_free_tip);
-       vector_push(&vec, &tip, 0);
+       argv_array_push(&rev_argv, tip);
 
        if (grep && pattern && *pattern) {
                pattern = xstrdup(pattern);
                if (!strcmp(grep, "grep") || !strcmp(grep, "author") ||
                    !strcmp(grep, "committer")) {
-                       strbuf_addf(&argbuf, "--%s=%s", grep, pattern);
-                       vector_push(&vec, &argbuf.buf, 0);
-               }
-               if (!strcmp(grep, "range")) {
+                       argv_array_pushf(&rev_argv, "--%s=%s", grep, pattern);
+               } else if (!strcmp(grep, "range")) {
                        char *arg;
                        /* Split the pattern at whitespace and add each token
                         * as a revision expression. Do not accept other
                         * rev-list options. Also, replace the previously
                         * pushed tip (it's no longer relevant).
                         */
-                       vec.count--;
+                       argv_array_pop(&rev_argv);
                        while ((arg = next_token(&pattern))) {
                                if (*arg == '-') {
                                        fprintf(stderr, "Bad range expr: %s\n",
                                                arg);
                                        break;
                                }
-                               vector_push(&vec, &arg, 0);
+                               argv_array_push(&rev_argv, arg);
                        }
                }
        }
        if (commit_graph) {
-               static const char *graph_arg = "--graph";
-               static const char *color_arg = "--color";
-               vector_push(&vec, &graph_arg, 0);
-               vector_push(&vec, &color_arg, 0);
+               argv_array_push(&rev_argv, "--graph");
+               argv_array_push(&rev_argv, "--color");
                graph_set_column_colors(column_colors_html,
                                        COLUMN_COLORS_HTML_MAX);
        }
 
-       if (commit_sort == 1) {
-               static const char *date_order_arg = "--date-order";
-               vector_push(&vec, &date_order_arg, 0);
-       } else if (commit_sort == 2) {
-               static const char *topo_order_arg = "--topo-order";
-               vector_push(&vec, &topo_order_arg, 0);
-       }
-
-       if (path) {
-               static const char *double_dash_arg = "--";
-               vector_push(&vec, &double_dash_arg, 0);
-               vector_push(&vec, &path, 0);
-       }
+       if (commit_sort == 1)
+               argv_array_push(&rev_argv, "--date-order");
+       else if (commit_sort == 2)
+               argv_array_push(&rev_argv, "--topo-order");
 
-       /* Make sure the vector is NULL-terminated */
-       vector_push(&vec, NULL, 0);
-       vec.count--;
+       argv_array_push(&rev_argv, "--");
+       if (path)
+               argv_array_push(&rev_argv, path);
 
        init_revisions(&rev, NULL);
        rev.abbrev = DEFAULT_ABBREV;
        rev.commit_format = CMIT_FMT_DEFAULT;
        rev.verbose_header = 1;
        rev.show_root_diff = 0;
-       setup_revisions(vec.count, vec.data, &rev, NULL);
+       rev.ignore_missing = 1;
+       setup_revisions(rev_argv.argc, rev_argv.argv, &rev, NULL);
        load_ref_decorations(DECORATE_FULL_REFS);
        rev.show_decorations = 1;
        rev.grep_filter.regflags |= REG_ICASE;
@@ -397,17 +388,14 @@ void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern
                ofs = 0;
 
        for (i = 0; i < ofs && (commit = get_revision(&rev)) != NULL; i++) {
-               free(commit->buffer);
-               commit->buffer = NULL;
+               free_commit_buffer(commit);
                free_commit_list(commit->parents);
                commit->parents = NULL;
        }
 
-       init_display_notes(NULL);
        for (i = 0; i < cnt && (commit = get_revision(&rev)) != NULL; i++) {
                print_commit(commit, &rev);
-               free(commit->buffer);
-               commit->buffer = NULL;
+               free_commit_buffer(commit);
                free_commit_list(commit->parents);
                commit->parents = NULL;
        }
@@ -440,5 +428,4 @@ void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern
        /* If we allocated tip then it is safe to cast away const. */
        if (must_free_tip)
                free((char*) tip);
-       strbuf_release(&argbuf);
 }