| | |
| | | import java.util.HashMap;
|
| | | import java.util.List;
|
| | | import java.util.Map;
|
| | | import java.util.Set;
|
| | | import java.util.TimeZone;
|
| | | import java.util.TreeSet;
|
| | |
|
| | | import org.eclipse.jgit.lib.Constants;
|
| | | import org.eclipse.jgit.lib.ObjectId;
|
| | | import org.eclipse.jgit.lib.Repository;
|
| | | import org.eclipse.jgit.revwalk.RevCommit;
|
| | |
|
| | | import com.gitblit.GitBlit;
|
| | | import com.gitblit.Keys;
|
| | | import com.gitblit.models.Activity;
|
| | | import com.gitblit.models.GravatarProfile;
|
| | | import com.gitblit.models.RefModel;
|
| | |
| | | df.setTimeZone(timezone);
|
| | | Calendar cal = Calendar.getInstance();
|
| | | cal.setTimeZone(timezone);
|
| | | |
| | | // aggregate author exclusions
|
| | | Set<String> authorExclusions = new TreeSet<String>();
|
| | | authorExclusions.addAll(GitBlit.getStrings(Keys.web.metricAuthorExclusions));
|
| | | for (RepositoryModel model : models) {
|
| | | if (!ArrayUtils.isEmpty(model.metricAuthorExclusions)) {
|
| | | authorExclusions.addAll(model.metricAuthorExclusions);
|
| | | }
|
| | | }
|
| | |
|
| | | Map<String, Activity> activity = new HashMap<String, Activity>();
|
| | | for (RepositoryModel model : models) {
|
| | | if (model.maxActivityCommits == -1) {
|
| | | if (!model.isShowActivity()) {
|
| | | // skip this repository
|
| | | continue;
|
| | | }
|
| | |
| | | if (StringUtils.isEmpty(objectId)) {
|
| | | for (RefModel local : JGitUtils.getLocalBranches(
|
| | | repository, true, -1)) {
|
| | | if (!local.getDate().after(thresholdDate)) {
|
| | | // branch not recently updated
|
| | | continue;
|
| | | }
|
| | | branches.add(local.getName());
|
| | | }
|
| | | } else {
|
| | | branches.add(objectId);
|
| | | }
|
| | | Map<ObjectId, List<RefModel>> allRefs = JGitUtils
|
| | | .getAllRefs(repository, model.showRemoteBranches);
|
| | |
|
| | | for (String branch : branches) {
|
| | | String shortName = branch;
|
| | | if (shortName.startsWith(Constants.R_HEADS)) {
|
| | | shortName = shortName.substring(Constants.R_HEADS.length());
|
| | | }
|
| | | List<RevCommit> commits = JGitUtils.getRevLog(repository,
|
| | | branch, thresholdDate);
|
| | | List<RepositoryCommit> commits = CommitCache.instance().getCommits(model.name, repository, branch, thresholdDate);
|
| | | if (model.maxActivityCommits > 0 && commits.size() > model.maxActivityCommits) {
|
| | | // trim commits to maximum count
|
| | | commits = commits.subList(0, model.maxActivityCommits);
|
| | | }
|
| | | for (RevCommit commit : commits) { |
| | | Date date = JGitUtils.getCommitDate(commit);
|
| | | for (RepositoryCommit commit : commits) { |
| | | Date date = commit.getCommitDate();
|
| | | String dateStr = df.format(date);
|
| | | if (!activity.containsKey(dateStr)) {
|
| | | // Normalize the date to midnight
|
| | |
| | | cal.set(Calendar.MINUTE, 0);
|
| | | cal.set(Calendar.SECOND, 0);
|
| | | cal.set(Calendar.MILLISECOND, 0);
|
| | | activity.put(dateStr, new Activity(cal.getTime()));
|
| | | Activity a = new Activity(cal.getTime());
|
| | | a.excludeAuthors(authorExclusions);
|
| | | activity.put(dateStr, a);
|
| | | }
|
| | | RepositoryCommit commitModel = activity.get(dateStr)
|
| | | .addCommit(model.name, shortName, commit);
|
| | | if (commitModel != null) {
|
| | | commitModel.setRefs(allRefs.get(commit.getId()));
|
| | | }
|
| | | activity.get(dateStr).addCommit(commit);
|
| | | }
|
| | | }
|
| | |
|