cgit

commit e189344a7dfe6fa1b07434d5170e6441dcbaf788

Author: Lars Hjemli <hjemli@gmail.com>

Add knobs to enable/disable files/lines changed in log view

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>

 cgit.h | 4 ++++
 cgitrc | 10 ++++++++++
 shared.c | 14 +++++++++++++-
 ui-log.c | 33 +++++++++++++++++++++------------


diff --git a/cgit.h b/cgit.h
index 290401fde06feeae3a2a9924accc78dfbf744d8d..ed100a758b2b7381bc85e08da4d0442dfaf7afa0 100644
--- a/cgit.h
+++ b/cgit.h
@@ -38,6 +38,8 @@ 	char *owner;
 	char *defbranch;
 	char *module_link;
 	int snapshots;
+	int enable_log_filecount;
+	int enable_log_linecount;
 };
 
 struct repolist {
@@ -81,6 +83,8 @@ extern char *cgit_cache_root;
 
 extern int cgit_nocache;
 extern int cgit_snapshots;
+extern int cgit_enable_log_filecount;
+extern int cgit_enable_log_linecount;
 extern int cgit_max_lock_attempts;
 extern int cgit_cache_root_ttl;
 extern int cgit_cache_repo_ttl;




diff --git a/cgitrc b/cgitrc
index f923cc4cc7c99ed012ebf3360fddfabdc0529720..eaa9ce3b4083f9eb1f8afbdd086ad3bb89fe3055 100644
--- a/cgitrc
+++ b/cgitrc
@@ -12,6 +12,14 @@ ## Enable/disable snapshots by default. This can be overridden per repo
 #snapshots=0
 
 
+## Enable/disable display of 'number of files changed' in log view
+#enable-log-filecount=0
+
+
+## Enable/disable display of 'number of lines changed' in log view
+#enable-log-linecount=0
+
+
 ## Specify a root for virtual urls. This makes cgit generate urls like
 ##
 ##    http://localhost/git/repo/log/?id=master
@@ -97,4 +105,6 @@ #repo.desc=the caching cgi for git
 #repo.path=/pub/git/cgit
 #repo.owner=Lars Hjemli
 #repo.snapshots=1				# override a sitewide snapshot-setting
+#repo.enable-log-filecount=0			# override the default filecount setting
+#repo.enable-log-linecount=0			# override the default linecount setting
 #repo.module-link=/git/%s/commit/?id=%s		# override the standard module-link




diff --git a/shared.c b/shared.c
index 752ceacbb5a31fdead0c4cb600984de176450a52..53cd9b0a11188336620729e39bbc354c14836676 100644
--- a/shared.c
+++ b/shared.c
@@ -22,6 +22,8 @@ char *cgit_cache_root   = "/var/cache/cgit";
 
 int cgit_nocache               =  0;
 int cgit_snapshots             =  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;
@@ -85,6 +87,8 @@ 	ret->desc = NULL;
 	ret->owner = NULL;
 	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;
 	return ret;
 }
@@ -107,6 +111,10 @@ 	else if (!strcmp(name, "nocache"))
 		cgit_nocache = atoi(value);
 	else if (!strcmp(name, "snapshots"))
 		cgit_snapshots = 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"))
@@ -136,7 +144,11 @@ 		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 = atoi(value);
+		cgit_repo->snapshots = cgit_snapshots * atoi(value);
+	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 (!strcmp(name, "include"))




diff --git a/ui-log.c b/ui-log.c
index 9d0ec025ddc50e54bb4017978166da73f8d2881e..4237921d2844f471d2ae48186ff51bd7863787d1 100644
--- a/ui-log.c
+++ b/ui-log.c
@@ -19,7 +19,8 @@
 void inspect_files(struct diff_filepair *pair)
 {
 	files++;
-	cgit_diff_files(pair->one->sha1, pair->two->sha1, count_lines);
+	if (cgit_repo->enable_log_linecount)
+		cgit_diff_files(pair->one->sha1, pair->two->sha1, count_lines);
 }
 
 void print_commit(struct commit *commit)
@@ -39,13 +40,17 @@ 	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();
-	files = 0;
-	lines = 0;
-	cgit_diff_commit(commit, inspect_files);
-	html("</td><td class='right'>");
-	htmlf("%d", files);
-	html("</td><td class='right'>");
-	htmlf("%d", lines);
+	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");
@@ -81,10 +86,14 @@ 	prepare_revision_walk(&rev);
 
 	html("<table class='list nowrap'>");
 	html("<tr class='nohover'><th class='left'>Date</th>"
-	     "<th class='left'>Message</th>"
-	     "<th class='left'>Files</th>"
-	     "<th class='left'>Lines</th>"
-	     "<th class='left'>Author</th></tr>\n");
+	     "<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;