summaryrefslogtreecommitdiffabout
path: root/scan-tree.c
Side-by-side diff
Diffstat (limited to 'scan-tree.c') (more/less context) (ignore whitespace changes)
-rw-r--r--scan-tree.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/scan-tree.c b/scan-tree.c
index 6ba9193..b5b50f3 100644
--- a/scan-tree.c
+++ b/scan-tree.c
@@ -89,67 +89,69 @@ static void add_repo(const char *base, const char *path, repo_config_fn fn)
git_config_from_file(git_owner_config, fmt("%s/config", path), NULL);
if (base == path)
rel = xstrdup(fmt("%s", path));
else
rel = xstrdup(fmt("%s", path + strlen(base) + 1));
if (!strcmp(rel + strlen(rel) - 5, "/.git"))
rel[strlen(rel) - 5] = '\0';
repo = cgit_add_repo(rel);
if (ctx.cfg.remove_suffix)
if ((p = strrchr(repo->url, '.')) && !strcmp(p, ".git"))
*p = '\0';
repo->name = repo->url;
repo->path = xstrdup(path);
while (!owner) {
if ((pwd = getpwuid(st.st_uid)) == NULL) {
fprintf(stderr, "Error reading owner-info for %s: %s (%d)\n",
path, strerror(errno), errno);
break;
}
if (pwd->pw_gecos)
if ((p = strchr(pwd->pw_gecos, ',')))
*p = '\0';
owner = xstrdup(pwd->pw_gecos ? pwd->pw_gecos : pwd->pw_name);
}
repo->owner = owner;
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";
+ }
if (ctx.cfg.section_from_path) {
n = ctx.cfg.section_from_path;
if (n > 0) {
slash = rel;
while (slash && n && (slash = strchr(slash, '/')))
n--;
} else {
slash = rel + strlen(rel);
while (slash && n && (slash = xstrrchr(rel, slash, '/')))
n++;
}
if (slash && !n) {
*slash = '\0';
repo->section = xstrdup(rel);
*slash = '/';
if (!prefixcmp(repo->name, repo->section)) {
repo->name += strlen(repo->section);
if (*repo->name == '/')
repo->name++;
}
}
}
p = fmt("%s/cgitrc", path);
if (!stat(p, &st)) {
config_fn = fn;
parse_configfile(xstrdup(p), &repo_config);
}
}
static void scan_path(const char *base, const char *path, repo_config_fn fn)
{