From 7847af6e63e7adef6ec8d99a1809e91472d2bc2d Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Thu, 05 Sep 2013 09:14:22 -0400
Subject: [PATCH] Restore blockpush and localclone hooks to binaries (issue-303)

---
 src/main/java/com/gitblit/models/Activity.java |   56 +++++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 45 insertions(+), 11 deletions(-)

diff --git a/src/main/java/com/gitblit/models/Activity.java b/src/main/java/com/gitblit/models/Activity.java
index 59405c7..8af86d6 100644
--- a/src/main/java/com/gitblit/models/Activity.java
+++ b/src/main/java/com/gitblit/models/Activity.java
@@ -17,6 +17,7 @@
 
 import java.io.Serializable;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
@@ -24,6 +25,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.TreeSet;
 
 import org.eclipse.jgit.revwalk.RevCommit;
 
@@ -43,12 +45,14 @@
 	public final Date startDate;
 
 	public final Date endDate;
-
+	
 	private final Set<RepositoryCommit> commits;
 
 	private final Map<String, Metric> authorMetrics;
 
 	private final Map<String, Metric> repositoryMetrics;
+
+	private final Set<String> authorExclusions;
 
 	/**
 	 * Constructor for one day of activity.
@@ -73,6 +77,18 @@
 		commits = new LinkedHashSet<RepositoryCommit>();
 		authorMetrics = new HashMap<String, Metric>();
 		repositoryMetrics = new HashMap<String, Metric>();
+		authorExclusions = new TreeSet<String>();
+	}
+	
+	/**
+	 * Exclude the specified authors from the metrics.
+	 * 
+	 * @param authors
+	 */
+	public void excludeAuthors(Collection<String> authors) {
+		for (String author : authors) {
+			authorExclusions.add(author.toLowerCase());
+		}
 	}
 
 	/**
@@ -87,22 +103,40 @@
 	 */
 	public RepositoryCommit addCommit(String repository, String branch, RevCommit commit) {
 		RepositoryCommit commitModel = new RepositoryCommit(repository, branch, commit);
-		if (commits.add(commitModel)) {
-			if (!repositoryMetrics.containsKey(repository)) {
-				repositoryMetrics.put(repository, new Metric(repository));
-			}
-			repositoryMetrics.get(repository).count++;
+		return addCommit(commitModel);
+	}
 
-			String author = StringUtils.removeNewlines(commit.getAuthorIdent().getEmailAddress()).toLowerCase();			
-			if (!authorMetrics.containsKey(author)) {
-				authorMetrics.put(author, new Metric(author));
+	/**
+	 * Adds a commit to the activity object as long as the commit is not a
+	 * duplicate.
+	 * 
+	 * @param repository
+	 * @param branch
+	 * @param commit
+	 * @return a RepositoryCommit, if one was added. Null if this is duplicate
+	 *         commit
+	 */
+	public RepositoryCommit addCommit(RepositoryCommit commitModel) {
+		if (commits.add(commitModel)) {
+			String author = StringUtils.removeNewlines(commitModel.getAuthorIdent().getName());
+			String authorName = author.toLowerCase();
+			String authorEmail = StringUtils.removeNewlines(commitModel.getAuthorIdent().getEmailAddress()).toLowerCase();
+			if (!repositoryMetrics.containsKey(commitModel.repository)) {
+				repositoryMetrics.put(commitModel.repository, new Metric(commitModel.repository));
 			}
-			authorMetrics.get(author).count++;
+			repositoryMetrics.get(commitModel.repository).count++;
+
+			if (!authorExclusions.contains(authorName) && !authorExclusions.contains(authorEmail)) {
+				if (!authorMetrics.containsKey(author)) {
+					authorMetrics.put(author, new Metric(author));
+				}
+				authorMetrics.get(author).count++;
+			}
 			return commitModel;
 		}
 		return null;
 	}
-	
+
 	public int getCommitCount() {
 		return commits.size();
 	}

--
Gitblit v1.9.1