2 cehtehs git web frontend
5 2007, 2008, Christian Thaeter <ct@pipapo.org>
7 This program is free software: you can redistribute it and/or modify
8 it under the terms of the GNU Affero General Public License as published by
9 the Free Software Foundation, either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU Affero General Public License for more details.
17 You should have received a copy of the GNU Affero General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>.
27 #define SHA1_HEADER <openssl/sha.h>
28 #include "git/cache.h"
29 #include "git/commit.h"
31 #include "git/revision.h"
34 webgit_log_link (struct webgit_query* query,
37 const char* object, int object_len,
43 html_attr ("href", html(
44 html_fmt ("%s?repo=%s&action=log",
45 query->request->script_name,
47 head ? html_fmt("&head=%s", head)
49 object ? html_fmt("&object=%.*s",
52 count > 0 ? html_fmt("&count=%d",
64 webgit_log_menu_action (struct webgit_repo_info* repo)
66 return html (html_tag ("div"),
67 webgit_repo_logo (repo), "<br />",
68 // TODO: ...., "<br />",
69 webgit_summary_link (repo->query, repo, html("Summary")), "<br />",
70 webgit_main_link (repo->query, html ("Main"))
76 webgit_log_table (struct webgit_query* query, const char* object, int count, int verbosity)
79 const char* argv[] = {NULL, object, NULL};
82 init_revisions (&rev, NULL);
83 rev.verbose_header = 1;
86 setup_revisions (argc, argv, &rev, NULL);
88 prepare_revision_walk(&rev);
90 Html table = html_list ();
91 Html cont = html_list ();
94 struct commit *commit;
95 while ((commit = get_revision (&rev)))
99 /* displayed query->count lines, finish */
100 html_list_append (cont,
105 sha1_to_hex(commit->object.sha1), 40,
109 free(commit->buffer);
110 commit->buffer = NULL;
111 free_commit_list(commit->parents);
112 commit->parents = NULL;
116 /* TODO: check if commit is one of the heads and display that */
119 webgit_object_commit_committer_date_parse (commit, &tm);
121 char pretty_date[256];
122 strftime (pretty_date, 255, "%c", &tm);
126 html_list_append (table,
129 html_attr ("id", "commit"),
130 html_attr ("class", (row & 1) ? "odd" : "even")
132 html(html_tag ("div",
133 html_attr ("class", "date")
135 html_strndup (pretty_date, 254)
137 html(html_tag ("div",
138 html_attr ("class", "test1")
140 webgit_object_link (query,
142 strlen (query->repo),
143 sha1_to_hex (commit->object.sha1),
147 webgit_object_commit_header_parse (commit)
152 html(html_tag ("div",
153 html_attr ("class", "author")
156 webgit_object_commit_author_name_parse (commit),
157 webgit_object_commit_author_email_parse (commit)
160 html (html_tag ("div",
161 html_attr ("class", "action")
166 webgit_object_link (query,
168 strlen (query->repo),
169 webgit_object_commit_tree_parse (commit),
184 html_list_append (table,
186 html(html_tag ("div",
187 html_attr ("class", "message")
189 html(html_tag ("pre"),
190 webgit_object_commit_message_parse (commit)
197 #if 0 /* traverse parents */
198 struct commit *parent;
199 while ((parent = pop_commit (&commit->parents)))
204 free(commit->buffer);
205 commit->buffer = NULL;
206 free_commit_list(commit->parents);
207 commit->parents = NULL;
210 return html (html( html_tag ("div", html_attr ("id", "log")), table), cont);
215 webgit_log_content_action (struct webgit_repo_info* repo)
217 struct webgit_query* query = repo->query;
221 object = query->object;
222 else if (query->head)
223 object = query->head;
227 return webgit_log_table (query, object, query->count, 2);
233 // c-file-style: "gnu"
234 // indent-tabs-mode: nil