]> granicus.if.org Git - cgit/commitdiff
scan_path(): Do not recurse into hidden directories by default
authorJohan Herland <johan@herland.net>
Mon, 15 Nov 2010 19:41:00 +0000 (20:41 +0100)
committerLars Hjemli <hjemli@gmail.com>
Sat, 19 Feb 2011 13:25:14 +0000 (14:25 +0100)
Paths that start with a period ('.') are considered hidden in the Unix world.
scan_path() should arguably not recurse into these directories by default.
This patch makes it so, and introduces the "scan-hidden-path" config variable
for overriding the new default and revert to the old behaviour (scanning _all_
directories, including hidden .directories).

Signed-off-by: Johan Herland <johan@herland.net>
Signed-off-by: Lars Hjemli <larsh@prediktor.no>
cgit.c
cgit.h
cgitrc.5.txt
scan-tree.c

diff --git a/cgit.c b/cgit.c
index 412fbf0c32c4c0d2be3b0973ae5b5804c85059d6..6a76281621982786af2c4639b1bf5e238646ef9e 100644 (file)
--- a/cgit.c
+++ b/cgit.c
@@ -195,6 +195,8 @@ void config_cb(const char *name, const char *value)
                                      ctx.cfg.project_list, repo_config);
                else
                        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"))
                ctx.cfg.section_from_path = atoi(value);
        else if (!strcmp(name, "source-filter"))
@@ -315,6 +317,7 @@ static void prepare_context(struct cgit_context *ctx)
        ctx->cfg.robots = "index, nofollow";
        ctx->cfg.root_title = "Git repository browser";
        ctx->cfg.root_desc = "a fast webinterface for the git dscm";
+       ctx->cfg.scan_hidden_path = 0;
        ctx->cfg.script_name = CGIT_SCRIPT_NAME;
        ctx->cfg.section = "";
        ctx->cfg.summary_branches = 10;
diff --git a/cgit.h b/cgit.h
index f5f68ac74c76d33110354645aeba464827dec736..ad94905a005e8213b65866133b2ffb7b643cb151 100644 (file)
--- a/cgit.h
+++ b/cgit.h
@@ -207,6 +207,7 @@ struct cgit_config {
        int noheader;
        int renamelimit;
        int remove_suffix;
+       int scan_hidden_path;
        int section_from_path;
        int snapshots;
        int summary_branches;
index 8e51ca5766945c68c23b1f988062b865cf46397a..1dc3cce3fed5e0f62493a0ddbc642175f38f5b68 100644 (file)
@@ -269,6 +269,14 @@ root-title::
        Text printed as heading on the repository index page. Default value:
        "Git Repository Browser".
 
+scan-hidden-path::
+       If set to "1" and scan-path is enabled, scan-path will recurse into
+       directories whose name starts with a period ('.'). Otherwise,
+       scan-path will stay away from such directories (considered as
+       "hidden"). Note that this does not apply to the ".git" directory in
+       non-bare repos. This must be defined prior to scan-path.
+       Default value: 0. See also: scan-path.
+
 scan-path::
        A path which will be scanned for repositories. If caching is enabled,
        the result will be cached as a cgitrc include-file in the cache
index eda8c677805fc01c7e81134a9bd615370e2fa7d2..627af1b23240dbb8401d61d8e897afaf0eb05ca4 100644 (file)
@@ -183,6 +183,8 @@ static void scan_path(const char *base, const char *path, repo_config_fn fn)
                                continue;
                        if (ent->d_name[1] == '.' && ent->d_name[2] == '\0')
                                continue;
+                       if (!ctx.cfg.scan_hidden_path)
+                               continue;
                }
                buf = malloc(strlen(path) + strlen(ent->d_name) + 2);
                if (!buf) {