author | Johan Herland <johan@herland.net> | 2010-11-15 19:41:00 (UTC) |
---|---|---|
committer | Lars Hjemli <hjemli@gmail.com> | 2011-02-19 13:25:14 (UTC) |
commit | df522794c38934be3229a11e0e2432a1f2a3bc8d (patch) (unidiff) | |
tree | f11aef6d303a5327303a4471d47444764bea53d8 | |
parent | 682adbc0cad2baa1a6119013b166f52de3ee3352 (diff) | |
download | cgit-df522794c38934be3229a11e0e2432a1f2a3bc8d.zip cgit-df522794c38934be3229a11e0e2432a1f2a3bc8d.tar.gz cgit-df522794c38934be3229a11e0e2432a1f2a3bc8d.tar.bz2 |
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
@@ -194,8 +194,10 @@ void config_cb(const char *name, const char *value) | |||
194 | scan_projects(expand_macros(value), | 194 | scan_projects(expand_macros(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")) |
201 | ctx.cfg.source_filter = new_filter(value, 1); | 203 | ctx.cfg.source_filter = new_filter(value, 1); |
@@ -314,8 +316,9 @@ static void prepare_context(struct cgit_context *ctx) | |||
314 | ctx->cfg.remove_suffix = 0; | 316 | ctx->cfg.remove_suffix = 0; |
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; |
321 | ctx->cfg.summary_log = 10; | 324 | ctx->cfg.summary_log = 10; |
@@ -206,8 +206,9 @@ struct cgit_config { | |||
206 | int noplainemail; | 206 | int noplainemail; |
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; |
213 | int summary_log; | 214 | int summary_log; |
diff --git a/cgitrc.5.txt b/cgitrc.5.txt index 8e51ca5..1dc3cce 100644 --- a/cgitrc.5.txt +++ b/cgitrc.5.txt | |||
@@ -268,8 +268,16 @@ root-readme:: | |||
268 | root-title:: | 268 | 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 |
275 | directory. If project-list has been defined prior to scan-path, | 283 | directory. If project-list has been defined prior to scan-path, |
diff --git a/scan-tree.c b/scan-tree.c index eda8c67..627af1b 100644 --- a/scan-tree.c +++ b/scan-tree.c | |||
@@ -182,8 +182,10 @@ static void scan_path(const char *base, const char *path, repo_config_fn fn) | |||
182 | if (ent->d_name[1] == '\0') | 182 | if (ent->d_name[1] == '\0') |
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) { |
189 | fprintf(stderr, "Alloc error on %s: %s (%d)\n", | 191 | fprintf(stderr, "Alloc error on %s: %s (%d)\n", |