]> git.cameronkatri.com Git - cgit.git/blobdiff - scan-tree.c
Merge branch 'jh/scan-path'
[cgit.git] / scan-tree.c
index b5b50f332b812e4afcd7622a57d84bcf653959a6..627af1b23240dbb8401d61d8e897afaf0eb05ca4 100644 (file)
@@ -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;
 
@@ -155,24 +159,23 @@ static void add_repo(const char *base, const char *path, repo_config_fn fn)
 
 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 +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) {
@@ -198,6 +203,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);
 }