diff options
Diffstat (limited to '')
| -rw-r--r-- | cgit.c | 6 | ||||
| -rw-r--r-- | cgit.h | 4 | ||||
| -rw-r--r-- | cgitrc.5.txt | 18 | ||||
| -rw-r--r-- | filter.c | 3 | ||||
| -rw-r--r-- | shared.c | 1 | ||||
| -rw-r--r-- | ui-commit.c | 4 | ||||
| -rw-r--r-- | ui-log.c | 2 | ||||
| -rw-r--r-- | ui-refs.c | 9 | ||||
| -rw-r--r-- | ui-tag.c | 2 | 
9 files changed, 47 insertions, 2 deletions
| @@ -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 : ""); @@ -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 78f33c8..b7dc5a4 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. @@ -607,6 +619,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 @@ -37,10 +37,12 @@ void cgit_cleanup_filters(void)  	reap_filter(ctx.cfg.about_filter);  	reap_filter(ctx.cfg.commit_filter);  	reap_filter(ctx.cfg.source_filter); +	reap_filter(ctx.cfg.email_filter);  	for (i = 0; i < cgit_repolist.count; ++i) {  		reap_filter(cgit_repolist.repos[i].about_filter);  		reap_filter(cgit_repolist.repos[i].commit_filter);  		reap_filter(cgit_repolist.repos[i].source_filter); +		reap_filter(cgit_repolist.repos[i].email_filter);  	}  } @@ -403,6 +405,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; @@ -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"); @@ -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>"); @@ -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) { @@ -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'>"); | 
