diff options
author | Johan Herland | 2010-11-15 20:41:00 +0100 |
---|---|---|
committer | Lars Hjemli | 2011-02-19 14:25:14 +0100 |
commit | df522794c38934be3229a11e0e2432a1f2a3bc8d (patch) | |
tree | f11aef6d303a5327303a4471d47444764bea53d8 | |
parent | scan_path(): Improve handling of inaccessible directories (diff) | |
download | cgit-df522794c38934be3229a11e0e2432a1f2a3bc8d.tar.gz cgit-df522794c38934be3229a11e0e2432a1f2a3bc8d.zip |
scan_path(): Do not recurse into hidden directories by default
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>
-rw-r--r-- | cgit.c | 3 | ||||
-rw-r--r-- | cgit.h | 1 | ||||
-rw-r--r-- | cgitrc.5.txt | 8 | ||||
-rw-r--r-- | scan-tree.c | 2 |
4 files changed, 14 insertions, 0 deletions
diff --git a/cgit.c b/cgit.c index 412fbf0..6a76281 100644 --- a/cgit.c +++ b/cgit.c | |||
@@ -195,6 +195,8 @@ void config_cb(const char *name, const char *value) | |||
195 | ctx.cfg.project_list, repo_config); | 195 | ctx.cfg.project_list, repo_config); |
196 | else | 196 | else |
197 | scan_tree(expand_macros(value), repo_config); | 197 | scan_tree(expand_macros(value), repo_config); |
198 | else if (!strcmp(name, "scan-hidden-path")) | ||
199 | ctx.cfg.scan_hidden_path = atoi(value); | ||
198 | else if (!strcmp(name, "section-from-path")) | 200 | else if (!strcmp(name, "section-from-path")) |
199 | ctx.cfg.section_from_path = atoi(value); | 201 | ctx.cfg.section_from_path = atoi(value); |
200 | else if (!strcmp(name, "source-filter")) | 202 | else if (!strcmp(name, "source-filter")) |
@@ -315,6 +317,7 @@ static void prepare_context(struct cgit_context *ctx) | |||
315 | ctx->cfg.robots = "index, nofollow"; | 317 | ctx->cfg.robots = "index, nofollow"; |
316 | ctx->cfg.root_title = "Git repository browser"; | 318 | ctx->cfg.root_title = "Git repository browser"; |
317 | ctx->cfg.root_desc = "a fast webinterface for the git dscm"; | 319 | ctx->cfg.root_desc = "a fast webinterface for the git dscm"; |
320 | ctx->cfg.scan_hidden_path = 0; | ||
318 | ctx->cfg.script_name = CGIT_SCRIPT_NAME; | 321 | ctx->cfg.script_name = CGIT_SCRIPT_NAME; |
319 | ctx->cfg.section = ""; | 322 | ctx->cfg.section = ""; |
320 | ctx->cfg.summary_branches = 10; | 323 | ctx->cfg.summary_branches = 10; |
diff --git a/cgit.h b/cgit.h index f5f68ac..ad94905 100644 --- a/cgit.h +++ b/cgit.h | |||
@@ -207,6 +207,7 @@ struct cgit_config { | |||
207 | int noheader; | 207 | int noheader; |
208 | int renamelimit; | 208 | int renamelimit; |
209 | int remove_suffix; | 209 | int remove_suffix; |
210 | int scan_hidden_path; | ||
210 | int section_from_path; | 211 | int section_from_path; |
211 | int snapshots; | 212 | int snapshots; |
212 | int summary_branches; | 213 | int summary_branches; |
diff --git a/cgitrc.5.txt b/cgitrc.5.txt index 8e51ca5..1dc3cce 100644 --- a/cgitrc.5.txt +++ b/cgitrc.5.txt | |||
@@ -269,6 +269,14 @@ root-title:: | |||
269 | Text printed as heading on the repository index page. Default value: | 269 | Text printed as heading on the repository index page. Default value: |
270 | "Git Repository Browser". | 270 | "Git Repository Browser". |
271 | 271 | ||
272 | scan-hidden-path:: | ||
273 | If set to "1" and scan-path is enabled, scan-path will recurse into | ||
274 | directories whose name starts with a period ('.'). Otherwise, | ||
275 | scan-path will stay away from such directories (considered as | ||
276 | "hidden"). Note that this does not apply to the ".git" directory in | ||
277 | non-bare repos. This must be defined prior to scan-path. | ||
278 | Default value: 0. See also: scan-path. | ||
279 | |||
272 | scan-path:: | 280 | scan-path:: |
273 | A path which will be scanned for repositories. If caching is enabled, | 281 | A path which will be scanned for repositories. If caching is enabled, |
274 | the result will be cached as a cgitrc include-file in the cache | 282 | the result will be cached as a cgitrc include-file in the cache |
diff --git a/scan-tree.c b/scan-tree.c index eda8c67..627af1b 100644 --- a/scan-tree.c +++ b/scan-tree.c | |||
@@ -183,6 +183,8 @@ static void scan_path(const char *base, const char *path, repo_config_fn fn) | |||
183 | continue; | 183 | continue; |
184 | if (ent->d_name[1] == '.' && ent->d_name[2] == '\0') | 184 | if (ent->d_name[1] == '.' && ent->d_name[2] == '\0') |
185 | continue; | 185 | continue; |
186 | if (!ctx.cfg.scan_hidden_path) | ||
187 | continue; | ||
186 | } | 188 | } |
187 | buf = malloc(strlen(path) + strlen(ent->d_name) + 2); | 189 | buf = malloc(strlen(path) + strlen(ent->d_name) + 2); |
188 | if (!buf) { | 190 | if (!buf) { |