Add support for 'enable-gitweb-owner' option

When this option is enabled (which it is by default), cgit will lookup
the 'gitweb.owner' setting in each git config file found when processing
the 'scan-path' option.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
This commit is contained in:
Jason A. Donenfeld 2010-07-29 20:38:01 +02:00 committed by Lars Hjemli
parent 2e4a941626
commit 119397b175
4 changed files with 33 additions and 9 deletions

3
cgit.c
View File

@ -135,6 +135,8 @@ void config_cb(const char *name, const char *value)
ctx.cfg.snapshots = cgit_parse_snapshots_mask(value); ctx.cfg.snapshots = cgit_parse_snapshots_mask(value);
else if (!strcmp(name, "enable-filter-overrides")) else if (!strcmp(name, "enable-filter-overrides"))
ctx.cfg.enable_filter_overrides = atoi(value); ctx.cfg.enable_filter_overrides = atoi(value);
else if (!strcmp(name, "enable-gitweb-owner"))
ctx.cfg.enable_gitweb_owner = atoi(value);
else if (!strcmp(name, "enable-index-links")) else if (!strcmp(name, "enable-index-links"))
ctx.cfg.enable_index_links = atoi(value); ctx.cfg.enable_index_links = atoi(value);
else if (!strcmp(name, "enable-log-filecount")) else if (!strcmp(name, "enable-log-filecount"))
@ -293,6 +295,7 @@ static void prepare_context(struct cgit_context *ctx)
ctx->cfg.css = "/cgit.css"; ctx->cfg.css = "/cgit.css";
ctx->cfg.logo = "/cgit.png"; ctx->cfg.logo = "/cgit.png";
ctx->cfg.local_time = 0; ctx->cfg.local_time = 0;
ctx->cfg.enable_gitweb_owner = 1;
ctx->cfg.enable_tree_linenumbers = 1; ctx->cfg.enable_tree_linenumbers = 1;
ctx->cfg.max_repo_count = 50; ctx->cfg.max_repo_count = 50;
ctx->cfg.max_commit_count = 50; ctx->cfg.max_commit_count = 50;

1
cgit.h
View File

@ -183,6 +183,7 @@ struct cgit_config {
int cache_static_ttl; int cache_static_ttl;
int embedded; int embedded;
int enable_filter_overrides; int enable_filter_overrides;
int enable_gitweb_owner;
int enable_index_links; int enable_index_links;
int enable_log_filecount; int enable_log_filecount;
int enable_log_linecount; int enable_log_linecount;

View File

@ -95,6 +95,11 @@ enable-filter-overrides::
Flag which, when set to "1", allows all filter settings to be Flag which, when set to "1", allows all filter settings to be
overridden in repository-specific cgitrc files. Default value: none. overridden in repository-specific cgitrc files. Default value: none.
enable-gitweb-owner::
If set to "1" and scan-path is enabled, we first check each repository
for the git config value "gitweb.owner" to determine the owner.
Default value: "1". See also: scan-path.
enable-index-links:: enable-index-links::
Flag which, when set to "1", will make cgit generate extra links for Flag which, when set to "1", will make cgit generate extra links for
each repo in the repository index (specifically, to the "summary", each repo in the repository index (specifically, to the "summary",

View File

@ -47,12 +47,20 @@ static int is_git_dir(const char *path)
struct cgit_repo *repo; struct cgit_repo *repo;
repo_config_fn config_fn; repo_config_fn config_fn;
char *owner;
static void repo_config(const char *name, const char *value) static void repo_config(const char *name, const char *value)
{ {
config_fn(repo, name, value); config_fn(repo, name, value);
} }
static int git_owner_config(const char *key, const char *value, void *cb)
{
if (!strcmp(key, "gitweb.owner"))
owner = xstrdup(value);
return 0;
}
static void add_repo(const char *base, const char *path, repo_config_fn fn) static void add_repo(const char *base, const char *path, repo_config_fn fn)
{ {
struct stat st; struct stat st;
@ -67,11 +75,10 @@ static void add_repo(const char *base, const char *path, repo_config_fn fn)
} }
if (!stat(fmt("%s/noweb", path), &st)) if (!stat(fmt("%s/noweb", path), &st))
return; return;
if ((pwd = getpwuid(st.st_uid)) == NULL) {
fprintf(stderr, "Error reading owner-info for %s: %s (%d)\n", owner = NULL;
path, strerror(errno), errno); if (ctx.cfg.enable_gitweb_owner)
return; git_config_from_file(git_owner_config, fmt("%s/config", path), NULL);
}
if (base == path) if (base == path)
p = fmt("%s", path); p = fmt("%s", path);
else else
@ -86,10 +93,18 @@ static void add_repo(const char *base, const char *path, repo_config_fn fn)
*p = '\0'; *p = '\0';
repo->name = repo->url; repo->name = repo->url;
repo->path = xstrdup(path); repo->path = xstrdup(path);
p = (pwd && pwd->pw_gecos) ? strchr(pwd->pw_gecos, ',') : NULL; while (!owner) {
if (p) if ((pwd = getpwuid(st.st_uid)) == NULL) {
*p = '\0'; fprintf(stderr, "Error reading owner-info for %s: %s (%d)\n",
repo->owner = (pwd ? xstrdup(pwd->pw_gecos ? pwd->pw_gecos : pwd->pw_name) : ""); path, strerror(errno), errno);
break;
}
if (pwd->pw_gecos)
if ((p = strchr(pwd->pw_gecos, ',')))
*p = '\0';
owner = xstrdup(pwd->pw_gecos ? pwd->pw_gecos : pwd->pw_name);
}
repo->owner = owner;
p = fmt("%s/description", path); p = fmt("%s/description", path);
if (!stat(p, &st)) if (!stat(p, &st))