]> gitweb.ps.run Git - ps-cgit/blob - ui-summary.c
Update to libgit 1.5.2-rc2
[ps-cgit] / ui-summary.c
1 /* ui-summary.c: functions for generating repo summary page
2  *
3  * Copyright (C) 2006 Lars Hjemli
4  *
5  * Licensed under GNU General Public License v2
6  *   (see COPYING for full license text)
7  */
8
9 #include "cgit.h"
10
11 static int cgit_print_branch_cb(const char *refname, const unsigned char *sha1,
12                                 int flags, void *cb_data)
13 {
14         struct commit *commit;
15         struct commitinfo *info;
16         char buf[256], *url;
17
18         strncpy(buf, refname, sizeof(buf));
19         commit = lookup_commit(sha1);
20         if (commit && !parse_commit(commit)){
21                 info = cgit_parse_commit(commit);
22                 html("<tr><td>");
23                 url = cgit_pageurl(cgit_query_repo, "log", 
24                                    fmt("h=%s", refname));
25                 html_link_open(url, NULL, NULL);
26                 html_txt(buf);
27                 html_link_close();
28                 html("</td><td>");
29                 cgit_print_date(commit->date);
30                 html("</td><td>");
31                 html_txt(info->author);
32                 html("</td><td>");
33                 url = cgit_pageurl(cgit_query_repo, "commit", 
34                                    fmt("id=%s", sha1_to_hex(sha1)));
35                 html_link_open(url, NULL, NULL);
36                 html_ntxt(cgit_max_msg_len, info->subject);
37                 html_link_close();
38                 html("</td></tr>\n");
39                 cgit_free_commitinfo(info);
40         } else {
41                 html("<tr><td>");
42                 html_txt(buf);
43                 html("</td><td colspan='3'>");
44                 htmlf("*** bad ref %s ***", sha1_to_hex(sha1));
45                 html("</td></tr>\n");
46         }
47         return 0;
48 }
49
50
51 static void cgit_print_object_ref(struct object *obj)
52 {
53         char *page, *url;
54
55         if (obj->type == OBJ_COMMIT)
56                 page = "commit";
57         else if (obj->type == OBJ_TREE)
58                 page = "tree";
59         else
60                 page = "view";
61
62         url = cgit_pageurl(cgit_query_repo, page, 
63                            fmt("id=%s", sha1_to_hex(obj->sha1)));
64         html_link_open(url, NULL, NULL);
65         htmlf("%s %s", typename(obj->type), 
66               sha1_to_hex(obj->sha1));
67         html_link_close();
68 }
69
70 static int cgit_print_tag_cb(const char *refname, const unsigned char *sha1,
71                                 int flags, void *cb_data)
72 {
73         struct tag *tag;
74         struct taginfo *info;
75         struct object *obj;
76         char buf[256], *url;
77  
78         strncpy(buf, refname, sizeof(buf));
79         obj = parse_object(sha1);
80         if (!obj)
81                 return 1;
82         if (obj->type == OBJ_TAG) {
83                 tag = lookup_tag(sha1);
84                 if (!tag || parse_tag(tag) || !(info = cgit_parse_tag(tag)))
85                         return 2;
86                 html("<tr><td>");
87                 url = cgit_pageurl(cgit_query_repo, "view", 
88                                    fmt("id=%s", sha1_to_hex(sha1)));
89                 html_link_open(url, NULL, NULL);
90                 html_txt(buf);
91                 html_link_close();
92                 html("</td><td>");
93                 if (info->tagger_date > 0)
94                         cgit_print_date(info->tagger_date);
95                 html("</td><td>");
96                 if (info->tagger)
97                         html(info->tagger);
98                 html("</td><td>");
99                 cgit_print_object_ref(tag->tagged);
100                 html("</td></tr>\n");
101         } else {
102                 html("<tr><td>");
103                 html_txt(buf);
104                 html("</td><td colspan='2'/><td>");
105                 cgit_print_object_ref(obj);
106                 html("</td></tr>\n");
107         }
108         return 0;
109 }
110
111 static void cgit_print_branches()
112 {
113         html("<tr class='nohover'><th class='left'>Branch</th>"
114              "<th class='left'>Updated</th>"
115              "<th class='left'>Author</th>"
116              "<th class='left'>Head commit</th></tr>\n");
117         for_each_branch_ref(cgit_print_branch_cb, NULL);
118 }
119
120 static void cgit_print_tags()
121 {
122         html("<tr class='nohover'><th class='left'>Tag</th>"
123              "<th class='left'>Created</th>"
124              "<th class='left'>Author</th>"
125              "<th class='left'>Reference</th></tr>\n");
126         for_each_tag_ref(cgit_print_tag_cb, NULL);
127 }
128
129 void cgit_print_summary()
130 {
131         html("<h2>");
132         html(cgit_repo->name);
133         html("</h2><h3>");
134         html(cgit_repo->desc);
135         html("</h3>");
136         html("<table class='list nowrap'>");
137         cgit_print_branches();
138         html("<tr class='nohover'><td colspan='4'>&nbsp;</td></tr>");
139         cgit_print_tags();
140         html("</table>");
141 }