From fe326255202dcfac8b0991ca9d28e3cf4bcc4fe6 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Sun, 23 Oct 2011 12:28:48 -0400
Subject: [PATCH] Per-repository setting to skip summary metrics

---
 src/com/gitblit/GitBlit.java                         |    2 ++
 src/com/gitblit/wicket/GitBlitWebApp.properties      |    4 +++-
 src/com/gitblit/wicket/pages/EditRepositoryPage.java |    1 +
 docs/04_releases.mkd                                 |    2 ++
 src/com/gitblit/models/RepositoryModel.java          |    1 +
 src/com/gitblit/client/EditRepositoryDialog.java     |    7 +++++++
 src/com/gitblit/client/RepositoriesTableModel.java   |    5 ++++-
 src/com/gitblit/wicket/pages/EditRepositoryPage.html |    9 +++++----
 docs/00_index.mkd                                    |    2 ++
 src/com/gitblit/wicket/pages/SummaryPage.java        |    6 ++++--
 10 files changed, 31 insertions(+), 8 deletions(-)

diff --git a/docs/00_index.mkd b/docs/00_index.mkd
index f34fd55..8627269 100644
--- a/docs/00_index.mkd
+++ b/docs/00_index.mkd
@@ -38,6 +38,8 @@
     **New:** *web.enableRpcAdministration = false*
 - added: reusable JSON RPC client class
 - added: Gitblit Manager (Java/Swing Application) for remote administration of a Gitblit server.
+- added: per-repository setting to skip size calculation (faster repositories page loading)
+- added: per-repository setting to skip summary metrics calculation (faster summary page loading)
 - fixed: federation protocol timestamps.  dates are now serialized to the [iso8601](http://en.wikipedia.org/wiki/ISO_8601) standard.  
     **This breaks 0.6.0 federation clients/servers.**
 - fixed: collision on rename for repositories and users
diff --git a/docs/04_releases.mkd b/docs/04_releases.mkd
index 4b538ba..e844322 100644
--- a/docs/04_releases.mkd
+++ b/docs/04_releases.mkd
@@ -12,6 +12,8 @@
     **New:** *web.enableRpcAdministration = false*
 - added: reusable JSON RPC client class
 - added: Gitblit Manager (Java/Swing Application) for remote administration of a Gitblit server.
+- added: per-repository setting to skip size calculation (faster repositories page loading)
+- added: per-repository setting to skip summary metrics calculation (faster summary page loading)
 - fixed: federation protocol timestamps.  dates are now serialized to the [iso8601](http://en.wikipedia.org/wiki/ISO_8601) standard.  
     **This breaks 0.6.0 federation clients/servers.**
 - fixed: collision on rename for repositories and users
diff --git a/src/com/gitblit/GitBlit.java b/src/com/gitblit/GitBlit.java
index 49f93e4..ffef94a 100644
--- a/src/com/gitblit/GitBlit.java
+++ b/src/com/gitblit/GitBlit.java
@@ -594,6 +594,7 @@
 			model.isFrozen = getConfig(config, "isFrozen", false);
 			model.showReadme = getConfig(config, "showReadme", false);
 			model.skipSizeCalculation = getConfig(config, "skipSizeCalculation", false);
+			model.skipSummaryMetrics = getConfig(config, "skipSummaryMetrics", false);
 			model.federationStrategy = FederationStrategy.fromName(getConfig(config,
 					"federationStrategy", null));
 			model.federationSets = new ArrayList<String>(Arrays.asList(config.getStringList(
@@ -814,6 +815,7 @@
 		config.setBoolean("gitblit", null, "isFrozen", repository.isFrozen);
 		config.setBoolean("gitblit", null, "showReadme", repository.showReadme);
 		config.setBoolean("gitblit", null, "skipSizeCalculation", repository.skipSizeCalculation);
+		config.setBoolean("gitblit", null, "skipSummaryMetrics", repository.skipSummaryMetrics);
 		config.setStringList("gitblit", null, "federationSets", repository.federationSets);
 		config.setString("gitblit", null, "federationStrategy",
 				repository.federationStrategy.name());
diff --git a/src/com/gitblit/client/EditRepositoryDialog.java b/src/com/gitblit/client/EditRepositoryDialog.java
index c2d8f67..55f5268 100644
--- a/src/com/gitblit/client/EditRepositoryDialog.java
+++ b/src/com/gitblit/client/EditRepositoryDialog.java
@@ -85,6 +85,8 @@
 
 	private JCheckBox skipSizeCalculation;
 
+	private JCheckBox skipSummaryMetrics;
+
 	private JCheckBox isFrozen;
 
 	private JComboBox accessRestriction;
@@ -150,6 +152,8 @@
 				anRepository.showReadme);
 		skipSizeCalculation = new JCheckBox(Translation.get("gb.skipSizeCalculationDescription"),
 				anRepository.skipSizeCalculation);
+		skipSummaryMetrics = new JCheckBox(Translation.get("gb.skipSummaryMetricsDescription"),
+				anRepository.skipSummaryMetrics);
 		isFrozen = new JCheckBox(Translation.get("gb.isFrozenDescription"), anRepository.isFrozen);
 
 		accessRestriction = new JComboBox(AccessRestrictionType.values());
@@ -180,6 +184,8 @@
 		fieldsPanel.add(newFieldPanel(Translation.get("gb.showReadme"), showReadme));
 		fieldsPanel.add(newFieldPanel(Translation.get("gb.skipSizeCalculation"),
 				skipSizeCalculation));
+		fieldsPanel
+				.add(newFieldPanel(Translation.get("gb.skipSummaryMetrics"), skipSummaryMetrics));
 		fieldsPanel.add(newFieldPanel(Translation.get("gb.isFrozen"), isFrozen));
 
 		usersPalette = new JPalette<String>();
@@ -327,6 +333,7 @@
 		repository.showRemoteBranches = showRemoteBranches.isSelected();
 		repository.showReadme = showReadme.isSelected();
 		repository.skipSizeCalculation = skipSizeCalculation.isSelected();
+		repository.skipSummaryMetrics = skipSummaryMetrics.isSelected();
 		repository.isFrozen = isFrozen.isSelected();
 
 		repository.accessRestriction = (AccessRestrictionType) accessRestriction.getSelectedItem();
diff --git a/src/com/gitblit/client/RepositoriesTableModel.java b/src/com/gitblit/client/RepositoriesTableModel.java
index 9dd1a99..c3eaf6e 100644
--- a/src/com/gitblit/client/RepositoriesTableModel.java
+++ b/src/com/gitblit/client/RepositoriesTableModel.java
@@ -117,7 +117,10 @@
 		case Last_Change:
 			return model.lastChange;
 		case Size:
-			return model.size;
+			if (model.hasCommits) {
+				return model.size;
+			}
+			return "(empty)";
 		}
 		return null;
 	}
diff --git a/src/com/gitblit/models/RepositoryModel.java b/src/com/gitblit/models/RepositoryModel.java
index 6909f1a..9a774fb 100644
--- a/src/com/gitblit/models/RepositoryModel.java
+++ b/src/com/gitblit/models/RepositoryModel.java
@@ -51,6 +51,7 @@
 	public List<String> federationSets;
 	public boolean isFederated;
 	public boolean skipSizeCalculation;
+	public boolean skipSummaryMetrics;
 	public String frequency;
 	public String origin;
 	public String size;
diff --git a/src/com/gitblit/wicket/GitBlitWebApp.properties b/src/com/gitblit/wicket/GitBlitWebApp.properties
index 6d713e3..ae6f6cf 100644
--- a/src/com/gitblit/wicket/GitBlitWebApp.properties
+++ b/src/com/gitblit/wicket/GitBlitWebApp.properties
@@ -160,4 +160,6 @@
 gb.manage = manage
 gb.lastLogin = last login
 gb.skipSizeCalculation = skip size calculation
-gb.skipSizeCalculationDescription = do not calculate the repository size
\ No newline at end of file
+gb.skipSizeCalculationDescription = do not calculate the repository size (reduces page load time)
+gb.skipSummaryMetrics = skip summary metrics
+gb.skipSummaryMetricsDescription = do not calculate metrics on the summary page (reduces page load time)
\ No newline at end of file
diff --git a/src/com/gitblit/wicket/pages/EditRepositoryPage.html b/src/com/gitblit/wicket/pages/EditRepositoryPage.html
index cb21687..27a5448 100644
--- a/src/com/gitblit/wicket/pages/EditRepositoryPage.html
+++ b/src/com/gitblit/wicket/pages/EditRepositoryPage.html
@@ -19,14 +19,15 @@
 				<tr><th><wicket:message key="gb.showRemoteBranches"></wicket:message></th><td class="edit"><input type="checkbox" wicket:id="showRemoteBranches" tabindex="7" /> &nbsp;<i><wicket:message key="gb.showRemoteBranchesDescription"></wicket:message></i></td></tr>
 				<tr><th><wicket:message key="gb.showReadme"></wicket:message></th><td class="edit"><input type="checkbox" wicket:id="showReadme" tabindex="8" /> &nbsp;<i><wicket:message key="gb.showReadmeDescription"></wicket:message></i></td></tr>
 				<tr><th><wicket:message key="gb.skipSizeCalculation"></wicket:message></th><td class="edit"><input type="checkbox" wicket:id="skipSizeCalculation" tabindex="9" /> &nbsp;<i><wicket:message key="gb.skipSizeCalculationDescription"></wicket:message></i></td></tr>
-				<tr><th><wicket:message key="gb.isFrozen"></wicket:message></th><td class="edit"><input type="checkbox" wicket:id="isFrozen" tabindex="10" /> &nbsp;<i><wicket:message key="gb.isFrozenDescription"></wicket:message></i></td></tr>
+				<tr><th><wicket:message key="gb.skipSummaryMetrics"></wicket:message></th><td class="edit"><input type="checkbox" wicket:id="skipSummaryMetrics" tabindex="10" /> &nbsp;<i><wicket:message key="gb.skipSummaryMetricsDescription"></wicket:message></i></td></tr>
+				<tr><th><wicket:message key="gb.isFrozen"></wicket:message></th><td class="edit"><input type="checkbox" wicket:id="isFrozen" tabindex="11" /> &nbsp;<i><wicket:message key="gb.isFrozenDescription"></wicket:message></i></td></tr>
 				<tr><td colspan="2"><hr></hr></td></tr>
-				<tr><th><wicket:message key="gb.accessRestriction"></wicket:message></th><td class="edit"><select class="span6" wicket:id="accessRestriction" tabindex="11" /></td></tr>				
+				<tr><th><wicket:message key="gb.accessRestriction"></wicket:message></th><td class="edit"><select class="span6" wicket:id="accessRestriction" tabindex="12" /></td></tr>				
 				<tr><th style="vertical-align: top;"><wicket:message key="gb.permittedUsers"></wicket:message></th><td style="padding:2px;"><span wicket:id="users"></span></td></tr>
 				<tr><td colspan="2"><hr></hr></td></tr>		
-				<tr><th><wicket:message key="gb.federationStrategy"></wicket:message></th><td class="edit"><select class="span6" wicket:id="federationStrategy" tabindex="12" /></td></tr>
+				<tr><th><wicket:message key="gb.federationStrategy"></wicket:message></th><td class="edit"><select class="span6" wicket:id="federationStrategy" tabindex="13" /></td></tr>
 				<tr><th style="vertical-align: top;"><wicket:message key="gb.federationSets"></wicket:message></th><td style="padding:2px;"><span wicket:id="federationSets"></span></td></tr>
-				<tr><th></th><td class="editButton"><input class="btn" type="submit" value="Cancel" wicket:message="value:gb.cancel" wicket:id="cancel" tabindex="13" /> &nbsp; <input class="btn primary" type="submit" value="Save" wicket:message="value:gb.save" wicket:id="save" tabindex="14" /> </td></tr>
+				<tr><th></th><td class="editButton"><input class="btn" type="submit" value="Cancel" wicket:message="value:gb.cancel" wicket:id="cancel" tabindex="14" /> &nbsp; <input class="btn primary" type="submit" value="Save" wicket:message="value:gb.save" wicket:id="save" tabindex="15" /> </td></tr>
 			</tbody>
 		</table>
 	</form>	
diff --git a/src/com/gitblit/wicket/pages/EditRepositoryPage.java b/src/com/gitblit/wicket/pages/EditRepositoryPage.java
index ee79d50..be88bd5 100644
--- a/src/com/gitblit/wicket/pages/EditRepositoryPage.java
+++ b/src/com/gitblit/wicket/pages/EditRepositoryPage.java
@@ -213,6 +213,7 @@
 		form.add(new CheckBox("showRemoteBranches"));
 		form.add(new CheckBox("showReadme"));
 		form.add(new CheckBox("skipSizeCalculation"));
+		form.add(new CheckBox("skipSummaryMetrics"));
 		form.add(usersPalette);
 		form.add(federationSetsPalette);
 
diff --git a/src/com/gitblit/wicket/pages/SummaryPage.java b/src/com/gitblit/wicket/pages/SummaryPage.java
index 50810a1..da573d5 100644
--- a/src/com/gitblit/wicket/pages/SummaryPage.java
+++ b/src/com/gitblit/wicket/pages/SummaryPage.java
@@ -43,6 +43,7 @@
 import com.gitblit.Keys;
 import com.gitblit.models.Metric;
 import com.gitblit.models.PathModel;
+import com.gitblit.models.RepositoryModel;
 import com.gitblit.utils.JGitUtils;
 import com.gitblit.utils.MarkdownUtils;
 import com.gitblit.utils.StringUtils;
@@ -64,10 +65,11 @@
 		int numberRefs = GitBlit.getInteger(Keys.web.summaryRefsCount, 5);
 
 		Repository r = getRepository();
+		RepositoryModel model = getRepositoryModel();
 		List<Metric> metrics = null;
 		Metric metricsTotal = null;
-		if (GitBlit.getBoolean(Keys.web.generateActivityGraph, true)) {
-			metrics = GitBlit.self().getRepositoryDefaultMetrics(getRepositoryModel(), r);
+		if (!model.skipSummaryMetrics && GitBlit.getBoolean(Keys.web.generateActivityGraph, true)) {
+			metrics = GitBlit.self().getRepositoryDefaultMetrics(model, r);
 			metricsTotal = metrics.remove(0);
 		}
 

--
Gitblit v1.9.1