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