all repos — cgit @ 9240a828d13fa8f6a9e379b94b2061ca83e6199c

a hyperfast web frontend for git written in c

new_filter: determine extra_args from filter type

Currently the number of extra arguments is linked hard to the type of
the filter. This is also logical since it would be confusing to have
a different number of arguments for the same type of filter depending
on the context under which the filter is run (unless ofcourse one the
parameters would make the context clear, which is currently not the
case).

Signed-off-by: Ferry Huberts <ferry.huberts@pelagic.nl>
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
Ferry Huberts ferry.huberts@pelagic.nl
Wed, 23 Mar 2011 11:57:41 +0100
commit

9240a828d13fa8f6a9e379b94b2061ca83e6199c

parent

cc59ee502646dc4e3d0f8bbe29b24c7fa3f0d2dd

2 files changed, 24 insertions(+), 7 deletions(-)

jump to
M cgit.ccgit.c

@@ -26,13 +26,26 @@ item = string_list_insert(&ctx.cfg.mimetypes, xstrdup(name));

item->util = xstrdup(value); } -struct cgit_filter *new_filter(const char *cmd, int extra_args) +struct cgit_filter *new_filter(const char *cmd, filter_type filtertype) { struct cgit_filter *f; + int extra_args; if (!cmd || !cmd[0]) return NULL; + switch (filtertype) { + case SOURCE: + extra_args = 1; + break; + + case ABOUT: + case COMMIT: + default: + extra_args = 0; + break; + } + f = xmalloc(sizeof(struct cgit_filter)); f->cmd = xstrdup(cmd); f->argv = xmalloc((2 + extra_args) * sizeof(char *));

@@ -81,11 +94,11 @@ else if (!strcmp(name, "logo-link") && value != NULL)

repo->logo_link = xstrdup(value); else if (ctx.cfg.enable_filter_overrides) { if (!strcmp(name, "about-filter")) - repo->about_filter = new_filter(value, 0); + repo->about_filter = new_filter(value, ABOUT); else if (!strcmp(name, "commit-filter")) - repo->commit_filter = new_filter(value, 0); + repo->commit_filter = new_filter(value, COMMIT); else if (!strcmp(name, "source-filter")) - repo->source_filter = new_filter(value, 1); + repo->source_filter = new_filter(value, SOURCE); } }

@@ -176,9 +189,9 @@ 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, "about-filter")) - ctx.cfg.about_filter = new_filter(value, 0); + ctx.cfg.about_filter = new_filter(value, ABOUT); else if (!strcmp(name, "commit-filter")) - ctx.cfg.commit_filter = new_filter(value, 0); + ctx.cfg.commit_filter = new_filter(value, COMMIT); else if (!strcmp(name, "embedded")) ctx.cfg.embedded = atoi(value); else if (!strcmp(name, "max-atom-items"))

@@ -208,7 +221,7 @@ ctx.cfg.scan_hidden_path = atoi(value);

else if (!strcmp(name, "section-from-path")) ctx.cfg.section_from_path = atoi(value); else if (!strcmp(name, "source-filter")) - ctx.cfg.source_filter = new_filter(value, 1); + ctx.cfg.source_filter = new_filter(value, SOURCE); else if (!strcmp(name, "summary-log")) ctx.cfg.summary_log = atoi(value); else if (!strcmp(name, "summary-branches"))
M cgit.hcgit.h

@@ -51,6 +51,10 @@ 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); +typedef enum { + ABOUT, COMMIT, SOURCE +} filter_type; + struct cgit_filter { char *cmd; char **argv;