James Moger
2011-06-02 a125cf6876e0edc5a2498df57a9df06d60b1f572
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());