From 46b7abed99e957008c01c02cf612aa526ba92f04 Mon Sep 17 00:00:00 2001 From: Lars Hjemli Date: Fri, 31 Jul 2009 16:55:27 +0200 Subject: ui-tree: add support for source-filter option This new option is used to specify an external command which will be executed when displaying blob content in the tree view. Blob content will be written to STDIN of the filter and STDOUT from the filter will be included verbatim in the html output from cgit. The file name of the blob will be passed as the only argument to the filter command. Signed-off-by: Lars Hjemli --- cgitrc.5.txt | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'cgitrc.5.txt') diff --git a/cgitrc.5.txt b/cgitrc.5.txt index a207fe0..d420ad4 100644 --- a/cgitrc.5.txt +++ b/cgitrc.5.txt @@ -198,6 +198,14 @@ snapshots:: "zip" zip-file Default value: none. +source-filter:: + Specifies a command which will be invoked to format plaintext blobs + in the tree view. The command will get the blob content on its STDIN + and the name of the blob as its only command line argument. The STDOUT + from the command will be included verbatim as the blob contents, i.e. + this can be used to implement e.g. syntax highlighting. Default value: + none. + summary-branches:: Specifies the number of branches to display in the repository "summary" view. Default value: "10". -- cgit v1.2.3-59-g8ed1b From f35db1cd2b75aac6952aa07713e44ca01fd89727 Mon Sep 17 00:00:00 2001 From: Lars Hjemli Date: Fri, 31 Jul 2009 17:42:57 +0200 Subject: 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|\1|g' Signed-off-by: Lars Hjemli --- cgit.c | 2 ++ cgit.h | 1 + cgitrc.5.txt | 6 ++++++ ui-commit.c | 8 ++++++++ 4 files changed, 17 insertions(+) (limited to 'cgitrc.5.txt') diff --git a/cgit.c b/cgit.c index eb7b45d..2cda554 100644 --- a/cgit.c +++ b/cgit.c @@ -90,6 +90,8 @@ void config_cb(const char *name, const char *value) 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 f9cf0df..438301d 100644 --- a/cgit.h +++ b/cgit.h @@ -183,6 +183,7 @@ struct cgit_config { 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 d420ad4..2efd6aa 100644 --- a/cgitrc.5.txt +++ b/cgitrc.5.txt @@ -55,6 +55,12 @@ clone-prefix:: 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 41ce70e..ee0e139 100644 --- a/ui-commit.c +++ b/ui-commit.c @@ -89,11 +89,19 @@ void cgit_print_commit(char *hex) } html("\n"); html("
"); + 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("
"); html("
"); + 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("
"); if (parents < 3) { if (parents) -- cgit v1.2.3-59-g8ed1b From e976df27952ca1e450c1c3d420532ac9f5e3036b Mon Sep 17 00:00:00 2001 From: Lars Hjemli Date: Sun, 9 Aug 2009 13:22:00 +0200 Subject: Add support for repo.commit-filter and repo.source-filter These options can be used to override the default commit- and source- filter settings per repository. Signed-off-by: Lars Hjemli --- cgit.c | 4 ++++ cgit.h | 20 +++++++++++--------- cgitrc.5.txt | 6 ++++++ shared.c | 2 ++ ui-commit.c | 16 ++++++++-------- ui-tree.c | 8 ++++---- 6 files changed, 35 insertions(+), 21 deletions(-) (limited to 'cgitrc.5.txt') diff --git a/cgit.c b/cgit.c index 2cda554..fd341b8 100644 --- a/cgit.c +++ b/cgit.c @@ -146,6 +146,10 @@ void config_cb(const char *name, const char *value) ctx.repo->max_stats = cgit_find_stats_period(value, NULL); else if (ctx.repo && !strcmp(name, "repo.module-link")) ctx.repo->module_link= xstrdup(value); + else if (ctx.repo && !strcmp(name, "repo.commit-filter")) + ctx.repo->commit_filter = new_filter(value, 0); + else if (ctx.repo && !strcmp(name, "repo.source-filter")) + ctx.repo->source_filter = new_filter(value, 1); else if (ctx.repo && !strcmp(name, "repo.readme") && value != NULL) { if (*value == '/') ctx.repo->readme = xstrdup(value); diff --git a/cgit.h b/cgit.h index 438301d..f10ba05 100644 --- a/cgit.h +++ b/cgit.h @@ -48,6 +48,15 @@ typedef void (*configfn)(const char *name, const char *value); typedef void (*filepair_fn)(struct diff_filepair *pair); typedef void (*linediff_fn)(char *line, int len); +struct cgit_filter { + char *cmd; + char **argv; + int old_stdout; + int pipe_fh[2]; + int pid; + int exitstatus; +}; + struct cgit_repo { char *url; char *name; @@ -64,6 +73,8 @@ struct cgit_repo { int enable_log_linecount; int max_stats; time_t mtime; + struct cgit_filter *commit_filter; + struct cgit_filter *source_filter; }; struct cgit_repolist { @@ -129,15 +140,6 @@ struct cgit_query { int showmsg; }; -struct cgit_filter { - char *cmd; - char **argv; - int old_stdout; - int pipe_fh[2]; - int pid; - int exitstatus; -}; - struct cgit_config { char *agefile; char *cache_root; diff --git a/cgitrc.5.txt b/cgitrc.5.txt index 2efd6aa..ffb3e0f 100644 --- a/cgitrc.5.txt +++ b/cgitrc.5.txt @@ -238,6 +238,9 @@ repo.clone-url:: A list of space-separated urls which can be used to clone this repo. Default value: none. +repo.commit-filter:: + Override the default commit-filter. Default value: . + repo.defbranch:: The name of the default branch for this repository. If no such branch exists in the repository, the first branch name (when sorted) is used @@ -278,6 +281,9 @@ repo.snapshots:: A mask of allowed snapshot-formats for this repo, restricted by the "snapshots" global setting. Default value: . +repo.source-filter:: + Override the default source-filter. Default value: . + repo.url:: The relative url used to access the repository. This must be the first setting specified for each repo. Default value: none. diff --git a/shared.c b/shared.c index 288cfa2..783604b 100644 --- a/shared.c +++ b/shared.c @@ -62,6 +62,8 @@ struct cgit_repo *cgit_add_repo(const char *url) ret->module_link = ctx.cfg.module_link; ret->readme = NULL; ret->mtime = -1; + ret->commit_filter = ctx.cfg.commit_filter; + ret->source_filter = ctx.cfg.source_filter; return ret; } diff --git a/ui-commit.c b/ui-commit.c index ee0e139..5815b58 100644 --- a/ui-commit.c +++ b/ui-commit.c @@ -89,19 +89,19 @@ void cgit_print_commit(char *hex) } html("\n"); html("
"); - if (ctx.cfg.commit_filter) - cgit_open_filter(ctx.cfg.commit_filter); + if (ctx.repo->commit_filter) + cgit_open_filter(ctx.repo->commit_filter); html_txt(info->subject); - if (ctx.cfg.commit_filter) - cgit_close_filter(ctx.cfg.commit_filter); + if (ctx.repo->commit_filter) + cgit_close_filter(ctx.repo->commit_filter); show_commit_decorations(commit); html("
"); html("
"); - if (ctx.cfg.commit_filter) - cgit_open_filter(ctx.cfg.commit_filter); + if (ctx.repo->commit_filter) + cgit_open_filter(ctx.repo->commit_filter); html_txt(info->msg); - if (ctx.cfg.commit_filter) - cgit_close_filter(ctx.cfg.commit_filter); + if (ctx.repo->commit_filter) + cgit_close_filter(ctx.repo->commit_filter); html("
"); if (parents < 3) { if (parents) diff --git a/ui-tree.c b/ui-tree.c index 816e121..caf6a9e 100644 --- a/ui-tree.c +++ b/ui-tree.c @@ -22,12 +22,12 @@ static void print_text_buffer(const char *name, char *buf, unsigned long size) "%1$d\n"; html("\n"); - if (ctx.cfg.source_filter) { + if (ctx.repo->source_filter) { html("
");
-		ctx.cfg.source_filter->argv[1] = xstrdup(name);
-		cgit_open_filter(ctx.cfg.source_filter);
+		ctx.repo->source_filter->argv[1] = xstrdup(name);
+		cgit_open_filter(ctx.repo->source_filter);
 		write(STDOUT_FILENO, buf, size);
-		cgit_close_filter(ctx.cfg.source_filter);
+		cgit_close_filter(ctx.repo->source_filter);
 		html("
\n"); return; } -- cgit v1.2.3-59-g8ed1b