diff options
| author | Lars Hjemli <hjemli@gmail.com> | 2008-04-08 21:29:21 +0200 | 
|---|---|---|
| committer | Lars Hjemli <hjemli@gmail.com> | 2008-04-08 21:29:21 +0200 | 
| commit | 23296ad648c0e2a9e3cf40a3de322b10ad25cce3 (patch) | |
| tree | 136493d8228b0ff4971feb06b0e8aee296367b00 /shared.c | |
| parent | Use GIT-1.5.5-rc2 (diff) | |
| parent | Reset ctx.repo to NULL when the config parser is finished (diff) | |
| download | cgit-23296ad648c0e2a9e3cf40a3de322b10ad25cce3.tar.gz cgit-23296ad648c0e2a9e3cf40a3de322b10ad25cce3.tar.bz2 cgit-23296ad648c0e2a9e3cf40a3de322b10ad25cce3.zip | |
Merge branch 'lh/cleanup'
* lh/cleanup: (21 commits)
  Reset ctx.repo to NULL when the config parser is finished
  Move cgit_parse_query() from parsing.c to html.c as http_parse_querystring()
  Move function for configfile parsing into configfile.[ch]
  Add cache.h
  Remove global and obsolete cgit_cmd
  Makefile: copy the QUIET constructs from the Makefile in git.git
  Move cgit_version from shared.c to cgit.c
  Makefile: autobuild dependency rules
  Initial Makefile cleanup
  Move non-generic functions from shared.c to cgit.c
  Add ui-shared.h
  Add separate header-files for each page/view
  Refactor snapshot support
  Add command dispatcher
  Remove obsolete cacheitem parameter to ui-functions
  Add struct cgit_page to cgit_context
  Introduce html.h
  Improve initialization of git directory
  Move cgit_repo into cgit_context
  Add all config variables into struct cgit_context
  ...
Diffstat (limited to '')
| -rw-r--r-- | shared.c | 257 | 
1 files changed, 40 insertions, 217 deletions
| @@ -8,77 +8,10 @@  #include "cgit.h" -struct repolist cgit_repolist; -struct repoinfo *cgit_repo; +struct cgit_repolist cgit_repolist; +struct cgit_context ctx;  int cgit_cmd; -const char *cgit_version = CGIT_VERSION; - -char *cgit_root_title   = "Git repository browser"; -char *cgit_css          = "/cgit.css"; -char *cgit_logo         = "/git-logo.png"; -char *cgit_index_header = NULL; -char *cgit_index_info   = NULL; -char *cgit_logo_link    = "http://www.kernel.org/pub/software/scm/git/docs/"; -char *cgit_module_link  = "./?repo=%s&page=commit&id=%s"; -char *cgit_agefile      = "info/web/last-modified"; -char *cgit_virtual_root = NULL; -char *cgit_script_name  = CGIT_SCRIPT_NAME; -char *cgit_cache_root   = CGIT_CACHE_ROOT; -char *cgit_repo_group   = NULL; -char *cgit_robots       = "index, nofollow"; -char *cgit_clone_prefix = NULL; - -int cgit_nocache               =  0; -int cgit_snapshots             =  0; -int cgit_enable_index_links    =  0; -int cgit_enable_log_filecount  =  0; -int cgit_enable_log_linecount  =  0; -int cgit_max_lock_attempts     =  5; -int cgit_cache_root_ttl        =  5; -int cgit_cache_repo_ttl        =  5; -int cgit_cache_dynamic_ttl     =  5; -int cgit_cache_static_ttl      = -1; -int cgit_cache_max_create_time =  5; -int cgit_summary_log           =  0; -int cgit_summary_tags          =  0; -int cgit_summary_branches      =  0; -int cgit_renamelimit           = -1; - -int cgit_max_msg_len = 60; -int cgit_max_repodesc_len = 60; -int cgit_max_commit_count = 50; - -int cgit_query_has_symref = 0; -int cgit_query_has_sha1   = 0; - -char *cgit_querystring  = NULL; -char *cgit_query_repo   = NULL; -char *cgit_query_page   = NULL; -char *cgit_query_head   = NULL; -char *cgit_query_search = NULL; -char *cgit_query_grep   = NULL; -char *cgit_query_sha1   = NULL; -char *cgit_query_sha2   = NULL; -char *cgit_query_path   = NULL; -char *cgit_query_name   = NULL; -int   cgit_query_ofs    = 0; - -int htmlfd = 0; - - -int cgit_get_cmd_index(const char *cmd) -{ -	static char *cmds[] = {"log", "commit", "diff", "tree", "blob", -			       "snapshot", "tag", "refs", "patch", NULL}; -	int i; - -	for(i = 0; cmds[i]; i++) -		if (!strcmp(cmd, cmds[i])) -			return i + 1; -	return 0; -} -  int chk_zero(int result, char *msg)  {  	if (result != 0) @@ -100,9 +33,9 @@ int chk_non_negative(int result, char *msg)  	return result;  } -struct repoinfo *add_repo(const char *url) +struct cgit_repo *cgit_add_repo(const char *url)  { -	struct repoinfo *ret; +	struct cgit_repo *ret;  	if (++cgit_repolist.count > cgit_repolist.length) {  		if (cgit_repolist.length == 0) @@ -111,7 +44,7 @@ struct repoinfo *add_repo(const char *url)  			cgit_repolist.length *= 2;  		cgit_repolist.repos = xrealloc(cgit_repolist.repos,  					       cgit_repolist.length * -					       sizeof(struct repoinfo)); +					       sizeof(struct cgit_repo));  	}  	ret = &cgit_repolist.repos[cgit_repolist.count-1]; @@ -120,20 +53,20 @@ struct repoinfo *add_repo(const char *url)  	ret->path = NULL;  	ret->desc = "[no description]";  	ret->owner = NULL; -	ret->group = cgit_repo_group; +	ret->group = ctx.cfg.repo_group;  	ret->defbranch = "master"; -	ret->snapshots = cgit_snapshots; -	ret->enable_log_filecount = cgit_enable_log_filecount; -	ret->enable_log_linecount = cgit_enable_log_linecount; -	ret->module_link = cgit_module_link; +	ret->snapshots = ctx.cfg.snapshots; +	ret->enable_log_filecount = ctx.cfg.enable_log_filecount; +	ret->enable_log_linecount = ctx.cfg.enable_log_linecount; +	ret->module_link = ctx.cfg.module_link;  	ret->readme = NULL;  	return ret;  } -struct repoinfo *cgit_get_repoinfo(const char *url) +struct cgit_repo *cgit_get_repoinfo(const char *url)  {  	int i; -	struct repoinfo *repo; +	struct cgit_repo *repo;  	for (i=0; i<cgit_repolist.count; i++) {  		repo = &cgit_repolist.repos[i]; @@ -143,131 +76,6 @@ struct repoinfo *cgit_get_repoinfo(const char *url)  	return NULL;  } -void cgit_global_config_cb(const char *name, const char *value) -{ -	if (!strcmp(name, "root-title")) -		cgit_root_title = xstrdup(value); -	else if (!strcmp(name, "css")) -		cgit_css = xstrdup(value); -	else if (!strcmp(name, "logo")) -		cgit_logo = xstrdup(value); -	else if (!strcmp(name, "index-header")) -		cgit_index_header = xstrdup(value); -	else if (!strcmp(name, "index-info")) -		cgit_index_info = xstrdup(value); -	else if (!strcmp(name, "logo-link")) -		cgit_logo_link = xstrdup(value); -	else if (!strcmp(name, "module-link")) -		cgit_module_link = xstrdup(value); -	else if (!strcmp(name, "virtual-root")) { -		cgit_virtual_root = trim_end(value, '/'); -		if (!cgit_virtual_root && (!strcmp(value, "/"))) -			cgit_virtual_root = ""; -	} else if (!strcmp(name, "nocache")) -		cgit_nocache = atoi(value); -	else if (!strcmp(name, "snapshots")) -		cgit_snapshots = cgit_parse_snapshots_mask(value); -	else if (!strcmp(name, "enable-index-links")) -		cgit_enable_index_links = atoi(value); -	else if (!strcmp(name, "enable-log-filecount")) -		cgit_enable_log_filecount = atoi(value); -	else if (!strcmp(name, "enable-log-linecount")) -		cgit_enable_log_linecount = atoi(value); -	else if (!strcmp(name, "cache-root")) -		cgit_cache_root = xstrdup(value); -	else if (!strcmp(name, "cache-root-ttl")) -		cgit_cache_root_ttl = atoi(value); -	else if (!strcmp(name, "cache-repo-ttl")) -		cgit_cache_repo_ttl = atoi(value); -	else if (!strcmp(name, "cache-static-ttl")) -		cgit_cache_static_ttl = atoi(value); -	else if (!strcmp(name, "cache-dynamic-ttl")) -		cgit_cache_dynamic_ttl = atoi(value); -	else if (!strcmp(name, "max-message-length")) -		cgit_max_msg_len = atoi(value); -	else if (!strcmp(name, "max-repodesc-length")) -		cgit_max_repodesc_len = atoi(value); -	else if (!strcmp(name, "max-commit-count")) -		cgit_max_commit_count = atoi(value); -	else if (!strcmp(name, "summary-log")) -		cgit_summary_log = atoi(value); -	else if (!strcmp(name, "summary-branches")) -		cgit_summary_branches = atoi(value); -	else if (!strcmp(name, "summary-tags")) -		cgit_summary_tags = atoi(value); -	else if (!strcmp(name, "agefile")) -		cgit_agefile = xstrdup(value); -	else if (!strcmp(name, "renamelimit")) -		cgit_renamelimit = atoi(value); -	else if (!strcmp(name, "robots")) -		cgit_robots = xstrdup(value); -	else if (!strcmp(name, "clone-prefix")) -		cgit_clone_prefix = xstrdup(value); -	else if (!strcmp(name, "repo.group")) -		cgit_repo_group = xstrdup(value); -	else if (!strcmp(name, "repo.url")) -		cgit_repo = add_repo(value); -	else if (!strcmp(name, "repo.name")) -		cgit_repo->name = xstrdup(value); -	else if (cgit_repo && !strcmp(name, "repo.path")) -		cgit_repo->path = trim_end(value, '/'); -	else if (cgit_repo && !strcmp(name, "repo.clone-url")) -		cgit_repo->clone_url = xstrdup(value); -	else if (cgit_repo && !strcmp(name, "repo.desc")) -		cgit_repo->desc = xstrdup(value); -	else if (cgit_repo && !strcmp(name, "repo.owner")) -		cgit_repo->owner = xstrdup(value); -	else if (cgit_repo && !strcmp(name, "repo.defbranch")) -		cgit_repo->defbranch = xstrdup(value); -	else if (cgit_repo && !strcmp(name, "repo.snapshots")) -		cgit_repo->snapshots = cgit_snapshots & cgit_parse_snapshots_mask(value); /* XXX: &? */ -	else if (cgit_repo && !strcmp(name, "repo.enable-log-filecount")) -		cgit_repo->enable_log_filecount = cgit_enable_log_filecount * atoi(value); -	else if (cgit_repo && !strcmp(name, "repo.enable-log-linecount")) -		cgit_repo->enable_log_linecount = cgit_enable_log_linecount * atoi(value); -	else if (cgit_repo && !strcmp(name, "repo.module-link")) -		cgit_repo->module_link= xstrdup(value); -	else if (cgit_repo && !strcmp(name, "repo.readme") && value != NULL) { -		if (*value == '/') -			cgit_repo->readme = xstrdup(value); -		else -			cgit_repo->readme = xstrdup(fmt("%s/%s", cgit_repo->path, value)); -	} else if (!strcmp(name, "include")) -		cgit_read_config(value, cgit_global_config_cb); -} - -void cgit_querystring_cb(const char *name, const char *value) -{ -	if (!strcmp(name,"r")) { -		cgit_query_repo = xstrdup(value); -		cgit_repo = cgit_get_repoinfo(value); -	} else if (!strcmp(name, "p")) { -		cgit_query_page = xstrdup(value); -		cgit_cmd = cgit_get_cmd_index(value); -	} else if (!strcmp(name, "url")) { -		cgit_parse_url(value); -	} else if (!strcmp(name, "qt")) { -		cgit_query_grep = xstrdup(value); -	} else if (!strcmp(name, "q")) { -		cgit_query_search = xstrdup(value); -	} else if (!strcmp(name, "h")) { -		cgit_query_head = xstrdup(value); -		cgit_query_has_symref = 1; -	} else if (!strcmp(name, "id")) { -		cgit_query_sha1 = xstrdup(value); -		cgit_query_has_sha1 = 1; -	} else if (!strcmp(name, "id2")) { -		cgit_query_sha2 = xstrdup(value); -		cgit_query_has_sha1 = 1; -	} else if (!strcmp(name, "ofs")) { -		cgit_query_ofs = atoi(value); -	} else if (!strcmp(name, "path")) { -		cgit_query_path = trim_end(value, '/'); -	} else if (!strcmp(name, "name")) { -		cgit_query_name = xstrdup(value); -	} -} -  void *cgit_free_commitinfo(struct commitinfo *info)  {  	free(info->author); @@ -281,18 +89,6 @@ void *cgit_free_commitinfo(struct commitinfo *info)  	return NULL;  } -int hextoint(char c) -{ -	if (c >= 'a' && c <= 'f') -		return 10 + c - 'a'; -	else if (c >= 'A' && c <= 'F') -		return 10 + c - 'A'; -	else if (c >= '0' && c <= '9') -		return c - '0'; -	else -		return -1; -} -  char *trim_end(const char *str, char c)  {  	int len; @@ -491,7 +287,7 @@ void cgit_diff_tree(const unsigned char *old_sha1,  	diff_setup(&opt);  	opt.output_format = DIFF_FORMAT_CALLBACK;  	opt.detect_rename = 1; -	opt.rename_limit = cgit_renamelimit; +	opt.rename_limit = ctx.cfg.renamelimit;  	DIFF_OPT_SET(&opt, RECURSIVE);  	opt.format_callback = cgit_diff_tree_cb;  	opt.format_callback_data = fn; @@ -519,3 +315,30 @@ void cgit_diff_commit(struct commit *commit, filepair_fn fn)  		old_sha1 = commit->parents->item->object.sha1;  	cgit_diff_tree(old_sha1, commit->object.sha1, fn, NULL);  } + +int cgit_parse_snapshots_mask(const char *str) +{ +	const struct cgit_snapshot_format *f; +	static const char *delim = " \t,:/|;"; +	int tl, sl, rv = 0; + +	/* favor legacy setting */ +	if(atoi(str)) +		return 1; +	for(;;) { +		str += strspn(str,delim); +		tl = strcspn(str,delim); +		if (!tl) +			break; +		for (f = cgit_snapshot_formats; f->suffix; f++) { +			sl = strlen(f->suffix); +			if((tl == sl && !strncmp(f->suffix, str, tl)) || +			   (tl == sl-1 && !strncmp(f->suffix+1, str, tl-1))) { +				rv |= f->bit; +				break; +			} +		} +		str += tl; +	} +	return rv; +} | 
