From e1782fff8a78b7f265432603351281ad2988bb40 Mon Sep 17 00:00:00 2001 From: Lars Hjemli Date: Sun, 9 Aug 2009 11:50:34 +0200 Subject: ui-summary: enable arbitrary paths below repo.readme This change makes it possible to include any number of pages below the 'about' tab for a repository. The path is assumed to be located in the same directory as the 'repo.readme' file. Signed-off-by: Lars Hjemli --- cmd.c | 2 +- ui-summary.c | 24 ++++++++++++++++++------ ui-summary.h | 2 +- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/cmd.c b/cmd.c index cf97da7..766f903 100644 --- a/cmd.c +++ b/cmd.c @@ -39,7 +39,7 @@ static void atom_fn(struct cgit_context *ctx) static void about_fn(struct cgit_context *ctx) { if (ctx->repo) - cgit_print_repo_readme(); + cgit_print_repo_readme(ctx->qry.path); else cgit_print_site_readme(); } diff --git a/ui-summary.c b/ui-summary.c index ede4a62..f2a9b46 100644 --- a/ui-summary.c +++ b/ui-summary.c @@ -66,11 +66,23 @@ void cgit_print_summary() html(""); } -void cgit_print_repo_readme() +void cgit_print_repo_readme(char *path) { - if (ctx.repo->readme) { - html("
"); - html_include(ctx.repo->readme); - html("
"); - } + char *slash, *tmp; + + if (!ctx.repo->readme) + return; + + if (path) { + slash = strrchr(ctx.repo->readme, '/'); + if (!slash) + return; + tmp = xmalloc(slash - ctx.repo->readme + 1 + strlen(path) + 1); + strncpy(tmp, ctx.repo->readme, slash - ctx.repo->readme + 1); + strcpy(tmp + (slash - ctx.repo->readme + 1), path); + } else + tmp = ctx.repo->readme; + html("
"); + html_include(tmp); + html("
"); } diff --git a/ui-summary.h b/ui-summary.h index 3e13039..c01f560 100644 --- a/ui-summary.h +++ b/ui-summary.h @@ -2,6 +2,6 @@ #define UI_SUMMARY_H extern void cgit_print_summary(); -extern void cgit_print_repo_readme(); +extern void cgit_print_repo_readme(char *path); #endif /* UI_SUMMARY_H */ -- cgit v1.2.3-59-g8ed1b From 537c05f138d59c1eb3ac8e2d8b0dca3a38aa5dd4 Mon Sep 17 00:00:00 2001 From: Lars Hjemli Date: Sun, 9 Aug 2009 13:27:21 +0200 Subject: Add 'about-filter' and 'repo.about-filter' options These options can be used to execute a filter command on each about-page, both top-level and for each repository (repo.about-filter can be used to override the current about-filter). Signed-off-by: Lars Hjemli --- cgit.c | 4 ++++ cgit.h | 2 ++ cgitrc.5.txt | 10 ++++++++++ shared.c | 1 + ui-repolist.c | 9 +++++++-- ui-summary.c | 4 ++++ 6 files changed, 28 insertions(+), 2 deletions(-) diff --git a/cgit.c b/cgit.c index b3a98c1..cb1149d 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, "about-filter")) + ctx.cfg.about_filter = new_filter(value, 0); else if (!strcmp(name, "commit-filter")) ctx.cfg.commit_filter = new_filter(value, 0); else if (!strcmp(name, "embedded")) @@ -146,6 +148,8 @@ 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.about-filter")) + ctx.repo->about_filter = new_filter(value, 0); 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")) diff --git a/cgit.h b/cgit.h index f10ba05..b8f4850 100644 --- a/cgit.h +++ b/cgit.h @@ -73,6 +73,7 @@ struct cgit_repo { int enable_log_linecount; int max_stats; time_t mtime; + struct cgit_filter *about_filter; struct cgit_filter *commit_filter; struct cgit_filter *source_filter; }; @@ -185,6 +186,7 @@ struct cgit_config { int summary_branches; int summary_log; int summary_tags; + struct cgit_filter *about_filter; struct cgit_filter *commit_filter; struct cgit_filter *source_filter; }; diff --git a/cgitrc.5.txt b/cgitrc.5.txt index ffb3e0f..d8e4b97 100644 --- a/cgitrc.5.txt +++ b/cgitrc.5.txt @@ -16,6 +16,13 @@ lines, and lines starting with '#', are ignored. GLOBAL SETTINGS --------------- +about-filter:: + Specifies a command which will be invoked to format the content of + about pages (both top-level and for each repository). The command will + get the content of the about-file on its STDIN, and the STDOUT from the + command will be included verbatim on the about page. Default value: + none. + agefile:: Specifies a path, relative to each repository path, which can be used to specify the date and time of the youngest commit in the repository. @@ -234,6 +241,9 @@ virtual-root:: REPOSITORY SETTINGS ------------------- +repo.about-filter:: + Override the default about-filter. Default value: . + repo.clone-url:: A list of space-separated urls which can be used to clone this repo. Default value: none. diff --git a/shared.c b/shared.c index 783604b..911a55a 100644 --- a/shared.c +++ b/shared.c @@ -62,6 +62,7 @@ struct cgit_repo *cgit_add_repo(const char *url) ret->module_link = ctx.cfg.module_link; ret->readme = NULL; ret->mtime = -1; + ret->about_filter = ctx.cfg.about_filter; ret->commit_filter = ctx.cfg.commit_filter; ret->source_filter = ctx.cfg.source_filter; return ret; diff --git a/ui-repolist.c b/ui-repolist.c index 2c13d50..25f076f 100644 --- a/ui-repolist.c +++ b/ui-repolist.c @@ -273,6 +273,11 @@ void cgit_print_repolist() void cgit_print_site_readme() { - if (ctx.cfg.root_readme) - html_include(ctx.cfg.root_readme); + if (!ctx.cfg.root_readme) + return; + if (ctx.cfg.about_filter) + cgit_open_filter(ctx.cfg.about_filter); + html_include(ctx.cfg.root_readme); + if (ctx.cfg.about_filter) + cgit_close_filter(ctx.cfg.about_filter); } diff --git a/ui-summary.c b/ui-summary.c index f2a9b46..a2c018e 100644 --- a/ui-summary.c +++ b/ui-summary.c @@ -83,6 +83,10 @@ void cgit_print_repo_readme(char *path) } else tmp = ctx.repo->readme; html("
"); + if (ctx.repo->about_filter) + cgit_open_filter(ctx.repo->about_filter); html_include(tmp); + if (ctx.repo->about_filter) + cgit_close_filter(ctx.repo->about_filter); html("
"); } -- cgit v1.2.3-59-g8ed1b