Merge branch 'lh/readme'
This commit is contained in:
		
							
								
								
									
										8
									
								
								cgit.c
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								cgit.c
									
									
									
									
									
								
							| @@ -72,11 +72,7 @@ void repo_config(struct cgit_repo *repo, const char *name, const char *value) | ||||
| 	else if (!strcmp(name, "section")) | ||||
| 		repo->section = xstrdup(value); | ||||
| 	else if (!strcmp(name, "readme") && value != NULL) { | ||||
| 		char *colon; | ||||
| 		if (*value == '/' || ((colon = strchr(value, ':')) != NULL && colon != value && *(colon + 1) != '\0')) | ||||
| 			repo->readme = xstrdup(value); | ||||
| 		else | ||||
| 			repo->readme = xstrdup(fmt("%s/%s", repo->path, value)); | ||||
| 		repo->readme = xstrdup(value); | ||||
| 	} else if (ctx.cfg.enable_filter_overrides) { | ||||
| 		if (!strcmp(name, "about-filter")) | ||||
| 			repo->about_filter = new_filter(value, 0); | ||||
| @@ -97,6 +93,8 @@ void config_cb(const char *name, const char *value) | ||||
| 		ctx.repo->path = trim_end(value, '/'); | ||||
| 	else if (ctx.repo && !prefixcmp(name, "repo.")) | ||||
| 		repo_config(ctx.repo, name + 5, value); | ||||
| 	else if (!strcmp(name, "readme")) | ||||
| 		ctx.cfg.readme = xstrdup(value); | ||||
| 	else if (!strcmp(name, "root-title")) | ||||
| 		ctx.cfg.root_title = xstrdup(value); | ||||
| 	else if (!strcmp(name, "root-desc")) | ||||
|   | ||||
							
								
								
									
										1
									
								
								cgit.h
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								cgit.h
									
									
									
									
									
								
							| @@ -168,6 +168,7 @@ struct cgit_config { | ||||
| 	char *logo_link; | ||||
| 	char *module_link; | ||||
| 	char *project_list; | ||||
| 	char *readme; | ||||
| 	char *robots; | ||||
| 	char *root_title; | ||||
| 	char *root_desc; | ||||
|   | ||||
| @@ -234,6 +234,10 @@ project-list:: | ||||
| 	should loaded as git repositories. This must be defined prior to | ||||
| 	scan-path. Default value: none. See also: scan-path. | ||||
|  | ||||
| readme:: | ||||
| 	Text which will be used as default value for "repo.readme". Default | ||||
| 	value: none. | ||||
|  | ||||
| remove-suffix:: | ||||
| 	If set to "1" and scan-path is enabled, if any repositories are found | ||||
| 	with a suffix of ".git", this suffix will be removed for the url and | ||||
| @@ -373,7 +377,7 @@ repo.readme:: | ||||
| 	A path (relative to <repo.path>) which specifies a file to include | ||||
| 	verbatim as the "About" page for this repo. You may also specify a | ||||
| 	git refspec by head or by hash by prepending the refspec followed by | ||||
| 	a colon. For example, "master:docs/readme.mkd" Default value: none. | ||||
| 	a colon. For example, "master:docs/readme.mkd" Default value: <readme>. | ||||
|  | ||||
| repo.snapshots:: | ||||
| 	A mask of allowed snapshot-formats for this repo, restricted by the | ||||
|   | ||||
| @@ -110,9 +110,11 @@ static void add_repo(const char *base, const char *path, repo_config_fn fn) | ||||
| 	if (!stat(p, &st)) | ||||
| 		readfile(p, &repo->desc, &size); | ||||
|  | ||||
| 	p = fmt("%s/README.html", path); | ||||
| 	if (!stat(p, &st)) | ||||
| 		repo->readme = "README.html"; | ||||
| 	if (!repo->readme) { | ||||
| 		p = fmt("%s/README.html", path); | ||||
| 		if (!stat(p, &st)) | ||||
| 			repo->readme = "README.html"; | ||||
| 	} | ||||
|  | ||||
| 	p = fmt("%s/cgitrc", path); | ||||
| 	if (!stat(p, &st)) { | ||||
|   | ||||
							
								
								
									
										2
									
								
								shared.c
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								shared.c
									
									
									
									
									
								
							| @@ -62,7 +62,7 @@ struct cgit_repo *cgit_add_repo(const char *url) | ||||
| 	ret->enable_subject_links = ctx.cfg.enable_subject_links; | ||||
| 	ret->max_stats = ctx.cfg.max_stats; | ||||
| 	ret->module_link = ctx.cfg.module_link; | ||||
| 	ret->readme = NULL; | ||||
| 	ret->readme = ctx.cfg.readme; | ||||
| 	ret->mtime = -1; | ||||
| 	ret->about_filter = ctx.cfg.about_filter; | ||||
| 	ret->commit_filter = ctx.cfg.commit_filter; | ||||
|   | ||||
							
								
								
									
										42
									
								
								ui-summary.c
									
									
									
									
									
								
							
							
						
						
									
										42
									
								
								ui-summary.c
									
									
									
									
									
								
							| @@ -70,33 +70,47 @@ void cgit_print_summary() | ||||
|  | ||||
| void cgit_print_repo_readme(char *path) | ||||
| { | ||||
| 	char *slash, *tmp, *colon, *ref = 0; | ||||
| 	char *slash, *tmp, *colon, *ref; | ||||
|  | ||||
| 	if (!ctx.repo->readme) | ||||
| 	if (!ctx.repo->readme || !(*ctx.repo->readme)) | ||||
| 		return; | ||||
|  | ||||
| 	ref = NULL; | ||||
|  | ||||
| 	/* Check if the readme is tracked in the git repo. */ | ||||
| 	colon = strchr(ctx.repo->readme, ':'); | ||||
| 	if (colon && strlen(colon) > 1) { | ||||
| 		*colon = '\0'; | ||||
| 		ref = ctx.repo->readme; | ||||
| 		ctx.repo->readme = colon + 1; | ||||
| 		if (!(*ctx.repo->readme)) | ||||
| 			return; | ||||
| 	} | ||||
|  | ||||
| 	/* Prepend repo path to relative readme path unless tracked. */ | ||||
| 	if (!ref && *ctx.repo->readme != '/') | ||||
| 		ctx.repo->readme = xstrdup(fmt("%s/%s", ctx.repo->path, | ||||
| 					       ctx.repo->readme)); | ||||
|  | ||||
| 	/* If a subpath is specified for the about page, make it relative | ||||
| 	 * to the directory containing the configured readme. | ||||
| 	 */ | ||||
| 	if (path) { | ||||
| 		slash = strrchr(ctx.repo->readme, '/'); | ||||
| 		if (!slash) { | ||||
| 			slash = strchr(ctx.repo->readme, ':'); | ||||
| 			if (!slash) | ||||
| 			if (!colon) | ||||
| 				return; | ||||
| 			slash = colon; | ||||
| 		} | ||||
| 		tmp = xmalloc(slash - ctx.repo->readme + 1 + strlen(path) + 1); | ||||
| 		strncpy(tmp, ctx.repo->readme, slash - ctx.repo->readme + 1); | ||||
| 		strcpy(tmp + (slash - ctx.repo->readme + 1), path); | ||||
| 	} else | ||||
| 		tmp = ctx.repo->readme; | ||||
| 	colon = strchr(tmp, ':'); | ||||
| 	if (colon && strlen(colon) > 1) { | ||||
| 		*colon = '\0'; | ||||
| 		ref = tmp; | ||||
| 		tmp = colon + 1; | ||||
| 		while ((*tmp == '/' || *tmp == ':') && *tmp != '\0') | ||||
| 			++tmp; | ||||
| 		if (!(*tmp)) | ||||
| 			return; | ||||
| 	} | ||||
|  | ||||
| 	/* Print the calculated readme, either from the git repo or from the | ||||
| 	 * filesystem, while applying the about-filter. | ||||
| 	 */ | ||||
| 	html("<div id='summary'>"); | ||||
| 	if (ctx.repo->about_filter) | ||||
| 		cgit_open_filter(ctx.repo->about_filter); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Lars Hjemli
					Lars Hjemli