From: Jason at zx2c4.com (Jason A. Donenfeld)
Subject: [PATCH 10/12] filter: add support for email filter
Date: Mon, 13 Jan 2014 05:11:17 +0100 [thread overview]
Message-ID: <1389586279-23724-11-git-send-email-Jason@zx2c4.com> (raw)
In-Reply-To: <1389586279-23724-1-git-send-email-Jason@zx2c4.com>
Signed-off-by: Jason A. Donenfeld <Jason at zx2c4.com>
---
cgit.c | 6 ++++++
cgit.h | 4 +++-
cgitrc.5.txt | 18 ++++++++++++++++++
filter.c | 1 +
shared.c | 1 +
ui-commit.c | 4 ++++
ui-log.c | 2 ++
ui-refs.c | 9 ++++++++-
ui-tag.c | 2 ++
9 files changed, 45 insertions(+), 2 deletions(-)
diff --git a/cgit.c b/cgit.c
index 725fd65..f3fe56b 100644
--- a/cgit.c
+++ b/cgit.c
@@ -89,6 +89,8 @@ static void repo_config(struct cgit_repo *repo, const char *name, const char *va
repo->commit_filter = cgit_new_filter(value, COMMIT);
else if (!strcmp(name, "source-filter"))
repo->source_filter = cgit_new_filter(value, SOURCE);
+ else if (!strcmp(name, "email-filter"))
+ repo->email_filter = cgit_new_filter(value, EMAIL);
}
}
@@ -188,6 +190,8 @@ static void config_cb(const char *name, const char *value)
ctx.cfg.about_filter = cgit_new_filter(value, ABOUT);
else if (!strcmp(name, "commit-filter"))
ctx.cfg.commit_filter = cgit_new_filter(value, COMMIT);
+ else if (!strcmp(name, "email-filter"))
+ ctx.cfg.email_filter = cgit_new_filter(value, EMAIL);
else if (!strcmp(name, "embedded"))
ctx.cfg.embedded = atoi(value);
else if (!strcmp(name, "max-atom-items"))
@@ -711,6 +715,8 @@ static void print_repo(FILE *f, struct cgit_repo *repo)
cgit_fprintf_filter(repo->commit_filter, f, "repo.commit-filter=");
if (repo->source_filter && repo->source_filter != ctx.cfg.source_filter)
cgit_fprintf_filter(repo->source_filter, f, "repo.source-filter=");
+ if (repo->email_filter && repo->email_filter != ctx.cfg.email_filter)
+ cgit_fprintf_filter(repo->email_filter, f, "repo.email-filter=");
if (repo->snapshots != ctx.cfg.snapshots) {
char *tmp = build_snapshot_setting(repo->snapshots);
fprintf(f, "repo.snapshots=%s\n", tmp ? tmp : "");
diff --git a/cgit.h b/cgit.h
index 519d2af..e200a06 100644
--- a/cgit.h
+++ b/cgit.h
@@ -53,7 +53,7 @@ typedef void (*filepair_fn)(struct diff_filepair *pair);
typedef void (*linediff_fn)(char *line, int len);
typedef enum {
- ABOUT, COMMIT, SOURCE
+ ABOUT, COMMIT, SOURCE, EMAIL
} filter_type;
struct cgit_filter {
@@ -99,6 +99,7 @@ struct cgit_repo {
struct cgit_filter *about_filter;
struct cgit_filter *commit_filter;
struct cgit_filter *source_filter;
+ struct cgit_filter *email_filter;
struct string_list submodules;
};
@@ -250,6 +251,7 @@ struct cgit_config {
struct cgit_filter *about_filter;
struct cgit_filter *commit_filter;
struct cgit_filter *source_filter;
+ struct cgit_filter *email_filter;
};
struct cgit_page {
diff --git a/cgitrc.5.txt b/cgitrc.5.txt
index d1e872f..f462349 100644
--- a/cgitrc.5.txt
+++ b/cgitrc.5.txt
@@ -117,6 +117,14 @@ css::
Url which specifies the css document to include in all cgit pages.
Default value: "/cgit.css".
+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".
+
embedded::
Flag which, when set to "1", will make cgit generate a html fragment
suitable for embedding in other html pages. Default value: none. See
@@ -457,6 +465,10 @@ repo.defbranch::
repo.desc::
The value to show as repository description. Default value: none.
+repo.email-filter::
+ Override the default email-filter. Default value: none. See also:
+ "enable-filter-overrides". See also: "FILTER API".
+
repo.enable-commit-graph::
A flag which can be used to disable the global setting
`enable-commit-graph'. Default value: none.
@@ -601,6 +613,12 @@ commit filter::
be filtered is available on standard input and the filtered text is
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.
+
source filter::
This filter is given a single parameter: the filename of the source
file to filter. The filter can use the filename to determine (for
diff --git a/filter.c b/filter.c
index 7db98b1..e895587 100644
--- a/filter.c
+++ b/filter.c
@@ -368,6 +368,7 @@ struct cgit_filter *cgit_new_filter(const char *cmd, filter_type filtertype)
colon = NULL;
switch (filtertype) {
+ case EMAIL:
case SOURCE:
case ABOUT:
argument_count = 1;
diff --git a/shared.c b/shared.c
index 4626148..7e88bbd 100644
--- a/shared.c
+++ b/shared.c
@@ -71,6 +71,7 @@ struct cgit_repo *cgit_add_repo(const char *url)
ret->about_filter = ctx.cfg.about_filter;
ret->commit_filter = ctx.cfg.commit_filter;
ret->source_filter = ctx.cfg.source_filter;
+ ret->email_filter = ctx.cfg.email_filter;
ret->clone_url = ctx.cfg.clone_url;
ret->submodules.strdup_strings = 1;
return ret;
diff --git a/ui-commit.c b/ui-commit.c
index 5ac79c0..bd14ef0 100644
--- a/ui-commit.c
+++ b/ui-commit.c
@@ -44,20 +44,24 @@ 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);
html_txt(info->author);
if (!ctx.cfg.noplainemail) {
html(" ");
html_txt(info->author_email);
}
+ cgit_close_filter(ctx.repo->email_filter);
html("</td><td class='right'>");
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);
html_txt(info->committer);
if (!ctx.cfg.noplainemail) {
html(" ");
html_txt(info->committer_email);
}
+ cgit_close_filter(ctx.repo->email_filter);
html("</td><td class='right'>");
cgit_print_date(info->committer_date, FMT_LONGDATE, ctx.cfg.local_time);
html("</td></tr>\n");
diff --git a/ui-log.c b/ui-log.c
index 584336a..957d887 100644
--- a/ui-log.c
+++ b/ui-log.c
@@ -168,7 +168,9 @@ 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);
html_txt(info->author);
+ cgit_close_filter(ctx.repo->email_filter);
if (revs->graph) {
html("</td><td>");
diff --git a/ui-refs.c b/ui-refs.c
index c97b0c6..d125459 100644
--- a/ui-refs.c
+++ b/ui-refs.c
@@ -77,7 +77,9 @@ 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);
html_txt(info->author);
+ cgit_close_filter(ctx.repo->email_filter);
html("</td><td colspan='2'>");
cgit_print_age(info->commit->date, -1, NULL);
} else {
@@ -154,10 +156,15 @@ static int print_tag(struct refinfo *ref)
cgit_object_link(obj);
html("</td><td>");
if (info) {
- if (info->tagger)
+ if (info->tagger) {
+ cgit_open_filter(ctx.repo->email_filter, info->tagger_email);
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);
html_txt(ref->commit->author);
+ cgit_close_filter(ctx.repo->email_filter);
}
html("</td><td colspan='2'>");
if (info) {
diff --git a/ui-tag.c b/ui-tag.c
index ec9c757..adbdb90 100644
--- a/ui-tag.c
+++ b/ui-tag.c
@@ -77,11 +77,13 @@ 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);
html_txt(info->tagger);
if (info->tagger_email && !ctx.cfg.noplainemail) {
html(" ");
html_txt(info->tagger_email);
}
+ cgit_close_filter(ctx.repo->email_filter);
html("</td></tr>\n");
}
html("<tr><td>tagged object</td><td class='sha1'>");
--
1.8.5.2
next prev parent reply other threads:[~2014-01-13 4:11 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-01-13 4:11 [PATCH 00/12] filter framework and lua integration: complete Jason
2014-01-13 4:11 ` [PATCH 01/12] filter: add fprintf_filter function Jason
2014-01-13 4:11 ` [PATCH 02/12] filter: add interface layer Jason
2014-01-13 4:11 ` [PATCH 03/12] filter: introduce "filter type" prefix Jason
2014-01-13 4:11 ` [PATCH 04/12] filter: allow for cleanup hook for filter types Jason
2014-01-13 4:11 ` [PATCH 05/12] filter: basic write hooking infrastructure Jason
2014-01-13 8:19 ` cgit
2014-01-13 4:11 ` [PATCH 06/12] filter: add preliminary lua support Jason
2014-01-13 8:31 ` cgit
2014-01-13 8:53 ` john
2014-01-13 8:39 ` cgit
2014-01-13 8:55 ` john
2014-01-13 9:41 ` bluewind
2014-01-13 4:11 ` [PATCH 07/12] filter: document lua filter type Jason
2014-01-13 4:11 ` [PATCH 08/12] filter: lua error reporting Jason
2014-01-13 4:11 ` [PATCH 09/12] filter: return on null filter from open and close Jason
2014-01-13 4:11 ` Jason [this message]
2014-01-13 4:11 ` [PATCH 11/12] filter: add simple gravatar email filter Jason
2014-01-13 4:11 ` [PATCH 12/12] filter: add gravatar lua script Jason
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1389586279-23724-11-git-send-email-Jason@zx2c4.com \
--to=cgit@lists.zx2c4.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).