From a125cf6876e0edc5a2498df57a9df06d60b1f572 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Thu, 02 Jun 2011 22:40:23 -0400
Subject: [PATCH] Unit testing. Start of git-notes display feature.

---
 src/com/gitblit/utils/MetricUtils.java |  102 +++++++++++++++++++--------------------------------
 1 files changed, 38 insertions(+), 64 deletions(-)

diff --git a/src/com/gitblit/utils/MetricUtils.java b/src/com/gitblit/utils/MetricUtils.java
index b1da273..4ca9f36 100644
--- a/src/com/gitblit/utils/MetricUtils.java
+++ b/src/com/gitblit/utils/MetricUtils.java
@@ -42,45 +42,7 @@
 	public static List<Metric> getDateMetrics(Repository r, boolean includeTotal, String format) {
 		Metric total = new Metric("TOTAL");
 		final Map<String, Metric> metricMap = new HashMap<String, Metric>();
-	
-		if (JGitUtils.hasCommits(r)) {			
-			try {
-				RevWalk walk = new RevWalk(r);
-				ObjectId object = r.resolve(Constants.HEAD);
-				RevCommit lastCommit = walk.parseCommit(object);
-				walk.markStart(lastCommit);
-				SimpleDateFormat df = new SimpleDateFormat(format);
-				Iterable<RevCommit> revlog = walk;
-				for (RevCommit rev : revlog) {
-					Date d = JGitUtils.getCommitDate(rev);
-					String p = df.format(d);
-					if (!metricMap.containsKey(p)) {
-						metricMap.put(p, new Metric(p));
-					}
-					Metric m = metricMap.get(p);
-					m.count++;
-					total.count++;					
-				}
-			} catch (Throwable t) {
-				JGitUtils.LOGGER.error("Failed to mine log history for metrics", t);
-			}
-		}
-		List<String> keys = new ArrayList<String>(metricMap.keySet());
-		Collections.sort(keys);
-		List<Metric> metrics = new ArrayList<Metric>();
-		for (String key : keys) {
-			metrics.add(metricMap.get(key));
-		}
-		if (includeTotal) {
-			metrics.add(0, total);
-		}
-		return metrics;
-	}
 
-	public static List<Metric> getDateMetrics(Repository r, boolean includeTotal) {
-		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);
 			final Map<ObjectId, RefModel> tagMap = new HashMap<ObjectId, RefModel>();
@@ -90,25 +52,31 @@
 			try {
 				RevWalk walk = new RevWalk(r);
 				ObjectId object = r.resolve(Constants.HEAD);
-	
-				RevCommit firstCommit = JGitUtils.getFirstCommit(r, Constants.HEAD);
 				RevCommit lastCommit = walk.parseCommit(object);
-				int diffDays = (lastCommit.getCommitTime() - firstCommit.getCommitTime())
-						/ (60 * 60 * 24);
-				total.duration = diffDays;
-				DateFormat df;
-				if (diffDays <= 90) {
-					// 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");
-				}
 				walk.markStart(lastCommit);
-	
+
+				DateFormat df;
+				if (StringUtils.isEmpty(format)) {
+					// dynamically determine date format
+					RevCommit firstCommit = JGitUtils.getFirstCommit(r, Constants.HEAD);
+					int diffDays = (lastCommit.getCommitTime() - firstCommit.getCommitTime())
+							/ (60 * 60 * 24);
+					total.duration = diffDays;
+					if (diffDays <= 90) {
+						// 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);
+				}
+
 				Iterable<RevCommit> revlog = walk;
 				for (RevCommit rev : revlog) {
 					Date d = JGitUtils.getCommitDate(rev);
@@ -125,7 +93,7 @@
 					}
 				}
 			} catch (Throwable t) {
-				JGitUtils.LOGGER.error("Failed to mine log history for metrics", t);
+				LOGGER.error("Failed to mine log history for date metrics", t);
 			}
 		}
 		List<String> keys = new ArrayList<String>(metricMap.keySet());
@@ -140,32 +108,38 @@
 		return metrics;
 	}
 
-	public static List<Metric> getAuthorMetrics(Repository r) {
-		Metric total = new Metric("TOTAL");
+	public static List<Metric> getAuthorMetrics(Repository r, boolean byEmail) {
 		final Map<String, Metric> metricMap = new HashMap<String, Metric>();
-	
+
 		if (JGitUtils.hasCommits(r)) {
 			try {
 				RevWalk walk = new RevWalk(r);
 				ObjectId object = r.resolve(Constants.HEAD);
 				RevCommit lastCommit = walk.parseCommit(object);
 				walk.markStart(lastCommit);
-	
+
 				Iterable<RevCommit> revlog = walk;
 				for (RevCommit rev : revlog) {
-					String p = rev.getAuthorIdent().getName();
-					if (StringUtils.isEmpty(p)) {
+					String p;
+					if (byEmail) {
 						p = rev.getAuthorIdent().getEmailAddress();
+						if (StringUtils.isEmpty(p)) {
+							p = rev.getAuthorIdent().getName();
+						}
+					} else {
+						p = rev.getAuthorIdent().getName();
+						if (StringUtils.isEmpty(p)) {
+							p = rev.getAuthorIdent().getEmailAddress();
+						}
 					}
 					if (!metricMap.containsKey(p)) {
 						metricMap.put(p, new Metric(p));
 					}
 					Metric m = metricMap.get(p);
 					m.count++;
-					total.count++;
 				}
 			} catch (Throwable t) {
-				JGitUtils.LOGGER.error("Failed to mine log history for metrics", t);
+				LOGGER.error("Failed to mine log history for author metrics", t);
 			}
 		}
 		List<String> keys = new ArrayList<String>(metricMap.keySet());

--
Gitblit v1.9.1