mirror of
https://git.zx2c4.com/cgit
synced 2024-11-25 18:08:41 +00:00
e189344a7d
These columns can cause lots of IO on the server, so add settings to explicitly enable them. Also, add per repo settings to optionally disable the columns if sitewide enabled. While at it, do not allow repo.snapshot to enable snapshots if the global setting is disabled. Signed-off-by: Lars Hjemli <hjemli@gmail.com>
133 lines
3.1 KiB
C
133 lines
3.1 KiB
C
/* 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"
|
|
|
|
int files, lines;
|
|
|
|
void count_lines(char *line, int size)
|
|
{
|
|
if (size>0 && (line[0] == '+' || line[0] == '-'))
|
|
lines++;
|
|
}
|
|
|
|
void inspect_files(struct diff_filepair *pair)
|
|
{
|
|
files++;
|
|
if (cgit_repo->enable_log_linecount)
|
|
cgit_diff_files(pair->one->sha1, pair->two->sha1, count_lines);
|
|
}
|
|
|
|
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("<tr><td>");
|
|
strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M", time);
|
|
html_txt(buf);
|
|
html("</td><td>");
|
|
char *qry = fmt("h=%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();
|
|
if (cgit_repo->enable_log_filecount) {
|
|
files = 0;
|
|
lines = 0;
|
|
cgit_diff_commit(commit, inspect_files);
|
|
html("</td><td class='right'>");
|
|
htmlf("%d", files);
|
|
if (cgit_repo->enable_log_linecount) {
|
|
html("</td><td class='right'>");
|
|
htmlf("%d", lines);
|
|
}
|
|
}
|
|
html("</td><td>");
|
|
html_txt(info->author);
|
|
html("</td></tr>\n");
|
|
cgit_free_commitinfo(info);
|
|
}
|
|
|
|
|
|
void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *path)
|
|
{
|
|
struct rev_info rev;
|
|
struct commit *commit;
|
|
const char *argv[] = {NULL, tip, NULL, NULL, NULL};
|
|
int argc = 2;
|
|
int i;
|
|
|
|
if (grep)
|
|
argv[argc++] = fmt("--grep=%s", grep);
|
|
if (path) {
|
|
argv[argc++] = "--";
|
|
argv[argc++] = path;
|
|
}
|
|
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("<table class='list nowrap'>");
|
|
html("<tr class='nohover'><th class='left'>Date</th>"
|
|
"<th class='left'>Message</th>");
|
|
|
|
if (cgit_repo->enable_log_filecount) {
|
|
html("<th class='left'>Files</th>");
|
|
if (cgit_repo->enable_log_linecount)
|
|
html("<th class='left'>Lines</th>");
|
|
}
|
|
html("<th class='left'>Author</th></tr>\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("</table>\n");
|
|
|
|
html("<div class='pager'>");
|
|
if (ofs > 0) {
|
|
html(" <a href='");
|
|
html(cgit_pageurl(cgit_query_repo, cgit_query_page,
|
|
fmt("h=%s&ofs=%d", tip, ofs-cnt)));
|
|
html("'>[prev]</a> ");
|
|
}
|
|
|
|
if ((commit = get_revision(&rev)) != NULL) {
|
|
html(" <a href='");
|
|
html(cgit_pageurl(cgit_query_repo, "log",
|
|
fmt("h=%s&ofs=%d", tip, ofs+cnt)));
|
|
html("'>[next]</a> ");
|
|
}
|
|
html("</div>");
|
|
}
|