-rw-r--r-- | ui-summary.c | 42 |
1 files changed, 37 insertions, 5 deletions
diff --git a/ui-summary.c b/ui-summary.c index a2c018e..b203bcc 100644 --- a/ui-summary.c +++ b/ui-summary.c @@ -3,2 +3,3 @@ * Copyright (C) 2006 Lars Hjemli + * Copyright (C) 2010 Jason A. Donenfeld <Jason@zx2c4.com> * @@ -12,2 +13,3 @@ #include "ui-refs.h" +#include "ui-blob.h" @@ -70,11 +72,34 @@ void cgit_print_repo_readme(char *path) { - char *slash, *tmp; + char *slash, *tmp, *colon, *ref; - if (!ctx.repo->readme) + if (!ctx.repo->readme || !(*ctx.repo->readme)) return; + ref = NULL; + + /* Check if the readme is tracked in the git repo. */ + colon = strchr(ctx.repo->readme, ':'); + if (colon && strlen(colon) > 1) { + *colon = '\0'; + ref = ctx.repo->readme; + ctx.repo->readme = colon + 1; + if (!(*ctx.repo->readme)) + return; + } + + /* Prepend repo path to relative readme path unless tracked. */ + if (!ref && *ctx.repo->readme != '/') + ctx.repo->readme = xstrdup(fmt("%s/%s", ctx.repo->path, + ctx.repo->readme)); + + /* If a subpath is specified for the about page, make it relative + * to the directory containing the configured readme. + */ if (path) { slash = strrchr(ctx.repo->readme, '/'); - if (!slash) - return; + if (!slash) { + if (!colon) + return; + slash = colon; + } tmp = xmalloc(slash - ctx.repo->readme + 1 + strlen(path) + 1); @@ -84,2 +109,6 @@ void cgit_print_repo_readme(char *path) tmp = ctx.repo->readme; + + /* Print the calculated readme, either from the git repo or from the + * filesystem, while applying the about-filter. + */ html("<div id='summary'>"); @@ -87,3 +116,6 @@ void cgit_print_repo_readme(char *path) cgit_open_filter(ctx.repo->about_filter); - html_include(tmp); + if (ref) + cgit_print_file(tmp, ref); + else + html_include(tmp); if (ctx.repo->about_filter) |