From 9d921f83d48fff71762bb4a579870107c788ecf9 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Fri, 24 Feb 2012 17:34:31 -0500
Subject: [PATCH] Activity page now considers all local branches (issue 65)

---
 src/com/gitblit/models/Activity.java |   65 ++++++++++++++++++++++++++------
 1 files changed, 52 insertions(+), 13 deletions(-)

diff --git a/src/com/gitblit/models/Activity.java b/src/com/gitblit/models/Activity.java
index f24a5ab..9d58ef0 100644
--- a/src/com/gitblit/models/Activity.java
+++ b/src/com/gitblit/models/Activity.java
@@ -17,10 +17,13 @@
 
 import java.io.Serializable;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import org.eclipse.jgit.lib.PersonIdent;
 import org.eclipse.jgit.revwalk.RevCommit;
@@ -41,7 +44,7 @@
 
 	public final Date endDate;
 
-	public final List<RepositoryCommit> commits;
+	private final Set<RepositoryCommit> commits;
 
 	private final Map<String, Metric> authorMetrics;
 
@@ -67,26 +70,48 @@
 	public Activity(Date date, long duration) {
 		startDate = date;
 		endDate = new Date(date.getTime() + duration);
-		commits = new ArrayList<RepositoryCommit>();
+		commits = new LinkedHashSet<RepositoryCommit>();
 		authorMetrics = new HashMap<String, Metric>();
 		repositoryMetrics = new HashMap<String, Metric>();
 	}
 
+	/**
+	 * 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(String repository, String branch, RevCommit commit) {
 		RepositoryCommit commitModel = new RepositoryCommit(repository, branch, commit);
-		commits.add(commitModel);
+		if (commits.add(commitModel)) {
+			if (!repositoryMetrics.containsKey(repository)) {
+				repositoryMetrics.put(repository, new Metric(repository));
+			}
+			repositoryMetrics.get(repository).count++;
 
-		if (!repositoryMetrics.containsKey(repository)) {
-			repositoryMetrics.put(repository, new Metric(repository));
+			String author = commit.getAuthorIdent().getEmailAddress()
+					.toLowerCase();
+			if (!authorMetrics.containsKey(author)) {
+				authorMetrics.put(author, new Metric(author));
+			}
+			authorMetrics.get(author).count++;
+			return commitModel;
 		}
-		repositoryMetrics.get(repository).count++;
-
-		String author = commit.getAuthorIdent().getEmailAddress().toLowerCase();
-		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);
+		return list;
 	}
 
 	public Map<String, Metric> getAuthorMetrics() {
@@ -154,6 +179,20 @@
 		public PersonIdent getAuthorIdent() {
 			return commit.getAuthorIdent();
 		}
+		
+		@Override
+		public boolean equals(Object o) {
+			if (o instanceof RepositoryCommit) {
+				RepositoryCommit commit = (RepositoryCommit) o;
+				return repository.equals(commit.repository) && getName().equals(commit.getName());
+			}
+			return false;
+		}
+		
+		@Override
+		public int hashCode() {
+			return (repository + commit).hashCode();
+		}
 
 		@Override
 		public int compareTo(RepositoryCommit o) {

--
Gitblit v1.9.1