From 6c5511020457c39961d069071ac60f7140ec724f Mon Sep 17 00:00:00 2001
From: Lukasz Jader <ljaderdev@gmail.com>
Date: Wed, 19 Sep 2012 16:24:10 -0400
Subject: [PATCH] Update polish translation of EmptyRepositoryPage

---
 src/com/gitblit/utils/MetricUtils.java |  137 ++++++++++++++++++++++++++++++++++++---------
 1 files changed, 108 insertions(+), 29 deletions(-)

diff --git a/src/com/gitblit/utils/MetricUtils.java b/src/com/gitblit/utils/MetricUtils.java
index d963bf5..e9e1fa5 100644
--- a/src/com/gitblit/utils/MetricUtils.java
+++ b/src/com/gitblit/utils/MetricUtils.java
@@ -16,6 +16,7 @@
 package com.gitblit.utils;
 
 import java.text.DateFormat;
+import java.text.MessageFormat;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -23,8 +24,8 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.TimeZone;
 
-import org.eclipse.jgit.lib.Constants;
 import org.eclipse.jgit.lib.ObjectId;
 import org.eclipse.jgit.lib.Repository;
 import org.eclipse.jgit.revwalk.RevCommit;
@@ -35,49 +36,105 @@
 import com.gitblit.models.Metric;
 import com.gitblit.models.RefModel;
 
+/**
+ * Utility class for collecting metrics on a branch, tag, or other ref within
+ * the repository.
+ * 
+ * @author James Moger
+ * 
+ */
 public class MetricUtils {
 
 	private static final Logger LOGGER = LoggerFactory.getLogger(MetricUtils.class);
 
-	public static List<Metric> getDateMetrics(Repository r, boolean includeTotal, String format) {
+	/**
+	 * Log an error message and exception.
+	 * 
+	 * @param t
+	 * @param repository
+	 *            if repository is not null it MUST be the {0} parameter in the
+	 *            pattern.
+	 * @param pattern
+	 * @param objects
+	 */
+	private static void error(Throwable t, Repository repository, String pattern, Object... objects) {
+		List<Object> parameters = new ArrayList<Object>();
+		if (objects != null && objects.length > 0) {
+			for (Object o : objects) {
+				parameters.add(o);
+			}
+		}
+		if (repository != null) {
+			parameters.add(0, repository.getDirectory().getAbsolutePath());
+		}
+		LOGGER.error(MessageFormat.format(pattern, parameters.toArray()), t);
+	}
+
+	/**
+	 * Returns the list of metrics for the specified commit reference, branch,
+	 * or tag within the repository. If includeTotal is true, the total of all
+	 * the metrics will be included as the first element in the returned list.
+	 * 
+	 * If the dateformat is unspecified an attempt is made to determine an
+	 * appropriate date format by determining the time difference between the
+	 * first commit on the branch and the most recent commit. This assumes that
+	 * the commits are linear.
+	 * 
+	 * @param repository
+	 * @param objectId
+	 *            if null or empty, HEAD is assumed.
+	 * @param includeTotal
+	 * @param dateFormat
+	 * @param timezone
+	 * @return list of metrics
+	 */
+	public static List<Metric> getDateMetrics(Repository repository, String objectId,
+			boolean includeTotal, String dateFormat, TimeZone timezone) {
 		Metric total = new Metric("TOTAL");
 		final Map<String, Metric> metricMap = new HashMap<String, Metric>();
 
-		if (JGitUtils.hasCommits(r)) {
-			final List<RefModel> tags = JGitUtils.getTags(r, -1);
+		if (JGitUtils.hasCommits(repository)) {
+			final List<RefModel> tags = JGitUtils.getTags(repository, true, -1);
 			final Map<ObjectId, RefModel> tagMap = new HashMap<ObjectId, RefModel>();
 			for (RefModel tag : tags) {
 				tagMap.put(tag.getReferencedObjectId(), tag);
 			}
+			RevWalk revWalk = null;
 			try {
-				RevWalk walk = new RevWalk(r);
-				ObjectId object = r.resolve(Constants.HEAD);
-				RevCommit lastCommit = walk.parseCommit(object);
-				walk.markStart(lastCommit);
+				// resolve branch
+				ObjectId branchObject;
+				if (StringUtils.isEmpty(objectId)) {
+					branchObject = JGitUtils.getDefaultBranch(repository);
+				} else {
+					branchObject = repository.resolve(objectId);
+				}
+
+				revWalk = new RevWalk(repository);
+				RevCommit lastCommit = revWalk.parseCommit(branchObject);
+				revWalk.markStart(lastCommit);
 
 				DateFormat df;
-				if (StringUtils.isEmpty(format)) {
+				if (StringUtils.isEmpty(dateFormat)) {
 					// dynamically determine date format
-					RevCommit firstCommit = JGitUtils.getFirstCommit(r, Constants.HEAD);
+					RevCommit firstCommit = JGitUtils.getFirstCommit(repository,
+							branchObject.getName());
 					int diffDays = (lastCommit.getCommitTime() - firstCommit.getCommitTime())
 							/ (60 * 60 * 24);
 					total.duration = diffDays;
-					if (diffDays <= 90) {
+					if (diffDays <= 365) {
 						// Days
 						df = new SimpleDateFormat("yyyy-MM-dd");
-					} else if (diffDays > 90 && diffDays < 365) {
-						// Weeks
-						df = new SimpleDateFormat("yyyy-MM (w)");
 					} else {
 						// Months
 						df = new SimpleDateFormat("yyyy-MM");
 					}
 				} else {
 					// use specified date format
-					df = new SimpleDateFormat(format);
+					df = new SimpleDateFormat(dateFormat);
 				}
+				df.setTimeZone(timezone);
 
-				Iterable<RevCommit> revlog = walk;
+				Iterable<RevCommit> revlog = revWalk;
 				for (RevCommit rev : revlog) {
 					Date d = JGitUtils.getCommitDate(rev);
 					String p = df.format(d);
@@ -93,7 +150,12 @@
 					}
 				}
 			} catch (Throwable t) {
-				LOGGER.error("Failed to mine log history for date metrics", t);
+				error(t, repository, "{0} failed to mine log history for date metrics of {1}",
+						objectId);
+			} finally {
+				if (revWalk != null) {
+					revWalk.dispose();
+				}
 			}
 		}
 		List<String> keys = new ArrayList<String>(metricMap.keySet());
@@ -108,28 +170,44 @@
 		return metrics;
 	}
 
-	public static List<Metric> getAuthorMetrics(Repository r, boolean byEmail) {
+	/**
+	 * Returns a list of author metrics for the specified repository.
+	 * 
+	 * @param repository
+	 * @param objectId
+	 *            if null or empty, HEAD is assumed.
+	 * @param byEmailAddress
+	 *            group metrics by author email address otherwise by author name
+	 * @return list of metrics
+	 */
+	public static List<Metric> getAuthorMetrics(Repository repository, String objectId,
+			boolean byEmailAddress) {
 		final Map<String, Metric> metricMap = new HashMap<String, Metric>();
-
-		if (JGitUtils.hasCommits(r)) {
+		if (JGitUtils.hasCommits(repository)) {
 			try {
-				RevWalk walk = new RevWalk(r);
-				ObjectId object = r.resolve(Constants.HEAD);
-				RevCommit lastCommit = walk.parseCommit(object);
+				RevWalk walk = new RevWalk(repository);
+				// resolve branch
+				ObjectId branchObject;
+				if (StringUtils.isEmpty(objectId)) {
+					branchObject = JGitUtils.getDefaultBranch(repository);
+				} else {
+					branchObject = repository.resolve(objectId);
+				}
+				RevCommit lastCommit = walk.parseCommit(branchObject);
 				walk.markStart(lastCommit);
 
 				Iterable<RevCommit> revlog = walk;
 				for (RevCommit rev : revlog) {
 					String p;
-					if (byEmail) {
-						p = rev.getAuthorIdent().getEmailAddress();
+					if (byEmailAddress) {
+						p = rev.getAuthorIdent().getEmailAddress().toLowerCase();
 						if (StringUtils.isEmpty(p)) {
-							p = rev.getAuthorIdent().getName();
+							p = rev.getAuthorIdent().getName().toLowerCase();
 						}
 					} else {
-						p = rev.getAuthorIdent().getName();
+						p = rev.getAuthorIdent().getName().toLowerCase();
 						if (StringUtils.isEmpty(p)) {
-							p = rev.getAuthorIdent().getEmailAddress();
+							p = rev.getAuthorIdent().getEmailAddress().toLowerCase();
 						}
 					}
 					if (!metricMap.containsKey(p)) {
@@ -139,7 +217,8 @@
 					m.count++;
 				}
 			} catch (Throwable t) {
-				LOGGER.error("Failed to mine log history for author metrics", t);
+				error(t, repository, "{0} failed to mine log history for author metrics of {1}",
+						objectId);
 			}
 		}
 		List<String> keys = new ArrayList<String>(metricMap.keySet());

--
Gitblit v1.9.1