Merge branch 'lh/readme'
Lars Hjemli hjemli@gmail.com
Sun, 19 Sep 2010 18:43:58 +0200
6 files changed,
43 insertions(+),
24 deletions(-)
M
cgit.c
→
cgit.c
@@ -72,11 +72,7 @@ repo->module_link= xstrdup(value);
else if (!strcmp(name, "section")) repo->section = xstrdup(value); else if (!strcmp(name, "readme") && value != NULL) { - char *colon; - if (*value == '/' || ((colon = strchr(value, ':')) != NULL && colon != value && *(colon + 1) != '\0')) - repo->readme = xstrdup(value); - else - repo->readme = xstrdup(fmt("%s/%s", repo->path, value)); + repo->readme = xstrdup(value); } else if (ctx.cfg.enable_filter_overrides) { if (!strcmp(name, "about-filter")) repo->about_filter = new_filter(value, 0);@@ -97,6 +93,8 @@ else if (ctx.repo && !strcmp(name, "repo.path"))
ctx.repo->path = trim_end(value, '/'); else if (ctx.repo && !prefixcmp(name, "repo.")) repo_config(ctx.repo, name + 5, value); + else if (!strcmp(name, "readme")) + ctx.cfg.readme = xstrdup(value); else if (!strcmp(name, "root-title")) ctx.cfg.root_title = xstrdup(value); else if (!strcmp(name, "root-desc"))
M
cgitrc.5.txt
→
cgitrc.5.txt
@@ -234,6 +234,10 @@ A list of subdirectories inside of scan-path, relative to it, that
should loaded as git repositories. This must be defined prior to scan-path. Default value: none. See also: scan-path. +readme:: + Text which will be used as default value for "repo.readme". Default + value: none. + remove-suffix:: If set to "1" and scan-path is enabled, if any repositories are found with a suffix of ".git", this suffix will be removed for the url and@@ -373,7 +377,7 @@ repo.readme::
A path (relative to <repo.path>) which specifies a file to include verbatim as the "About" page for this repo. You may also specify a git refspec by head or by hash by prepending the refspec followed by - a colon. For example, "master:docs/readme.mkd" Default value: none. + a colon. For example, "master:docs/readme.mkd" Default value: <readme>. repo.snapshots:: A mask of allowed snapshot-formats for this repo, restricted by the
M
scan-tree.c
→
scan-tree.c
@@ -110,9 +110,11 @@ p = fmt("%s/description", path);
if (!stat(p, &st)) readfile(p, &repo->desc, &size); - p = fmt("%s/README.html", path); - if (!stat(p, &st)) - repo->readme = "README.html"; + if (!repo->readme) { + p = fmt("%s/README.html", path); + if (!stat(p, &st)) + repo->readme = "README.html"; + } p = fmt("%s/cgitrc", path); if (!stat(p, &st)) {
M
ui-summary.c
→
ui-summary.c
@@ -70,33 +70,47 @@ }
void cgit_print_repo_readme(char *path) { - char *slash, *tmp, *colon, *ref = 0; + 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) { - slash = strchr(ctx.repo->readme, ':'); - if (!slash) + if (!colon) return; + slash = colon; } 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; - colon = strchr(tmp, ':'); - if (colon && strlen(colon) > 1) { - *colon = '\0'; - ref = tmp; - tmp = colon + 1; - while ((*tmp == '/' || *tmp == ':') && *tmp != '\0') - ++tmp; - if (!(*tmp)) - return; - } + + /* Print the calculated readme, either from the git repo or from the + * filesystem, while applying the about-filter. + */ html("<div id='summary'>"); if (ctx.repo->about_filter) cgit_open_filter(ctx.repo->about_filter);