diff options
Diffstat (limited to '')
| -rw-r--r-- | cgit.c | 27 | 
1 files changed, 22 insertions, 5 deletions
| @@ -181,9 +181,14 @@ void config_cb(const char *name, const char *value)  		ctx.cfg.max_repo_count = atoi(value);  	else if (!strcmp(name, "max-commit-count"))  		ctx.cfg.max_commit_count = atoi(value); +	else if (!strcmp(name, "project-list")) +		ctx.cfg.project_list = xstrdup(expand_macros(value));  	else if (!strcmp(name, "scan-path"))  		if (!ctx.cfg.nocache && ctx.cfg.cache_size)  			process_cached_repolist(expand_macros(value)); +		else if (ctx.cfg.project_list) +			scan_projects(expand_macros(value), +				      ctx.cfg.project_list, repo_config);  		else  			scan_tree(expand_macros(value), repo_config);  	else if (!strcmp(name, "source-filter")) @@ -295,6 +300,7 @@ static void prepare_context(struct cgit_context *ctx)  	ctx->cfg.max_blob_size = 0;  	ctx->cfg.max_stats = 0;  	ctx->cfg.module_link = "./?repo=%s&page=commit&id=%s"; +	ctx->cfg.project_list = NULL;  	ctx->cfg.renamelimit = -1;  	ctx->cfg.robots = "index, nofollow";  	ctx->cfg.root_title = "Git repository browser"; @@ -574,7 +580,10 @@ static int generate_cached_repolist(const char *path, const char *cached_rc)  		return errno;  	}  	idx = cgit_repolist.count; -	scan_tree(path, repo_config); +	if (ctx.cfg.project_list) +		scan_projects(path, ctx.cfg.project_list, repo_config); +	else +		scan_tree(path, repo_config);  	print_repolist(f, &cgit_repolist, idx);  	if (rename(locked_rc, cached_rc))  		fprintf(stderr, "[cgit] Error renaming %s to %s: %s (%d)\n", @@ -588,17 +597,25 @@ static void process_cached_repolist(const char *path)  	struct stat st;  	char *cached_rc;  	time_t age; +	unsigned long hash; -	cached_rc = xstrdup(fmt("%s/rc-%8x", ctx.cfg.cache_root, -		hash_str(path))); +	hash = hash_str(path); +	if (ctx.cfg.project_list) +		hash += hash_str(ctx.cfg.project_list); +	cached_rc = xstrdup(fmt("%s/rc-%8x", ctx.cfg.cache_root, hash));  	if (stat(cached_rc, &st)) {  		/* Nothing is cached, we need to scan without forking. And  		 * if we fail to generate a cached repolist, we need to  		 * invoke scan_tree manually.  		 */ -		if (generate_cached_repolist(path, cached_rc)) -			scan_tree(path, repo_config); +		if (generate_cached_repolist(path, cached_rc)) { +			if (ctx.cfg.project_list) +				scan_projects(path, ctx.cfg.project_list, +					      repo_config); +			else +				scan_tree(path, repo_config); +		}  		return;  	} | 
