mirror of
https://git.zx2c4.com/cgit
synced 2024-11-08 09:38:41 +00:00
ui-atom: generate valid Atom feeds
Fixes several RFC 4287 violations: > 4.1.1. The "atom:feed" Element > o atom:feed elements MUST contain exactly one atom:id element. > o atom:feed elements SHOULD contain one atom:link element with a rel > attribute value of "self". This is the preferred URI for > retrieving Atom Feed Documents representing this Atom feed. > o atom:feed elements MUST contain exactly one atom:updated element. An atom:id element is generated from cgit_currentfullurl(), and an atom:link element with a rel attribute of "self" is generated with the same URL. An atom:updated element is generated from the date of the first commit in the revision walk. > 4.1.2. The "atom:entry" Element > o atom:entry elements MUST NOT contain more than one atom:content > element. The second atom:content element with the type of "xhtml" is removed. > 4.2.6. The "atom:id" Element > Its content MUST be an IRI, as defined by [RFC3987]. Note that the > definition of "IRI" excludes relative references. Though the IRI > might use a dereferencable scheme, Atom Processors MUST NOT assume it > can be dereferenced. The atom:id elements for commits now use URNs in the "sha1" or "sha256" namespaces. Although these are not registered URN namespaces, they see use in the wild, for instance as part of magnet URIs. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
parent
3295155a0c
commit
4e4b30effb
33
ui-atom.c
33
ui-atom.c
@ -67,17 +67,12 @@ static void add_entry(struct commit *commit, const char *host)
|
|||||||
html("'/>\n");
|
html("'/>\n");
|
||||||
free(pageurl);
|
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("<content type='text'>\n");
|
||||||
html_txt(info->msg);
|
html_txt(info->msg);
|
||||||
html("</content>\n");
|
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");
|
html("</entry>\n");
|
||||||
cgit_free_commitinfo(info);
|
cgit_free_commitinfo(info);
|
||||||
}
|
}
|
||||||
@ -90,6 +85,7 @@ void cgit_print_atom(char *tip, const char *path, int max_count)
|
|||||||
struct commit *commit;
|
struct commit *commit;
|
||||||
struct rev_info rev;
|
struct rev_info rev;
|
||||||
int argc = 2;
|
int argc = 2;
|
||||||
|
bool first = true;
|
||||||
|
|
||||||
if (ctx.qry.show_all)
|
if (ctx.qry.show_all)
|
||||||
argv[1] = "--all";
|
argv[1] = "--all";
|
||||||
@ -130,15 +126,28 @@ void cgit_print_atom(char *tip, const char *path, int max_count)
|
|||||||
html_txt(ctx.repo->desc);
|
html_txt(ctx.repo->desc);
|
||||||
html("</subtitle>\n");
|
html("</subtitle>\n");
|
||||||
if (host) {
|
if (host) {
|
||||||
|
char *fullurl = cgit_currentfullurl();
|
||||||
char *repourl = cgit_repourl(ctx.repo->url);
|
char *repourl = cgit_repourl(ctx.repo->url);
|
||||||
html("<link rel='alternate' type='text/html' href='");
|
html("<id>");
|
||||||
html(cgit_httpscheme());
|
html_txtf("%s%s%s", cgit_httpscheme(), host, fullurl);
|
||||||
html_attr(host);
|
html("</id>\n");
|
||||||
html_attr(repourl);
|
html("<link rel='self' href='");
|
||||||
|
html_attrf("%s%s%s", cgit_httpscheme(), host, fullurl);
|
||||||
html("'/>\n");
|
html("'/>\n");
|
||||||
|
html("<link rel='alternate' type='text/html' href='");
|
||||||
|
html_attrf("%s%s%s", cgit_httpscheme(), host, repourl);
|
||||||
|
html("'/>\n");
|
||||||
|
free(fullurl);
|
||||||
free(repourl);
|
free(repourl);
|
||||||
}
|
}
|
||||||
while ((commit = get_revision(&rev)) != NULL) {
|
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);
|
add_entry(commit, host);
|
||||||
free_commit_buffer(the_repository->parsed_objects, commit);
|
free_commit_buffer(the_repository->parsed_objects, commit);
|
||||||
free_commit_list(commit->parents);
|
free_commit_list(commit->parents);
|
||||||
|
Loading…
Reference in New Issue
Block a user