Add argument parsing + switch for uncached operation
This adds support for the following options to cgit: --root=<path> --cache=<path> --nocache --query=<querystring> --repo=<reponame> --page=<pagename> --head=<branchname> --sha1=<sha1> --ofs=<number> On startup, /etc/cgitrc is parsed, followed by argument parsing and finally querystring parsing. If --nocache is specified (or set in /etc/gitrc), caching is disabled and cgit instead generates pages to stdout. The combined effect of these two changes makes testing/debugging a lot less painfull. Signed-off-by: Lars Hjemli <hjemli@gmail.com>
This commit is contained in:
		
							
								
								
									
										50
									
								
								cgit.c
									
									
									
									
									
								
							
							
						
						
									
										50
									
								
								cgit.c
									
									
									
									
									
								
							| @@ -96,15 +96,59 @@ static void cgit_print_cache(struct cacheitem *item) | |||||||
| 	close(fd); | 	close(fd); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | static void cgit_parse_args(int argc, const char **argv) | ||||||
|  | { | ||||||
|  | 	int i; | ||||||
|  |  | ||||||
|  | 	for (i = 1; i < argc; i++) { | ||||||
|  | 		if (!strncmp(argv[i], "--root=", 7)) { | ||||||
|  | 			cgit_root = xstrdup(argv[i]+7); | ||||||
|  | 		} | ||||||
|  | 		if (!strncmp(argv[i], "--cache=", 8)) { | ||||||
|  | 			cgit_cache_root = xstrdup(argv[i]+8); | ||||||
|  | 		} | ||||||
|  | 		if (!strcmp(argv[i], "--nocache")) { | ||||||
|  | 			cgit_nocache = 1; | ||||||
|  | 		} | ||||||
|  | 		if (!strncmp(argv[i], "--query=", 8)) { | ||||||
|  | 			cgit_querystring = xstrdup(argv[i]+8); | ||||||
|  | 		} | ||||||
|  | 		if (!strncmp(argv[i], "--repo=", 7)) { | ||||||
|  | 			cgit_query_repo = xstrdup(argv[i]+7); | ||||||
|  | 		} | ||||||
|  | 		if (!strncmp(argv[i], "--page=", 7)) { | ||||||
|  | 			cgit_query_page = xstrdup(argv[i]+7); | ||||||
|  | 		} | ||||||
|  | 		if (!strncmp(argv[i], "--head=", 7)) { | ||||||
|  | 			cgit_query_head = xstrdup(argv[i]+7); | ||||||
|  | 			cgit_query_has_symref = 1; | ||||||
|  | 		} | ||||||
|  | 		if (!strncmp(argv[i], "--sha1=", 7)) { | ||||||
|  | 			cgit_query_sha1 = xstrdup(argv[i]+7); | ||||||
|  | 			cgit_query_has_sha1 = 1; | ||||||
|  | 		} | ||||||
|  | 		if (!strncmp(argv[i], "--ofs=", 6)) { | ||||||
|  | 			cgit_query_ofs = atoi(argv[i]+6); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
| int main(int argc, const char **argv) | int main(int argc, const char **argv) | ||||||
| { | { | ||||||
| 	struct cacheitem item; | 	struct cacheitem item; | ||||||
|  |  | ||||||
| 	cgit_read_config("/etc/cgitrc", cgit_global_config_cb); | 	cgit_read_config("/etc/cgitrc", cgit_global_config_cb); | ||||||
| 	cgit_querystring = xstrdup(getenv("QUERY_STRING")); | 	if (getenv("QUERY_STRING")) | ||||||
|  | 		cgit_querystring = xstrdup(getenv("QUERY_STRING")); | ||||||
|  | 	cgit_parse_args(argc, argv); | ||||||
| 	cgit_parse_query(cgit_querystring, cgit_querystring_cb); | 	cgit_parse_query(cgit_querystring, cgit_querystring_cb); | ||||||
|  |  | ||||||
| 	cgit_check_cache(&item); | 	if (cgit_nocache) { | ||||||
| 	cgit_print_cache(&item); | 		item.fd = STDOUT_FILENO; | ||||||
|  | 		cgit_fill_cache(&item); | ||||||
|  | 	} else { | ||||||
|  | 		cgit_check_cache(&item); | ||||||
|  | 		cgit_print_cache(&item); | ||||||
|  | 	} | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										1
									
								
								cgit.h
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								cgit.h
									
									
									
									
									
								
							| @@ -33,6 +33,7 @@ extern char *cgit_logo_link; | |||||||
| extern char *cgit_virtual_root; | extern char *cgit_virtual_root; | ||||||
| extern char *cgit_cache_root; | extern char *cgit_cache_root; | ||||||
|  |  | ||||||
|  | extern int cgit_nocache; | ||||||
| extern int cgit_max_lock_attempts; | extern int cgit_max_lock_attempts; | ||||||
| extern int cgit_cache_root_ttl; | extern int cgit_cache_root_ttl; | ||||||
| extern int cgit_cache_repo_ttl; | extern int cgit_cache_repo_ttl; | ||||||
|   | |||||||
							
								
								
									
										3
									
								
								shared.c
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								shared.c
									
									
									
									
									
								
							| @@ -17,6 +17,7 @@ char *cgit_virtual_root = NULL; | |||||||
|  |  | ||||||
| char *cgit_cache_root   = "/var/cache/cgit"; | char *cgit_cache_root   = "/var/cache/cgit"; | ||||||
|  |  | ||||||
|  | int cgit_nocache               =  0; | ||||||
| int cgit_max_lock_attempts     =  5; | int cgit_max_lock_attempts     =  5; | ||||||
| int cgit_cache_root_ttl        =  5; | int cgit_cache_root_ttl        =  5; | ||||||
| int cgit_cache_repo_ttl        =  5; | int cgit_cache_repo_ttl        =  5; | ||||||
| @@ -54,6 +55,8 @@ void cgit_global_config_cb(const char *name, const char *value) | |||||||
| 		cgit_logo_link = xstrdup(value); | 		cgit_logo_link = xstrdup(value); | ||||||
| 	else if (!strcmp(name, "virtual-root")) | 	else if (!strcmp(name, "virtual-root")) | ||||||
| 		cgit_virtual_root = xstrdup(value); | 		cgit_virtual_root = xstrdup(value); | ||||||
|  | 	else if (!strcmp(name, "nocache")) | ||||||
|  | 		cgit_nocache = atoi(value); | ||||||
| } | } | ||||||
|  |  | ||||||
| void cgit_repo_config_cb(const char *name, const char *value) | void cgit_repo_config_cb(const char *name, const char *value) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Lars Hjemli
					Lars Hjemli