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