]> git.cameronkatri.com Git - cgit.git/blobdiff - cgit.c
Add support for repo-local cgitrc file
[cgit.git] / cgit.c
diff --git a/cgit.c b/cgit.c
index 6ece4116460a171eb7597c00cccf48cb073e816b..e281aa9e224aca176db47ae4ddd4cdc7d9422b64 100644 (file)
--- a/cgit.c
+++ b/cgit.c
@@ -42,9 +42,55 @@ struct cgit_filter *new_filter(const char *cmd, int extra_args)
 
 static void process_cached_repolist(const char *path);
 
+void repo_config(struct cgit_repo *repo, const char *name, const char *value)
+{
+       if (!strcmp(name, "name"))
+               repo->name = xstrdup(value);
+       else if (!strcmp(name, "clone-url"))
+               repo->clone_url = xstrdup(value);
+       else if (!strcmp(name, "desc"))
+               repo->desc = xstrdup(value);
+       else if (!strcmp(name, "owner"))
+               repo->owner = xstrdup(value);
+       else if (!strcmp(name, "defbranch"))
+               repo->defbranch = xstrdup(value);
+       else if (!strcmp(name, "snapshots"))
+               repo->snapshots = ctx.cfg.snapshots & cgit_parse_snapshots_mask(value);
+       else if (!strcmp(name, "enable-log-filecount"))
+               repo->enable_log_filecount = ctx.cfg.enable_log_filecount * atoi(value);
+       else if (!strcmp(name, "enable-log-linecount"))
+               repo->enable_log_linecount = ctx.cfg.enable_log_linecount * atoi(value);
+       else if (!strcmp(name, "max-stats"))
+               repo->max_stats = cgit_find_stats_period(value, NULL);
+       else if (!strcmp(name, "module-link"))
+               repo->module_link= xstrdup(value);
+       else if (!strcmp(name, "section"))
+               repo->section = xstrdup(value);
+       else if (!strcmp(name, "about-filter"))
+               repo->about_filter = new_filter(value, 0);
+       else if (!strcmp(name, "commit-filter"))
+               repo->commit_filter = new_filter(value, 0);
+       else if (!strcmp(name, "source-filter"))
+               repo->source_filter = new_filter(value, 1);
+       else if (!strcmp(name, "readme") && value != NULL) {
+               if (*value == '/')
+                       ctx.repo->readme = xstrdup(value);
+               else
+                       ctx.repo->readme = xstrdup(fmt("%s/%s", ctx.repo->path, value));
+       }
+}
+
 void config_cb(const char *name, const char *value)
 {
-       if (!strcmp(name, "root-title"))
+       if (!strcmp(name, "section") || !strcmp(name, "repo.group"))
+               ctx.cfg.section = xstrdup(value);
+       else if (!strcmp(name, "repo.url"))
+               ctx.repo = cgit_add_repo(value);
+       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, "root-title"))
                ctx.cfg.root_title = xstrdup(value);
        else if (!strcmp(name, "root-desc"))
                ctx.cfg.root_desc = xstrdup(value);
@@ -122,7 +168,7 @@ void config_cb(const char *name, const char *value)
                if (!ctx.cfg.nocache && ctx.cfg.cache_size)
                        process_cached_repolist(value);
                else
-                       scan_tree(value);
+                       scan_tree(value, repo_config);
        else if (!strcmp(name, "source-filter"))
                ctx.cfg.source_filter = new_filter(value, 1);
        else if (!strcmp(name, "summary-log"))
@@ -143,44 +189,7 @@ void config_cb(const char *name, const char *value)
                ctx.cfg.local_time = atoi(value);
        else if (!prefixcmp(name, "mimetype."))
                add_mimetype(name + 9, value);
-       else if (!strcmp(name, "repo.group"))
-               ctx.cfg.repo_group = xstrdup(value);
-       else if (!strcmp(name, "repo.url"))
-               ctx.repo = cgit_add_repo(value);
-       else if (!strcmp(name, "repo.name"))
-               ctx.repo->name = xstrdup(value);
-       else if (ctx.repo && !strcmp(name, "repo.path"))
-               ctx.repo->path = trim_end(value, '/');
-       else if (ctx.repo && !strcmp(name, "repo.clone-url"))
-               ctx.repo->clone_url = xstrdup(value);
-       else if (ctx.repo && !strcmp(name, "repo.desc"))
-               ctx.repo->desc = xstrdup(value);
-       else if (ctx.repo && !strcmp(name, "repo.owner"))
-               ctx.repo->owner = xstrdup(value);
-       else if (ctx.repo && !strcmp(name, "repo.defbranch"))
-               ctx.repo->defbranch = xstrdup(value);
-       else if (ctx.repo && !strcmp(name, "repo.snapshots"))
-               ctx.repo->snapshots = ctx.cfg.snapshots & cgit_parse_snapshots_mask(value); /* XXX: &? */
-       else if (ctx.repo && !strcmp(name, "repo.enable-log-filecount"))
-               ctx.repo->enable_log_filecount = ctx.cfg.enable_log_filecount * atoi(value);
-       else if (ctx.repo && !strcmp(name, "repo.enable-log-linecount"))
-               ctx.repo->enable_log_linecount = ctx.cfg.enable_log_linecount * atoi(value);
-       else if (ctx.repo && !strcmp(name, "repo.max-stats"))
-               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"))
-               ctx.repo->source_filter = new_filter(value, 1);
-       else if (ctx.repo && !strcmp(name, "repo.readme") && value != NULL) {
-               if (*value == '/')
-                       ctx.repo->readme = xstrdup(value);
-               else
-                       ctx.repo->readme = xstrdup(fmt("%s/%s", ctx.repo->path, value));
-       } else if (!strcmp(name, "include"))
+       else if (!strcmp(name, "include"))
                parse_configfile(value, config_cb);
 }
 
@@ -467,7 +476,7 @@ static int generate_cached_repolist(const char *path, const char *cached_rc)
                return errno;
        }
        idx = cgit_repolist.count;
-       scan_tree(path);
+       scan_tree(path, repo_config);
        print_repolist(f, &cgit_repolist, idx);
        if (rename(locked_rc, cached_rc))
                fprintf(stderr, "[cgit] Error renaming %s to %s: %s (%d)\n",
@@ -491,7 +500,7 @@ static void process_cached_repolist(const char *path)
                 * invoke scan_tree manually.
                 */
                if (generate_cached_repolist(path, cached_rc))
-                       scan_tree(path);
+                       scan_tree(path, repo_config);
                return;
        }
 
@@ -547,9 +556,10 @@ static void cgit_parse_args(int argc, const char **argv)
                if (!strncmp(argv[i], "--ofs=", 6)) {
                        ctx.qry.ofs = atoi(argv[i]+6);
                }
-               if (!strncmp(argv[i], "--scan-tree=", 12)) {
+               if (!strncmp(argv[i], "--scan-tree=", 12) ||
+                   !strncmp(argv[i], "--scan-path=", 12)) {
                        scan++;
-                       scan_tree(argv[i] + 12);
+                       scan_tree(argv[i] + 12, repo_config);
                }
        }
        if (scan) {