X-Git-Url: https://gitweb.ps.run/ps-cgit/blobdiff_plain/9043b46f85eb43c918a172663af34c084587bd1a..f8f6e1fe789e9dbcea40a0f8d5ebfb019c2a1a19:/scan-tree.c diff --git a/scan-tree.c b/scan-tree.c index b5b50f3..378d795 100644 --- a/scan-tree.c +++ b/scan-tree.c @@ -81,6 +81,10 @@ static void add_repo(const char *base, const char *path, repo_config_fn fn) path, strerror(errno), errno); return; } + + if (ctx.cfg.strict_export && stat(fmt("%s/%s", path, ctx.cfg.strict_export), &st)) + return; + if (!stat(fmt("%s/noweb", path), &st)) return; @@ -151,28 +155,29 @@ static void add_repo(const char *base, const char *path, repo_config_fn fn) config_fn = fn; parse_configfile(xstrdup(p), &repo_config); } + + free(rel); } static void scan_path(const char *base, const char *path, repo_config_fn fn) { - DIR *dir; + DIR *dir = opendir(path); struct dirent *ent; char *buf; struct stat st; + if (!dir) { + fprintf(stderr, "Error opening directory %s: %s (%d)\n", + path, strerror(errno), errno); + return; + } if (is_git_dir(path)) { add_repo(base, path, fn); - return; + goto end; } if (is_git_dir(fmt("%s/.git", path))) { add_repo(base, fmt("%s/.git", path), fn); - return; - } - dir = opendir(path); - if (!dir) { - fprintf(stderr, "Error opening directory %s: %s (%d)\n", - path, strerror(errno), errno); - return; + goto end; } while((ent = readdir(dir)) != NULL) { if (ent->d_name[0] == '.') { @@ -180,6 +185,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) { @@ -198,6 +205,7 @@ static void scan_path(const char *base, const char *path, repo_config_fn fn) scan_path(base, buf, fn); free(buf); } +end: closedir(dir); } @@ -213,6 +221,7 @@ void scan_projects(const char *path, const char *projectsfile, repo_config_fn fn if (!projects) { fprintf(stderr, "Error opening projectsfile %s: %s (%d)\n", projectsfile, strerror(errno), errno); + return; } while (fgets(line, sizeof(line), projects) != NULL) { for (z = &lastc(line);