diff options
| author | Lars Hjemli <hjemli@gmail.com> | 2006-12-15 18:17:36 +0100 | 
|---|---|---|
| committer | Lars Hjemli <hjemli@gmail.com> | 2006-12-15 18:17:36 +0100 | 
| commit | 2101e26fd68f816e77de62b93df4c32fd1110d0c (patch) | |
| tree | d70d28734c4fbfd0a4e4a40bcfd445eb50dc1666 /ui-log.c | |
| parent | Add simple pager to log page (diff) | |
| download | cgit-2101e26fd68f816e77de62b93df4c32fd1110d0c.tar.gz cgit-2101e26fd68f816e77de62b93df4c32fd1110d0c.tar.bz2 cgit-2101e26fd68f816e77de62b93df4c32fd1110d0c.zip | |
Add a common commit parser
Make a better commit parser, replacing the ugly one in ui-log.c
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
Diffstat (limited to '')
| -rw-r--r-- | ui-log.c | 76 | 
1 files changed, 13 insertions, 63 deletions
| @@ -8,69 +8,14 @@  #include "cgit.h" -static int get_one_line(char *txt) +void print_commit(struct commit *commit)  { -	char *t; - -	for(t=txt; *t != '\n' && t != '\0'; t++) -		; -	*t = '\0'; -	return t-txt-1; -} - -static void cgit_print_commit_shortlog(struct commit *commit) -{ -	char *h, *t, *p;  -	char *tree = NULL, *author = NULL, *subject = NULL; -	int len; -	time_t sec; -	struct tm *time;  	char buf[32]; +	struct commitinfo *info; +	struct tm *time; -	h = t = commit->buffer; -	 -	if (strncmp(h, "tree ", 5)) -		die("Bad commit format: %s",  -		    sha1_to_hex(commit->object.sha1)); -	 -	len = get_one_line(h); -	tree = h+5; -	h += len + 2; - -	while (!strncmp(h, "parent ", 7)) -		h += get_one_line(h) + 2; -	 -	if (!strncmp(h, "author ", 7)) { -		author = h+7; -		h += get_one_line(h) + 2; -		t = author; -		while(t!=h && *t!='<')  -			t++; -		*t='\0'; -		p = t; -		while(--t!=author && *t==' ') -			*t='\0'; -		while(++p!=h && *p!='>') -			; -		while(++p!=h && !isdigit(*p)) -			; - -		t = p; -		while(++p && isdigit(*p)) -			; -		*p = '\0'; -		sec = atoi(t); -		time = gmtime(&sec); -	} - -	while((len = get_one_line(h)) > 0) -		h += len+2; - -	h++; -	len = get_one_line(h); - -	subject = h; - +	info = cgit_parse_commit(commit); +	time = gmtime(&commit->date);  	html("<tr><td>");  	strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", time);  	html_txt(buf); @@ -78,18 +23,23 @@ static void cgit_print_commit_shortlog(struct commit *commit)  	char *qry = fmt("id=%s", sha1_to_hex(commit->object.sha1));  	char *url = cgit_pageurl(cgit_query_repo, "view", qry);  	html_link_open(url, NULL, NULL); -	html_txt(subject); +	html_txt(info->subject);  	html_link_close();  	html("</td><td>"); -	html_txt(author); +	html_txt(info->author);  	html("</td><td><a href='");  	html_attr(cgit_pageurl(cgit_query_repo, "tree",   			       fmt("id=%s",   				   sha1_to_hex(commit->tree->object.sha1))));  	html("'>tree</a>");  	html("</td></tr>\n"); +	free(info->author); +	free(info->committer); +	free(info->subject); +	free(info);  } +  void cgit_print_log(const char *tip, int ofs, int cnt)  {  	struct rev_info rev; @@ -120,7 +70,7 @@ void cgit_print_log(const char *tip, int ofs, int cnt)  	}  	for (i = 0; i < cnt && (commit = get_revision(&rev)) != NULL; i++) { -		cgit_print_commit_shortlog(commit); +		print_commit(commit);  		free(commit->buffer);  		commit->buffer = NULL;  		free_commit_list(commit->parents); | 
