/* ui-atom.c: functions for atom feeds * * Copyright (C) 2008 Lars Hjemli * * Licensed under GNU General Public License v2 * (see COPYING for full license text) */ #include "cgit.h" #include "ui-atom.h" #include "html.h" #include "ui-shared.h" static void add_entry(struct commit *commit, const char *host) { char delim = '&'; char *hex; char *mail, *t, *t2; struct commitinfo *info; info = cgit_parse_commit(commit); hex = sha1_to_hex(commit->object.sha1); html("\n"); html(""); html_txt(info->subject); html("\n"); html(""); cgit_print_date(info->committer_date, FMT_ATOMDATE, 0); html("\n"); html("\n"); if (info->author) { html(""); html_txt(info->author); html("\n"); } if (info->author_email && !ctx.cfg.noplainemail) { mail = xstrdup(info->author_email); t = strchr(mail, '<'); if (t) t++; else t = mail; t2 = strchr(t, '>'); if (t2) *t2 = '\0'; html(""); html_txt(t); html("\n"); free(mail); } html("\n"); html(""); cgit_print_date(info->author_date, FMT_ATOMDATE, 0); html("\n"); if (host) { html("\n"); } htmlf("%s\n", hex); html("\n"); html_txt(info->msg); html("\n"); html("\n"); html("
\n"); html("
\n");
	html_txt(info->msg);
	html("
\n"); html("
\n"); html("
\n"); html("
\n"); cgit_free_commitinfo(info); } void cgit_print_atom(char *tip, char *path, int max_count) { const char *host; const char *argv[] = {NULL, tip, NULL, NULL, NULL}; struct commit *commit; struct rev_info rev; int argc = 2; if (ctx.qry.show_all) argv[1] = "--all"; else if (!tip) argv[1] = ctx.qry.head; if (path) { argv[argc++] = "--"; argv[argc++] = path; } init_revisions(&rev, NULL); rev.abbrev = DEFAULT_ABBREV; rev.commit_format = CMIT_FMT_DEFAULT; rev.verbose_header = 1; rev.show_root_diff = 0; rev.max_count = max_count; setup_revisions(argc, argv, &rev, NULL); prepare_revision_walk(&rev); host = cgit_hosturl(); ctx.page.mimetype = "text/xml"; ctx.page.charset = "utf-8"; cgit_print_http_headers(&ctx); html("\n"); html(""); html_txt(ctx.repo->name); if (path) { html("/"); html_txt(path); } if (tip && !ctx.qry.show_all) { html(", branch "); html_txt(tip); } html("\n"); html(""); html_txt(ctx.repo->desc); html("\n"); if (host) { html("\n"); } while ((commit = get_revision(&rev)) != NULL) { add_entry(commit, host); free(commit->buffer); commit->buffer = NULL; free_commit_list(commit->parents); commit->parents = NULL; } html("\n"); }