/* ui-log.c: functions for log output
 *
 * Copyright (C) 2006 Lars Hjemli
 *
 * Licensed under GNU General Public License v2
 *   (see COPYING for full license text)
 */
#include "cgit.h"
void print_commit(struct commit *commit)
{
	char buf[32];
	struct commitinfo *info;
	struct tm *time;
	info = cgit_parse_commit(commit);
	time = gmtime(&commit->date);
	html("
| ");
	strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", time);
	html_txt(buf);
	html(" | ");
	char *qry = fmt("id=%s", sha1_to_hex(commit->object.sha1));
	char *url = cgit_pageurl(cgit_query_repo, "commit", qry);
	html_link_open(url, NULL, NULL);
	html_ntxt(cgit_max_msg_len, info->subject);
	html_link_close();
	html(" | ");
	html_txt(info->author);
	html(" | 
\n");
	cgit_free_commitinfo(info);
}
void cgit_print_log(const char *tip, int ofs, int cnt, char *grep)
{
	struct rev_info rev;
	struct commit *commit;
	const char *argv[3] = {NULL, tip, NULL};
	int argc = 2;
	int i;
	
	if (grep)
		argv[argc++] = fmt("--grep=%s", grep);
	init_revisions(&rev, NULL);
	rev.abbrev = DEFAULT_ABBREV;
	rev.commit_format = CMIT_FMT_DEFAULT;
	rev.verbose_header = 1;
	rev.show_root_diff = 0;
	setup_revisions(argc, argv, &rev, NULL);
	if (rev.grep_filter) {
		rev.grep_filter->regflags |= REG_ICASE;
		compile_grep_patterns(rev.grep_filter);
	}
	prepare_revision_walk(&rev);
	html("Log
");
	html("");
	html("| Date"
	     " | Message"
	     " | Author | 
|---|
\n");
	if (ofs<0)
		ofs = 0;
	for (i = 0; i < ofs && (commit = get_revision(&rev)) != NULL; i++) {
		free(commit->buffer);
		commit->buffer = NULL;
		free_commit_list(commit->parents);
		commit->parents = NULL;
	}
	for (i = 0; i < cnt && (commit = get_revision(&rev)) != NULL; i++) {
		print_commit(commit);
		free(commit->buffer);
		commit->buffer = NULL;
		free_commit_list(commit->parents);
		commit->parents = NULL;
	}
	html("
\n");
	html("");
}