diff options
Diffstat (limited to '')
| -rw-r--r-- | cgit.c | 10 | ||||
| -rw-r--r-- | cgit.h | 3 | ||||
| -rw-r--r-- | cgitrc.5.txt | 14 | ||||
| -rw-r--r-- | cmd.c | 18 | ||||
| -rw-r--r-- | ui-repolist.c | 2 | ||||
| -rw-r--r-- | ui-shared.c | 12 | ||||
| -rw-r--r-- | ui-shared.h | 2 | 
7 files changed, 48 insertions, 13 deletions
| @@ -56,6 +56,8 @@ static void repo_config(struct cgit_repo *repo, const char *name, const char *va  		repo->homepage = xstrdup(value);  	else if (!strcmp(name, "defbranch"))  		repo->defbranch = xstrdup(value); +	else if (!strcmp(name, "default-page")) +		repo->default_page = xstrdup(value);  	else if (!strcmp(name, "extra-head-content"))  		repo->extra_head_content = xstrdup(value);  	else if (!strcmp(name, "snapshots")) @@ -141,6 +143,8 @@ static void config_cb(const char *name, const char *value)  		ctx.cfg.root_desc = xstrdup(value);  	else if (!strcmp(name, "root-readme"))  		ctx.cfg.root_readme = xstrdup(value); +	else if (!strcmp(name, "root-default-page")) +		ctx.cfg.root_default_page = xstrdup(value);  	else if (!strcmp(name, "css"))  		string_list_append(&ctx.cfg.css, xstrdup(value));  	else if (!strcmp(name, "js")) @@ -157,6 +161,8 @@ static void config_cb(const char *name, const char *value)  		ctx.cfg.logo = xstrdup(value);  	else if (!strcmp(name, "logo-link"))  		ctx.cfg.logo_link = xstrdup(value); +	else if (!strcmp(name, "default-page")) +		ctx.cfg.default_page = xstrdup(value);  	else if (!strcmp(name, "module-link"))  		ctx.cfg.module_link = xstrdup(value);  	else if (!strcmp(name, "strict-export")) @@ -380,6 +386,7 @@ static void prepare_context(void)  	ctx.cfg.case_sensitive_sort = 1;  	ctx.cfg.branch_sort = 0;  	ctx.cfg.commit_sort = 0; +	ctx.cfg.default_page= "summary";  	ctx.cfg.logo = "/cgit.png";  	ctx.cfg.favicon = "/favicon.ico";  	ctx.cfg.local_time = 0; @@ -400,6 +407,7 @@ static void prepare_context(void)  	ctx.cfg.robots = "index, nofollow";  	ctx.cfg.root_title = "Git repository browser";  	ctx.cfg.root_desc = "a fast webinterface for the git dscm"; +	ctx.cfg.root_default_page = "repolist";  	ctx.cfg.scan_hidden_path = 0;  	ctx.cfg.script_name = CGIT_SCRIPT_NAME;  	ctx.cfg.section = ""; @@ -811,6 +819,8 @@ static void print_repo(FILE *f, struct cgit_repo *repo)  	}  	if (repo->defbranch)  		fprintf(f, "repo.defbranch=%s\n", repo->defbranch); +	if (repo->default_page) +		fprintf(f, "repo.default-page=%s\n", repo->default_page);  	if (repo->extra_head_content)  		fprintf(f, "repo.extra-head-content=%s\n", repo->extra_head_content);  	if (repo->module_link) @@ -87,6 +87,7 @@ struct cgit_repo {  	char *owner;  	char *homepage;  	char *defbranch; +	char *default_page;  	char *module_link;  	struct string_list readme;  	char *section; @@ -196,6 +197,7 @@ struct cgit_config {  	char *cache_root;  	char *clone_prefix;  	char *clone_url; +	char *default_page;  	char *favicon;  	char *footer;  	char *head_include; @@ -211,6 +213,7 @@ struct cgit_config {  	char *root_title;  	char *root_desc;  	char *root_readme; +	char *root_default_page;  	char *script_name;  	char *section;  	char *repository_sort; diff --git a/cgitrc.5.txt b/cgitrc.5.txt index 6f3e952..ac86864 100644 --- a/cgitrc.5.txt +++ b/cgitrc.5.txt @@ -129,6 +129,12 @@ css::  	Default value: "/cgit.css".  May be given multiple times, each  	css URL path is added in the head section of the document in turn. +default-page:: +	Specifies the default page for repositories. This setting is only used +	if `repo.default-page` is unspecified. Possible values: "about", +	"summary", "refs", "log", "tree", "commit", "diff", "stats".  Default +	value: "summary". +  email-filter::  	Specifies a command which will be invoked to format names and email  	address of committers, authors, and taggers, as represented in various @@ -359,6 +365,10 @@ robots::  	Text used as content for the "robots" meta-tag. Default value:  	"index, nofollow". +root-default-page:: +	Specifies the default root page. Possible values are "repolist" and +	"about". Default value: "repolist". +  root-desc::  	Text printed below the heading on the repository index page. Default  	value: "a fast webinterface for the git dscm". @@ -482,6 +492,10 @@ repo.commit-sort::  	ordering. If unset, the default ordering of "git log" is used. Default  	value: unset. +repo.default-page:: +	Specifies the default page for the repository. Default value: global +	default-page. +  repo.defbranch::  	The name of the default branch for this repository. If no such branch  	exists in the repository, the first branch name (when sorted) is used @@ -51,13 +51,10 @@ static void about_fn(void)  			free(redirect);  		} else if (ctx.repo->readme.nr)  			cgit_print_repo_readme(ctx.qry.path); -		else if (ctx.repo->homepage) -			cgit_redirect(ctx.repo->homepage, false);  		else { -			char *currenturl = cgit_currenturl(); -			char *redirect = fmtalloc("%s../", currenturl); +			char *redirect = fmtalloc("%s%s/summary/", +				ctx.cfg.virtual_root, ctx.repo->url);  			cgit_redirect(redirect, false); -			free(currenturl);  			free(redirect);  		}  	} else @@ -195,10 +192,13 @@ struct cgit_cmd *cgit_get_cmd(void)  	int i;  	if (ctx.qry.page == NULL) { -		if (ctx.repo) -			ctx.qry.page = "summary"; -		else -			ctx.qry.page = "repolist"; +		if (ctx.repo) { +			if (ctx.repo->default_page && *ctx.repo->default_page) +				ctx.qry.page = ctx.repo->default_page; +			else +				ctx.qry.page = ctx.cfg.default_page; +		} else +			ctx.qry.page = ctx.cfg.root_default_page;  	}  	for (i = 0; i < sizeof(cmds)/sizeof(*cmds); i++) diff --git a/ui-repolist.c b/ui-repolist.c index d12e3dd..2390eae 100644 --- a/ui-repolist.c +++ b/ui-repolist.c @@ -321,7 +321,7 @@ void cgit_print_repolist(void)  		}  		htmlf("<tr><td class='%s'>",  		      !sorted && section ? "sublevel-repo" : "toplevel-repo"); -		cgit_summary_link(ctx.repo->name, NULL, NULL, NULL); +		cgit_repo_link(ctx.repo->name, NULL, NULL, NULL);  		html("</td><td>");  		repourl = cgit_repourl(ctx.repo->url);  		html_link_open(repourl, NULL, NULL); diff --git a/ui-shared.c b/ui-shared.c index baea6f2..81e1f46 100644 --- a/ui-shared.c +++ b/ui-shared.c @@ -328,10 +328,16 @@ static void reporevlink(const char *page, const char *name, const char *title,  	html("</a>");  } +void cgit_repo_link(const char *name, const char *title, const char *class, +			const char *head) +{ +	reporevlink(NULL, name, title, class, head, NULL, NULL); +} +  void cgit_summary_link(const char *name, const char *title, const char *class,  		       const char *head)  { -	reporevlink(NULL, name, title, class, head, NULL, NULL); +	reporevlink("summary", name, title, class, head, NULL, NULL);  }  void cgit_tag_link(const char *name, const char *title, const char *class, @@ -1035,7 +1041,7 @@ static void print_header(void)  	if (ctx.repo) {  		cgit_index_link("index", NULL, NULL, NULL, NULL, 0, 1);  		html(" : "); -		cgit_summary_link(ctx.repo->name, NULL, NULL, NULL); +		cgit_repo_link(ctx.repo->name, NULL, NULL, NULL);  		if (ctx.env.authenticated) {  			html("</td><td class='form'>");  			html("<form method='get'>\n"); @@ -1130,7 +1136,7 @@ void cgit_print_pageheader(void)  		html("</form>\n");  	} else if (ctx.env.authenticated) {  		char *currenturl = cgit_currenturl(); -		site_link(NULL, "index", NULL, hc("repolist"), NULL, NULL, 0, 1); +		site_link("repolist", "index", NULL, hc("repolist"), NULL, NULL, 0, 1);  		if (ctx.cfg.root_readme)  			site_link("about", "about", NULL, hc("about"),  				  NULL, NULL, 0, 1); diff --git a/ui-shared.h b/ui-shared.h index 6964873..4d14858 100644 --- a/ui-shared.h +++ b/ui-shared.h @@ -17,6 +17,8 @@ extern void cgit_add_clone_urls(void (*fn)(const char *));  extern void cgit_index_link(const char *name, const char *title,  			    const char *class, const char *pattern, const char *sort, int ofs, int always_root); +extern void cgit_repo_link(const char *name, const char *title, +				  const char *class, const char *head);  extern void cgit_summary_link(const char *name, const char *title,  			      const char *class, const char *head);  extern void cgit_tag_link(const char *name, const char *title, | 
