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 <hjemli@gmail.com>
Lars Hjemli hjemli@gmail.com
Fri, 31 Jul 2009 16:55:27 +0200
4 files changed,
25 insertions(+),
4 deletions(-)
M
cgit.c
→
cgit.c
@@ -100,6 +100,8 @@ else if (!strcmp(name, "max-repo-count"))
ctx.cfg.max_repo_count = atoi(value); else if (!strcmp(name, "max-commit-count")) ctx.cfg.max_commit_count = atoi(value); + else if (!strcmp(name, "source-filter")) + ctx.cfg.source_filter = new_filter(value, 1); else if (!strcmp(name, "summary-log")) ctx.cfg.summary_log = atoi(value); else if (!strcmp(name, "summary-branches"))
M
cgitrc.5.txt
→
cgitrc.5.txt
@@ -198,6 +198,14 @@ "tar.bz2" bzip-compressed tar-file
"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".
M
ui-tree.c
→
ui-tree.c
@@ -15,13 +15,23 @@ char *curr_rev;
char *match_path; int header = 0; -static void print_text_buffer(char *buf, unsigned long size) +static void print_text_buffer(const char *name, char *buf, unsigned long size) { unsigned long lineno, idx; const char *numberfmt = "<a class='no' id='n%1$d' name='n%1$d' href='#n%1$d'>%1$d</a>\n"; html("<table summary='blob content' class='blob'>\n"); + if (ctx.cfg.source_filter) { + html("<tr><td class='lines'><pre><code>"); + ctx.cfg.source_filter->argv[1] = xstrdup(name); + cgit_open_filter(ctx.cfg.source_filter); + write(STDOUT_FILENO, buf, size); + cgit_close_filter(ctx.cfg.source_filter); + html("</code></pre></td></tr></table>\n"); + return; + } + html("<tr><td class='linenumbers'><pre>"); idx = 0; lineno = 0;@@ -65,7 +75,7 @@ }
html("</table>\n"); } -static void print_object(const unsigned char *sha1, char *path) +static void print_object(const unsigned char *sha1, char *path, const char *basename) { enum object_type type; char *buf;@@ -93,7 +103,7 @@
if (buffer_is_binary(buf, size)) print_binary_buffer(buf, size); else - print_text_buffer(buf, size); + print_text_buffer(basename, buf, size); }@@ -213,7 +223,7 @@ state = 1;
ls_head(); return READ_TREE_RECURSIVE; } else { - print_object(sha1, buffer); + print_object(sha1, buffer, pathname); return 0; } }