cgit

commit f35db1cd2b75aac6952aa07713e44ca01fd89727

Author: Lars Hjemli <hjemli@gmail.com>

ui-commit: add support for 'commit-filter' option

This new option specifies a filter which is executed on the commit
message, i.e. the commit message is written to the filters STDIN and
the filters STDOUT is included verbatim as the commit message.

This can be used to implement commit linking by creating a simple
shell script in e.g. /usr/bin/cgit-commit-filter.sh like this:

#/bin/sh
sed -re 's|\b([0-9a-fA-F]{6,40})\b|<a href="./?id=\1">\1</a>|g'

Signed-off-by: Lars Hjemli <hjemli@gmail.com>

 cgit.c | 2 ++
 cgit.h | 1 +
 cgitrc.5.txt | 6 ++++++
 ui-commit.c | 8 ++++++++


diff --git a/cgit.c b/cgit.c
index eb7b45d5e77f897276a3765b09124723e245439b..2cda554ad1efe9b72a8c4063465f55734569e938 100644
--- a/cgit.c
+++ b/cgit.c
@@ -90,6 +90,8 @@ 	else if (!strcmp(name, "cache-static-ttl"))
 		ctx.cfg.cache_static_ttl = atoi(value);
 	else if (!strcmp(name, "cache-dynamic-ttl"))
 		ctx.cfg.cache_dynamic_ttl = atoi(value);
+	else if (!strcmp(name, "commit-filter"))
+		ctx.cfg.commit_filter = new_filter(value, 0);
 	else if (!strcmp(name, "embedded"))
 		ctx.cfg.embedded = atoi(value);
 	else if (!strcmp(name, "max-message-length"))




diff --git a/cgit.h b/cgit.h
index f9cf0df76df342b53f7c2bd724dccf0f16265a3d..438301d54b6ccf130b14e5bbe832a04bbaf7a910 100644
--- a/cgit.h
+++ b/cgit.h
@@ -183,6 +183,7 @@ 	int snapshots;
 	int summary_branches;
 	int summary_log;
 	int summary_tags;
+	struct cgit_filter *commit_filter;
 	struct cgit_filter *source_filter;
 };
 




diff --git a/cgitrc.5.txt b/cgitrc.5.txt
index d420ad4e474b4710982170794afa170566272aab..2efd6aa639ccfadf52b83f9427fecc43b94ece36 100644
--- a/cgitrc.5.txt
+++ b/cgitrc.5.txt
@@ -55,6 +55,12 @@ 	repository url, generates valid clone urls for the repository. This
 	setting is only used if `repo.clone-url` is unspecified. Default value:
 	none.
 
+commit-filter::
+	Specifies a command which will be invoked to format commit messages.
+	The command will get the message on its STDIN, and the STDOUT from the
+	command will be included verbatim as the commit message, i.e. this can
+	be used to implement bugtracker integration. Default value: none.
+
 css::
 	Url which specifies the css document to include in all cgit pages.
 	Default value: "/cgit.css".




diff --git a/ui-commit.c b/ui-commit.c
index 41ce70e2a9964839b5bf8f03ba6698b7d1ac69d1..ee0e139e3d9d554210054c7f4e8dedecd38ffc6c 100644
--- a/ui-commit.c
+++ b/ui-commit.c
@@ -89,11 +89,19 @@ 		html("");
 	}
 	html("</table>\n");
 	html("<div class='commit-subject'>");
+	if (ctx.cfg.commit_filter)
+		cgit_open_filter(ctx.cfg.commit_filter);
 	html_txt(info->subject);
+	if (ctx.cfg.commit_filter)
+		cgit_close_filter(ctx.cfg.commit_filter);
 	show_commit_decorations(commit);
 	html("</div>");
 	html("<div class='commit-msg'>");
+	if (ctx.cfg.commit_filter)
+		cgit_open_filter(ctx.cfg.commit_filter);
 	html_txt(info->msg);
+	if (ctx.cfg.commit_filter)
+		cgit_close_filter(ctx.cfg.commit_filter);
 	html("</div>");
 	if (parents < 3) {
 		if (parents)