From c58cec9dff273b44c428cfaee24e5e3743c0034e Mon Sep 17 00:00:00 2001 From: Lukas Fleischer Date: Thu, 29 Jan 2015 12:52:49 +0100 Subject: Add repo.hide and repo.ignore These options can be used to hide a repository from the index or completely ignore a repository, respectively. They are particularly useful when used in combination with scan-path. Signed-off-by: Lukas Fleischer --- cgit.c | 6 ++++++ cgit.h | 2 ++ cgitrc.5.txt | 10 ++++++++++ shared.c | 3 +++ ui-repolist.c | 2 ++ 5 files changed, 23 insertions(+) diff --git a/cgit.c b/cgit.c index 79019c2..431e325 100644 --- a/cgit.c +++ b/cgit.c @@ -93,6 +93,10 @@ static void repo_config(struct cgit_repo *repo, const char *name, const char *va repo->email_filter = cgit_new_filter(value, EMAIL); else if (!strcmp(name, "owner-filter")) repo->owner_filter = cgit_new_filter(value, OWNER); + } else if (!strcmp(name, "hide")) { + repo->hide = atoi(value); + } else if (!strcmp(name, "ignore")) { + repo->ignore = atoi(value); } } @@ -828,6 +832,8 @@ static void print_repo(FILE *f, struct cgit_repo *repo) else if (repo->commit_sort == 2) fprintf(f, "repo.commit-sort=topo\n"); } + fprintf(f, "repo.hide=%d\n", repo->hide); + fprintf(f, "repo.ignore=%d\n", repo->ignore); fprintf(f, "\n"); } diff --git a/cgit.h b/cgit.h index 42140ac..16f8092 100644 --- a/cgit.h +++ b/cgit.h @@ -106,6 +106,8 @@ struct cgit_repo { struct cgit_filter *email_filter; struct cgit_filter *owner_filter; struct string_list submodules; + int hide; + int ignore; }; typedef void (*repo_config_fn)(struct cgit_repo *repo, const char *name, diff --git a/cgitrc.5.txt b/cgitrc.5.txt index be6703f..e21ece9 100644 --- a/cgitrc.5.txt +++ b/cgitrc.5.txt @@ -509,6 +509,16 @@ repo.enable-subject-links:: A flag which can be used to override the global setting `enable-subject-links'. Default value: none. +repo.hide:: + Flag which, when set to "1", hides the repository from the repository + index. The repository can still be accessed by providing a direct path. + Default value: "0". See also: "repo.ignore". + +repo.ignore:: + Flag which, when set to "1", ignores the repository. The repository + is not shown in the index and cannot be accessed by providing a direct + path. Default value: "0". See also: "repo.hide". + repo.logo:: Url which specifies the source of an image which will be used as a logo on this repo's pages. Default value: global logo. diff --git a/shared.c b/shared.c index 6e91857..ae17d78 100644 --- a/shared.c +++ b/shared.c @@ -75,6 +75,7 @@ struct cgit_repo *cgit_add_repo(const char *url) ret->owner_filter = ctx.cfg.owner_filter; ret->clone_url = ctx.cfg.clone_url; ret->submodules.strdup_strings = 1; + ret->hide = ret->ignore = 0; return ret; } @@ -85,6 +86,8 @@ struct cgit_repo *cgit_get_repoinfo(const char *url) for (i = 0; i < cgit_repolist.count; i++) { repo = &cgit_repolist.repos[i]; + if (repo->ignore) + continue; if (!strcmp(repo->url, url)) return repo; } diff --git a/ui-repolist.c b/ui-repolist.c index f929cb7..91911e0 100644 --- a/ui-repolist.c +++ b/ui-repolist.c @@ -275,6 +275,8 @@ void cgit_print_repolist() html(""); for (i = 0; i < cgit_repolist.count; i++) { ctx.repo = &cgit_repolist.repos[i]; + if (ctx.repo->hide || ctx.repo->ignore) + continue; if (!(is_match(ctx.repo) && is_in_url(ctx.repo))) continue; hits++; -- cgit