diff options
Diffstat (limited to 'ui-log.c')
| -rw-r--r-- | ui-log.c | 71 | 
1 files changed, 64 insertions, 7 deletions
| @@ -31,21 +31,57 @@ void inspect_files(struct diff_filepair *pair)  		cgit_diff_files(pair->one->sha1, pair->two->sha1, count_lines);  } +void show_commit_decorations(struct commit *commit) +{ +	struct name_decoration *deco; +	static char buf[1024]; + +	buf[sizeof(buf) - 1] = 0; +	deco = lookup_decoration(&name_decoration, &commit->object); +	while (deco) { +		if (!prefixcmp(deco->name, "refs/heads/")) { +			strncpy(buf, deco->name + 11, sizeof(buf) - 1); +			cgit_log_link(buf, NULL, "branch-deco", buf, NULL, NULL, +				0, NULL, NULL, ctx.qry.showmsg); +		} +		else if (!prefixcmp(deco->name, "tag: refs/tags/")) { +			strncpy(buf, deco->name + 15, sizeof(buf) - 1); +			cgit_tag_link(buf, NULL, "tag-deco", ctx.qry.head, buf); +		} +		else if (!prefixcmp(deco->name, "refs/remotes/")) { +			strncpy(buf, deco->name + 13, sizeof(buf) - 1); +			cgit_log_link(buf, NULL, "remote-deco", NULL, +				sha1_to_hex(commit->object.sha1), NULL, +				0, NULL, NULL, ctx.qry.showmsg); +		} +		else { +			strncpy(buf, deco->name, sizeof(buf) - 1); +			cgit_commit_link(buf, NULL, "deco", ctx.qry.head, +				sha1_to_hex(commit->object.sha1)); +		} +		deco = deco->next; +	} +} +  void print_commit(struct commit *commit)  {  	struct commitinfo *info;  	char *tmp; +	int cols = 2;  	info = cgit_parse_commit(commit); -	html("<tr><td>"); +	htmlf("<tr%s><td>", +		ctx.qry.showmsg ? " class='logheader'" : "");  	tmp = fmt("id=%s", sha1_to_hex(commit->object.sha1));  	tmp = cgit_pageurl(ctx.repo->url, "commit", tmp);  	html_link_open(tmp, NULL, NULL);  	cgit_print_age(commit->date, TM_WEEK * 2, FMT_SHORTDATE);  	html_link_close(); -	html("</td><td>"); +	htmlf("</td><td%s>", +		ctx.qry.showmsg ? " class='logsubject'" : "");  	cgit_commit_link(info->subject, NULL, NULL, ctx.qry.head,  			 sha1_to_hex(commit->object.sha1)); +	show_commit_decorations(commit);  	html("</td><td>");  	html_txt(info->author);  	if (ctx.repo->enable_log_filecount) { @@ -61,6 +97,17 @@ void print_commit(struct commit *commit)  		}  	}  	html("</td></tr>\n"); +	if (ctx.qry.showmsg) { +		if (ctx.repo->enable_log_filecount) { +			cols++; +			if (ctx.repo->enable_log_linecount) +				cols++; +		} +		htmlf("<tr class='nohover'><td/><td colspan='%d' class='logmsg'>", +			cols); +		html_txt(info->msg); +		html("</td></tr>\n"); +	}  	cgit_free_commitinfo(info);  } @@ -105,6 +152,8 @@ void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern  	rev.verbose_header = 1;  	rev.show_root_diff = 0;  	setup_revisions(argc, argv, &rev, NULL); +	load_ref_decorations(); +	rev.show_decorations = 1;  	rev.grep_filter.regflags |= REG_ICASE;  	compile_grep_patterns(&rev.grep_filter);  	prepare_revision_walk(&rev); @@ -113,8 +162,16 @@ void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern  		html("<table class='list nowrap'>");  	html("<tr class='nohover'><th class='left'>Age</th>" -	     "<th class='left'>Commit message</th>" -	     "<th class='left'>Author</th>"); +	      "<th class='left'>Commit message"); +	if (pager) { +		html(" ("); +		cgit_log_link(ctx.qry.showmsg ? "Collapse" : "Expand", NULL, +			      NULL, ctx.qry.head, ctx.qry.sha1, +			      ctx.qry.path, ctx.qry.ofs, ctx.qry.grep, +			      ctx.qry.search, ctx.qry.showmsg ? 0 : 1); +		html(")"); +	} +	html("</th><th class='left'>Author</th>");  	if (ctx.repo->enable_log_filecount) {  		html("<th class='left'>Files</th>");  		columns++; @@ -149,20 +206,20 @@ void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern  			cgit_log_link("[prev]", NULL, NULL, ctx.qry.head,  				      ctx.qry.sha1, ctx.qry.path,  				      ofs - cnt, ctx.qry.grep, -				      ctx.qry.search); +				      ctx.qry.search, ctx.qry.showmsg);  			html(" ");  		}  		if ((commit = get_revision(&rev)) != NULL) {  			cgit_log_link("[next]", NULL, NULL, ctx.qry.head,  				      ctx.qry.sha1, ctx.qry.path,  				      ofs + cnt, ctx.qry.grep, -				      ctx.qry.search); +				      ctx.qry.search, ctx.qry.showmsg);  		}  		html("</div>");  	} else if ((commit = get_revision(&rev)) != NULL) {  		html("<tr class='nohover'><td colspan='3'>");  		cgit_log_link("[...]", NULL, NULL, ctx.qry.head, NULL, NULL, 0, -			      NULL, NULL); +			      NULL, NULL, ctx.qry.showmsg);  		html("</td></tr>\n");  	}  } | 
