From e0c6f23789e4893781bcd5af2281d468991ccf3a Mon Sep 17 00:00:00 2001 From: Felix Hanley Date: Mon, 8 Nov 2010 19:41:13 +0100 Subject: Add `strict-export` option This option is used to specify a filename which needs to be present in the repositories found during `scan-path` processing. By setting this option to 'git-daemon-export-ok', only repositories explicitly marked for git daemon export will be included in the cgit configuration. Signed-off-by: Felix Hanley Signed-off-by: Lars Hjemli --- cgit.c | 2 ++ cgit.h | 1 + cgitrc.5.txt | 7 +++++++ scan-tree.c | 4 ++++ 4 files changed, 14 insertions(+) diff --git a/cgit.c b/cgit.c index 96900bb..412fbf0 100644 --- a/cgit.c +++ b/cgit.c @@ -121,6 +121,8 @@ void config_cb(const char *name, const char *value) ctx.cfg.logo_link = xstrdup(value); else if (!strcmp(name, "module-link")) ctx.cfg.module_link = xstrdup(value); + else if (!strcmp(name, "strict-export")) + ctx.cfg.strict_export = xstrdup(value); else if (!strcmp(name, "virtual-root")) { ctx.cfg.virtual_root = trim_end(value, '/'); if (!ctx.cfg.virtual_root && (!strcmp(value, "/"))) diff --git a/cgit.h b/cgit.h index 8f5dd2a..a9896cf 100644 --- a/cgit.h +++ b/cgit.h @@ -176,6 +176,7 @@ struct cgit_config { char *script_name; char *section; char *virtual_root; + char *strict_export; int cache_size; int cache_dynamic_ttl; int cache_max_create_time; diff --git a/cgitrc.5.txt b/cgitrc.5.txt index ce78d41..75b6584 100644 --- a/cgitrc.5.txt +++ b/cgitrc.5.txt @@ -317,6 +317,13 @@ summary-tags:: Specifies the number of tags to display in the repository "summary" view. Default value: "10". +strict-export:: + Filename which, if specified, needs to be present within the repository + for cgit to allow access to that repository. This can be used to emulate + gitweb's EXPORT_OK and STRICT_EXPORT functionality and limit cgit's + repositories to match those exported by git-daemon. This option MUST come + before 'scan-path'. + virtual-root:: Url which, if specified, will be used as root for all cgit links. It will also cause cgit to generate 'virtual urls', i.e. urls like diff --git a/scan-tree.c b/scan-tree.c index b5b50f3..a0e09ce 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; -- cgit v1.2.3-59-g8ed1b