This enables a page which generates atom feeds for the current branch and path, heavily inspired by the atom-support in gitweb. Signed-off-by: Lars Hjemli <hjemli@gmail.com>upstream
parent
0f0ab148c6
commit
b2a3d31e88
@ -0,0 +1,129 @@ |
|||||||
|
/* 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 "html.h" |
||||||
|
#include "ui-shared.h" |
||||||
|
|
||||||
|
void add_entry(struct commit *commit, 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("<entry>\n"); |
||||||
|
html("<title>"); |
||||||
|
html_txt(info->subject); |
||||||
|
html("</title>\n"); |
||||||
|
html("<updated>"); |
||||||
|
cgit_print_date(info->author_date, FMT_ATOMDATE, ctx.cfg.local_time); |
||||||
|
html("</updated>\n"); |
||||||
|
html("<author>\n"); |
||||||
|
if (info->author) { |
||||||
|
html("<name>"); |
||||||
|
html_txt(info->author); |
||||||
|
html("</name>\n"); |
||||||
|
} |
||||||
|
if (info->author_email) { |
||||||
|
mail = xstrdup(info->author_email); |
||||||
|
t = strchr(mail, '<'); |
||||||
|
if (t) |
||||||
|
t++; |
||||||
|
else |
||||||
|
t = mail; |
||||||
|
t2 = strchr(t, '>'); |
||||||
|
if (t2) |
||||||
|
*t2 = '\0'; |
||||||
|
html("<email>"); |
||||||
|
html_txt(t); |
||||||
|
html("</email>\n"); |
||||||
|
free(mail); |
||||||
|
} |
||||||
|
html("</author>\n"); |
||||||
|
html("<published>"); |
||||||
|
cgit_print_date(info->author_date, FMT_ATOMDATE, ctx.cfg.local_time); |
||||||
|
html("</published>\n"); |
||||||
|
if (host) { |
||||||
|
html("<link rel='alternate' type='text/html' href='http://"); |
||||||
|
html_attr(host); |
||||||
|
html_attr(cgit_pageurl(ctx.repo->url, "commit", NULL)); |
||||||
|
if (ctx.cfg.virtual_root) |
||||||
|
delim = '?'; |
||||||
|
htmlf("%cid=%s", delim, hex); |
||||||
|
html("'/>\n"); |
||||||
|
} |
||||||
|
htmlf("<id>%s</id>\n", hex); |
||||||
|
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) |
||||||
|
{ |
||||||
|
char *host; |
||||||
|
const char *argv[] = {NULL, tip, NULL, NULL, NULL}; |
||||||
|
struct commit *commit; |
||||||
|
struct rev_info rev; |
||||||
|
int argc = 2; |
||||||
|
|
||||||
|
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("<feed xmlns='http://www.w3.org/2005/Atom'>\n"); |
||||||
|
html("<title>"); |
||||||
|
html_txt(ctx.repo->name); |
||||||
|
html("</title>\n"); |
||||||
|
html("<subtitle>"); |
||||||
|
html_txt(ctx.repo->desc); |
||||||
|
html("</subtitle>\n"); |
||||||
|
if (host) { |
||||||
|
html("<link rel='alternate' type='text/html' href='http://"); |
||||||
|
html_attr(host); |
||||||
|
html_attr(cgit_repourl(ctx.repo->url)); |
||||||
|
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("</feed>\n"); |
||||||
|
} |
@ -0,0 +1,6 @@ |
|||||||
|
#ifndef UI_ATOM_H |
||||||
|
#define UI_ATOM_H |
||||||
|
|
||||||
|
extern void cgit_print_atom(char *tip, char *path, int max_count); |
||||||
|
|
||||||
|
#endif |
Loading…
Reference in new issue