aboutsummaryrefslogtreecommitdiff
diff refs
from: back
to: back
| flip
diff options
context:
space:
mode:
-rw-r--r--cgit.c19
-rw-r--r--cgit.h6
-rw-r--r--scan-tree.c32
-rw-r--r--scan-tree.h4
4 files changed, 33 insertions, 28 deletions
diff --git a/cgit.c b/cgit.c
index 42beace..c4dc94c 100644
--- a/cgit.c
+++ b/cgit.c
@@ -41,7 +41,7 @@ static void add_mimetype(const char *name, const char *value)
static void process_cached_repolist(const char *path);
-void cgit_repo_config(struct cgit_repo *repo, const char *name, const char *value)
+static void repo_config(struct cgit_repo *repo, const char *name, const char *value)
{
const char *path;
struct string_list_item *item;
@@ -136,7 +136,7 @@ static void config_cb(const char *name, const char *value)
else if (ctx.repo && !strcmp(name, "repo.path"))
ctx.repo->path = trim_end(value, '/');
else if (ctx.repo && skip_prefix(name, "repo.", &arg))
- cgit_repo_config(ctx.repo, arg, value);
+ repo_config(ctx.repo, arg, value);
else if (!strcmp(name, "readme"))
string_list_append(&ctx.cfg.readme, xstrdup(value));
else if (!strcmp(name, "root-title"))
@@ -256,9 +256,9 @@ static void config_cb(const char *name, const char *value)
process_cached_repolist(expand_macros(value));
else if (ctx.cfg.project_list)
scan_projects(expand_macros(value),
- ctx.cfg.project_list);
+ ctx.cfg.project_list, repo_config);
else
- scan_tree(expand_macros(value));
+ scan_tree(expand_macros(value), repo_config);
else if (!strcmp(name, "scan-hidden-path"))
ctx.cfg.scan_hidden_path = atoi(value);
else if (!strcmp(name, "section-from-path"))
@@ -908,9 +908,9 @@ static int generate_cached_repolist(const char *path, const char *cached_rc)
}
idx = cgit_repolist.count;
if (ctx.cfg.project_list)
- scan_projects(path, ctx.cfg.project_list);
+ scan_projects(path, ctx.cfg.project_list, repo_config);
else
- scan_tree(path);
+ scan_tree(path, repo_config);
print_repolist(f, &cgit_repolist, idx);
if (rename(locked_rc.buf, cached_rc))
fprintf(stderr, "[cgit] Error renaming %s to %s: %s (%d)\n",
@@ -940,9 +940,10 @@ static void process_cached_repolist(const char *path)
*/
if (generate_cached_repolist(path, cached_rc.buf)) {
if (ctx.cfg.project_list)
- scan_projects(path, ctx.cfg.project_list);
+ scan_projects(path, ctx.cfg.project_list,
+ repo_config);
else
- scan_tree(path);
+ scan_tree(path, repo_config);
}
goto out;
}
@@ -1023,7 +1024,7 @@ static void cgit_parse_args(int argc, const char **argv)
*/
ctx.cfg.snapshots = 0xFF;
scan++;
- scan_tree(arg);
+ scan_tree(arg, repo_config);
}
}
if (scan) {
diff --git a/cgit.h b/cgit.h
index 1db3473..6945eb9 100644
--- a/cgit.h
+++ b/cgit.h
@@ -121,6 +121,9 @@ struct cgit_repo {
int ignore;
};
+typedef void (*repo_config_fn)(struct cgit_repo *repo, const char *name,
+ const char *value);
+
struct cgit_repolist {
int length;
int count;
@@ -331,8 +334,7 @@ extern const struct cgit_snapshot_format cgit_snapshot_formats[];
extern char *cgit_default_repo_desc;
extern struct cgit_repo *cgit_add_repo(const char *url);
extern struct cgit_repo *cgit_get_repoinfo(const char *url);
-extern void cgit_repo_config(struct cgit_repo *repo, const char *name,
- const char *value);
+extern void cgit_repo_config_cb(const char *name, const char *value);
extern int chk_zero(int result, char *msg);
extern int chk_positive(int result, char *msg);
diff --git a/scan-tree.c b/scan-tree.c
index 867fcf7..8858b74 100644
--- a/scan-tree.c
+++ b/scan-tree.c
@@ -47,10 +47,11 @@ out:
}
static struct cgit_repo *repo;
+static repo_config_fn config_fn;
static void scan_tree_repo_config(const char *name, const char *value)
{
- cgit_repo_config(repo, name, value);
+ config_fn(repo, name, value);
}
static int gitconfig_config(const char *key, const char *value,
@@ -59,15 +60,15 @@ static int gitconfig_config(const char *key, const char *value,
const char *name;
if (!strcmp(key, "gitweb.owner"))
- cgit_repo_config(repo, "owner", value);
+ config_fn(repo, "owner", value);
else if (!strcmp(key, "gitweb.description"))
- cgit_repo_config(repo, "desc", value);
+ config_fn(repo, "desc", value);
else if (!strcmp(key, "gitweb.category"))
- cgit_repo_config(repo, "section", value);
+ config_fn(repo, "section", value);
else if (!strcmp(key, "gitweb.homepage"))
- cgit_repo_config(repo, "homepage", value);
+ config_fn(repo, "homepage", value);
else if (skip_prefix(key, "cgit.", &name))
- cgit_repo_config(repo, name, value);
+ config_fn(repo, name, value);
return 0;
}
@@ -79,7 +80,7 @@ static char *xstrrchr(char *s, char *from, int c)
return from < s ? NULL : from;
}
-static void add_repo(const char *base, struct strbuf *path)
+static void add_repo(const char *base, struct strbuf *path, repo_config_fn fn)
{
struct stat st;
struct passwd *pwd;
@@ -121,6 +122,7 @@ static void add_repo(const char *base, struct strbuf *path)
strbuf_setlen(&rel, rel.len - 1);
repo = cgit_add_repo(rel.buf);
+ config_fn = fn;
if (ctx.cfg.enable_git_config) {
strbuf_addstr(path, "config");
git_config_from_file(gitconfig_config, path->buf, NULL);
@@ -183,7 +185,7 @@ static void add_repo(const char *base, struct strbuf *path)
strbuf_release(&rel);
}
-static void scan_path(const char *base, const char *path)
+static void scan_path(const char *base, const char *path, repo_config_fn fn)
{
DIR *dir = opendir(path);
struct dirent *ent;
@@ -199,12 +201,12 @@ static void scan_path(const char *base, const char *path)
strbuf_add(&pathbuf, path, strlen(path));
if (is_git_dir(pathbuf.buf)) {
- add_repo(base, &pathbuf);
+ add_repo(base, &pathbuf, fn);
goto end;
}
strbuf_addstr(&pathbuf, "/.git");
if (is_git_dir(pathbuf.buf)) {
- add_repo(base, &pathbuf);
+ add_repo(base, &pathbuf, fn);
goto end;
}
/*
@@ -229,14 +231,14 @@ static void scan_path(const char *base, const char *path)
continue;
}
if (S_ISDIR(st.st_mode))
- scan_path(base, pathbuf.buf);
+ scan_path(base, pathbuf.buf, fn);
}
end:
strbuf_release(&pathbuf);
closedir(dir);
}
-void scan_projects(const char *path, const char *projectsfile)
+void scan_projects(const char *path, const char *projectsfile, repo_config_fn fn)
{
struct strbuf line = STRBUF_INIT;
FILE *projects;
@@ -253,7 +255,7 @@ void scan_projects(const char *path, const char *projectsfile)
continue;
strbuf_insert(&line, 0, "/", 1);
strbuf_insert(&line, 0, path, strlen(path));
- scan_path(path, line.buf);
+ scan_path(path, line.buf, fn);
}
if ((err = ferror(projects))) {
fprintf(stderr, "Error reading from projectsfile %s: %s (%d)\n",
@@ -263,7 +265,7 @@ void scan_projects(const char *path, const char *projectsfile)
strbuf_release(&line);
}
-void scan_tree(const char *path)
+void scan_tree(const char *path, repo_config_fn fn)
{
- scan_path(path, path);
+ scan_path(path, path, fn);
}
diff --git a/scan-tree.h b/scan-tree.h
index def0a7a..1afbd4b 100644
--- a/scan-tree.h
+++ b/scan-tree.h
@@ -1,2 +1,2 @@
-extern void scan_projects(const char *path, const char *projectsfile);
-extern void scan_tree(const char *path);
+extern void scan_projects(const char *path, const char *projectsfile, repo_config_fn fn);
+extern void scan_tree(const char *path, repo_config_fn fn);