Diffstat (limited to 'ui-atom.c')
| -rw-r--r-- | ui-atom.c | 66 |
1 files changed, 42 insertions, 24 deletions
@@ -1,16 +1,19 @@ /* ui-atom.c: functions for atom feeds * - * Copyright (C) 2008 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) */ +#define USE_THE_REPOSITORY_VARIABLE + #include "cgit.h" +#include "ui-atom.h" #include "html.h" #include "ui-shared.h" -static void add_entry(struct commit *commit, char *host) +static void add_entry(struct commit *commit, const char *host) { char delim = '&'; char *hex; @@ -18,13 +21,14 @@ static void add_entry(struct commit *commit, char *host) struct commitinfo *info; info = cgit_parse_commit(commit); - hex = sha1_to_hex(commit->object.sha1); + hex = oid_to_hex(&commit->object.oid); html("<entry>\n"); html("<title>"); html_txt(info->subject); html("</title>\n"); html("<updated>"); - cgit_print_date(info->committer_date, FMT_ATOMDATE, 0); + html_txt(show_date(info->committer_date, 0, + date_mode_from_type(DATE_ISO8601_STRICT))); html("</updated>\n"); html("<author>\n"); if (info->author) { @@ -49,41 +53,41 @@ static void add_entry(struct commit *commit, char *host) } html("</author>\n"); html("<published>"); - cgit_print_date(info->author_date, FMT_ATOMDATE, 0); + html_txt(show_date(info->author_date, 0, + date_mode_from_type(DATE_ISO8601_STRICT))); html("</published>\n"); if (host) { + char *pageurl; html("<link rel='alternate' type='text/html' href='"); html(cgit_httpscheme()); html_attr(host); - html_attr(cgit_pageurl(ctx.repo->url, "commit", NULL)); + pageurl = cgit_pageurl(ctx.repo->url, "commit", NULL); + html_attr(pageurl); if (ctx.cfg.virtual_root) delim = '?'; - htmlf("%cid=%s", delim, hex); + html_attrf("%cid=%s", delim, hex); html("'/>\n"); + free(pageurl); } - htmlf("<id>%s</id>\n", hex); + html("<id>"); + html_txtf("urn:%s:%s", the_hash_algo->name, hex); + html("</id>\n"); html("<content type='text'>\n"); html_txt(info->msg); html("</content>\n"); - html("<content type='xhtml'>\n"); - html("<div xmlns='http://www.w3.org/1999/xhtml'>\n"); - html("<pre>\n"); - html_txt(info->msg); - html("</pre>\n"); - html("</div>\n"); - html("</content>\n"); html("</entry>\n"); cgit_free_commitinfo(info); } -void cgit_print_atom(char *tip, char *path, int max_count) +void cgit_print_atom(char *tip, const char *path, int max_count) { char *host; const char *argv[] = {NULL, tip, NULL, NULL, NULL}; struct commit *commit; struct rev_info rev; int argc = 2; + bool first = true; if (ctx.qry.show_all) argv[1] = "--all"; @@ -95,7 +99,7 @@ void cgit_print_atom(char *tip, char *path, int max_count) argv[argc++] = path; } - init_revisions(&rev, NULL); + repo_init_revisions(the_repository, &rev, NULL); rev.abbrev = DEFAULT_ABBREV; rev.commit_format = CMIT_FMT_DEFAULT; rev.verbose_header = 1; @@ -107,7 +111,7 @@ void cgit_print_atom(char *tip, char *path, int max_count) host = cgit_hosturl(); ctx.page.mimetype = "text/xml"; ctx.page.charset = "utf-8"; - cgit_print_http_headers(&ctx); + cgit_print_http_headers(); html("<feed xmlns='http://www.w3.org/2005/Atom'>\n"); html("<title>"); html_txt(ctx.repo->name); @@ -124,18 +128,32 @@ void cgit_print_atom(char *tip, char *path, int max_count) html_txt(ctx.repo->desc); html("</subtitle>\n"); if (host) { + char *fullurl = cgit_currentfullurl(); + char *repourl = cgit_repourl(ctx.repo->url); + html("<id>"); + html_txtf("%s%s%s", cgit_httpscheme(), host, fullurl); + html("</id>\n"); + html("<link rel='self' href='"); + html_attrf("%s%s%s", cgit_httpscheme(), host, fullurl); + html("'/>\n"); html("<link rel='alternate' type='text/html' href='"); - html(cgit_httpscheme()); - html_attr(host); - html_attr(cgit_repourl(ctx.repo->url)); + html_attrf("%s%s%s", cgit_httpscheme(), host, repourl); html("'/>\n"); + free(fullurl); + free(repourl); } while ((commit = get_revision(&rev)) != NULL) { + if (first) { + html("<updated>"); + html_txt(show_date(commit->date, 0, + date_mode_from_type(DATE_ISO8601_STRICT))); + html("</updated>\n"); + first = false; + } add_entry(commit, host); - free(commit->buffer); - commit->buffer = NULL; - free_commit_list(commit->parents); + release_commit_memory(the_repository->parsed_objects, commit); commit->parents = NULL; } html("</feed>\n"); + free(host); } |