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>
这个提交包含在:
Jason A. Donenfeld
2010-07-29 20:38:01 +02:00
提交者 Lars Hjemli
父节点 2e4a941626
当前提交 119397b175
共有 4 个文件被更改,包括 33 次插入9 次删除

3
cgit.c
查看文件

@ -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
查看文件

@ -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;

查看文件

@ -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",

查看文件

@ -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) {
fprintf(stderr, "Error reading owner-info for %s: %s (%d)\n",
path, strerror(errno), errno);
break;
}
if (pwd->pw_gecos)
if ((p = strchr(pwd->pw_gecos, ',')))
*p = '\0'; *p = '\0';
repo->owner = (pwd ? xstrdup(pwd->pw_gecos ? pwd->pw_gecos : pwd->pw_name) : ""); 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))