diff options
| author | 2010-11-16 04:41:00 (JST) | |
|---|---|---|
| committer | 2011-02-19 22:25:14 (JST) | |
| commit | df522794c38934be3229a11e0e2432a1f2a3bc8d (patch) | |
| tree | f11aef6d303a5327303a4471d47444764bea53d8 | |
| parent | 682adbc0cad2baa1a6119013b166f52de3ee3352 (diff) | |
| download | cgit-df522794c38934be3229a11e0e2432a1f2a3bc8d.zip cgit-df522794c38934be3229a11e0e2432a1f2a3bc8d.tar.gz | |
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
| @@ -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; |
| @@ -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) { |
