filter: add page source to email filter

Since the email filter is called from lots of places, the script might
benefit from knowing the origin. That way it can modify its contents
and/or size depending.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Bu işleme şunda yer alıyor:
Jason A. Donenfeld 2014-01-13 16:24:40 +01:00
ebeveyn e942a1622b
işleme 786609bd36
8 değiştirilmiş dosya ile 21 ekleme ve 15 silme

Dosyayı Görüntüle

@ -121,9 +121,9 @@ email-filter::
Specifies a command which will be invoked to format names and email
address of committers, authors, and taggers, as represented in various
places throughout the cgit interface. This command will receive an
email address as its only command line argument, and the text to
format on STDIN. It is to write the formatted text back out onto
STDOUT. Default value: none. See also: "FILTER API".
email address and an origin page string as its command line arguments,
and the text to format on STDIN. It is to write the formatted text back
out onto STDOUT. Default value: none. See also: "FILTER API".
embedded::
Flag which, when set to "1", will make cgit generate a html fragment
@ -620,10 +620,11 @@ commit filter::
expected on standard output.
email filter::
This filter is given a single parameter: the email address of the
relevent user. The filter will then receive the text string to format
on standard input and is expected to write to standard output the
formatted text to be included in the page.
This filter is given two parameters: the email address of the relevent
author and a string indicating the originating page. The filter will
then receive the text string to format on standard input and is
expected to write to standard output the formatted text to be included
in the page.
source filter::
This filter is given a single parameter: the filename of the source

Dosyayı Görüntüle

@ -406,6 +406,9 @@ struct cgit_filter *cgit_new_filter(const char *cmd, filter_type filtertype)
switch (filtertype) {
case EMAIL:
argument_count = 2;
break;
case SOURCE:
case ABOUT:
argument_count = 1;

Dosyayı Görüntüle

@ -9,7 +9,7 @@
require("crypto")
function filter_open(email)
function filter_open(email, page)
buffer = ""
md5 = crypto.digest("md5", email:sub(2, -2):lower())
end

Dosyayı Görüntüle

@ -27,6 +27,8 @@ if email[0] == '<':
if email[-1] == '>':
email = email[0:-1]
page = sys.argv[2]
md5 = hashlib.md5(email.encode()).hexdigest()
text = sys.stdin.read().strip()

Dosyayı Görüntüle

@ -44,7 +44,7 @@ void cgit_print_commit(char *hex, const char *prefix)
cgit_print_diff_ctrls();
html("<table summary='commit info' class='commit-info'>\n");
html("<tr><th>author</th><td>");
cgit_open_filter(ctx.repo->email_filter, info->author_email);
cgit_open_filter(ctx.repo->email_filter, info->author_email, "commit");
html_txt(info->author);
if (!ctx.cfg.noplainemail) {
html(" ");
@ -55,7 +55,7 @@ void cgit_print_commit(char *hex, const char *prefix)
cgit_print_date(info->author_date, FMT_LONGDATE, ctx.cfg.local_time);
html("</td></tr>\n");
html("<tr><th>committer</th><td>");
cgit_open_filter(ctx.repo->email_filter, info->committer_email);
cgit_open_filter(ctx.repo->email_filter, info->committer_email, "commit");
html_txt(info->committer);
if (!ctx.cfg.noplainemail) {
html(" ");

Dosyayı Görüntüle

@ -168,7 +168,7 @@ static void print_commit(struct commit *commit, struct rev_info *revs)
sha1_to_hex(commit->object.sha1), ctx.qry.vpath, 0);
show_commit_decorations(commit);
html("</td><td>");
cgit_open_filter(ctx.repo->email_filter, info->author_email);
cgit_open_filter(ctx.repo->email_filter, info->author_email, "log");
html_txt(info->author);
cgit_close_filter(ctx.repo->email_filter);

Dosyayı Görüntüle

@ -77,7 +77,7 @@ static int print_branch(struct refinfo *ref)
if (ref->object->type == OBJ_COMMIT) {
cgit_commit_link(info->subject, NULL, NULL, name, NULL, NULL, 0);
html("</td><td>");
cgit_open_filter(ctx.repo->email_filter, info->author_email);
cgit_open_filter(ctx.repo->email_filter, info->author_email, "refs");
html_txt(info->author);
cgit_close_filter(ctx.repo->email_filter);
html("</td><td colspan='2'>");
@ -157,12 +157,12 @@ static int print_tag(struct refinfo *ref)
html("</td><td>");
if (info) {
if (info->tagger) {
cgit_open_filter(ctx.repo->email_filter, info->tagger_email);
cgit_open_filter(ctx.repo->email_filter, info->tagger_email, "refs");
html_txt(info->tagger);
cgit_close_filter(ctx.repo->email_filter);
}
} else if (ref->object->type == OBJ_COMMIT) {
cgit_open_filter(ctx.repo->email_filter, ref->commit->author_email);
cgit_open_filter(ctx.repo->email_filter, ref->commit->author_email, "refs");
html_txt(ref->commit->author);
cgit_close_filter(ctx.repo->email_filter);
}

Dosyayı Görüntüle

@ -77,7 +77,7 @@ void cgit_print_tag(char *revname)
}
if (info->tagger) {
html("<tr><td>tagged by</td><td>");
cgit_open_filter(ctx.repo->email_filter, info->tagger_email);
cgit_open_filter(ctx.repo->email_filter, info->tagger_email, "tag");
html_txt(info->tagger);
if (info->tagger_email && !ctx.cfg.noplainemail) {
html(" ");