From a502d96a860456ec5e8c96761db70f7cabb74751 Mon Sep 17 00:00:00 2001
From: Paul Martin <paul@paulsputer.com>
Date: Sat, 30 Apr 2016 04:19:14 -0400
Subject: [PATCH] Merge pull request #1073 from gitblit/1062-DocEditorUpdates

---
 src/main/java/com/gitblit/models/Activity.java |   64 ++++++++++++++++++++++++-------
 1 files changed, 49 insertions(+), 15 deletions(-)

diff --git a/src/main/java/com/gitblit/models/Activity.java b/src/main/java/com/gitblit/models/Activity.java
index 59405c7..ff0920c 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;
 
@@ -33,7 +35,7 @@
 /**
  * Model class to represent the commit activity across many repositories. This
  * class is used by the Activity page.
- * 
+ *
  * @author James Moger
  */
 public class Activity implements Serializable, Comparable<Activity> {
@@ -50,9 +52,11 @@
 
 	private final Map<String, Metric> repositoryMetrics;
 
+	private final Set<String> authorExclusions;
+
 	/**
 	 * Constructor for one day of activity.
-	 * 
+	 *
 	 * @param date
 	 */
 	public Activity(Date date) {
@@ -61,7 +65,7 @@
 
 	/**
 	 * Constructor for specified duration of activity from start date.
-	 * 
+	 *
 	 * @param date
 	 *            the start date of the activity
 	 * @param duration
@@ -73,12 +77,24 @@
 		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());
+		}
 	}
 
 	/**
 	 * Adds a commit to the activity object as long as the commit is not a
 	 * duplicate.
-	 * 
+	 *
 	 * @param repository
 	 * @param branch
 	 * @param commit
@@ -87,26 +103,44 @@
 	 */
 	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();
 	}
-	
+
 	public List<RepositoryCommit> getCommits() {
 		List<RepositoryCommit> list = new ArrayList<RepositoryCommit>(commits);
 		Collections.sort(list);

--
Gitblit v1.9.1