James Moger
2011-04-21 c3f4f124f1b9e45d7696f3c16f958d1c81ff280a
src/com/gitblit/utils/JGitUtils.java
@@ -15,6 +15,7 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
import org.eclipse.jgit.diff.DiffEntry;
import org.eclipse.jgit.diff.DiffFormatter;
@@ -326,19 +327,43 @@
      return list;
   }
   public static String getCommitDiff(Repository r, RevCommit commit, boolean outputHtml) {
      return getCommitDiff(r, null, commit, null, outputHtml);
   public static Map<ChangeType, AtomicInteger> getChangedPathsStats(List<PathChangeModel> paths) {
      Map<ChangeType, AtomicInteger> stats = new HashMap<ChangeType, AtomicInteger>();
      for (PathChangeModel path : paths) {
         if (!stats.containsKey(path.changeType)) {
            stats.put(path.changeType, new AtomicInteger(0));
         }
         stats.get(path.changeType).incrementAndGet();
      }
      return stats;
   }
   public static String getCommitDiff(Repository r, RevCommit commit, String path, boolean outputHtml) {
      return getCommitDiff(r, null, commit, path, outputHtml);
   public static enum DiffOutputType {
      PLAIN, GITWEB, GITBLIT;
      public static DiffOutputType forName(String name) {
         for (DiffOutputType type : values()) {
            if (type.name().equalsIgnoreCase(name)) {
               return type;
            }
         }
         return null;
      }
   }
   public static String getCommitDiff(Repository r, RevCommit baseCommit, RevCommit commit, boolean outputHtml) {
      return getCommitDiff(r, baseCommit, commit, null, outputHtml);
   public static String getCommitDiff(Repository r, RevCommit commit, DiffOutputType outputType) {
      return getCommitDiff(r, null, commit, null, outputType);
   }
   public static String getCommitDiff(Repository r, RevCommit baseCommit, RevCommit commit, String path, boolean outputHtml) {
   public static String getCommitDiff(Repository r, RevCommit commit, String path, DiffOutputType outputType) {
      return getCommitDiff(r, null, commit, path, outputType);
   }
   public static String getCommitDiff(Repository r, RevCommit baseCommit, RevCommit commit, DiffOutputType outputType) {
      return getCommitDiff(r, baseCommit, commit, null, outputType);
   }
   public static String getCommitDiff(Repository r, RevCommit baseCommit, RevCommit commit, String path, DiffOutputType outputType) {
      try {
         RevTree baseTree;
         if (baseCommit == null) {
@@ -362,10 +387,17 @@
         final ByteArrayOutputStream os = new ByteArrayOutputStream();
         RawTextComparator cmp = RawTextComparator.DEFAULT;
         DiffFormatter df;
         if (outputHtml) {
            df = new HtmlDiffFormatter(os);
         } else {
         switch (outputType) {
         case GITWEB:
            df = new GitWebDiffFormatter(os);
            break;
         case GITBLIT:
            df = new GitBlitDiffFormatter(os);
            break;
         case PLAIN:
         default:
            df = new DiffFormatter(os);
            break;
         }
         df.setRepository(r);
         df.setDiffComparator(cmp);
@@ -382,9 +414,9 @@
            df.format(diffs);
         }
         String diff;
         if (outputHtml) {
         if (df instanceof GitWebDiffFormatter) {
            // workaround for complex private methods in DiffFormatter
            diff = ((HtmlDiffFormatter) df).getHtml();
            diff = ((GitWebDiffFormatter) df).getHtml();
         } else {
            diff = os.toString();
         }
@@ -750,21 +782,21 @@
            df = new SimpleDateFormat("yyyy-MM");
         }
         walk.markStart(lastCommit);
         Iterable<RevCommit> revlog = walk;
         for (RevCommit rev : revlog) {
            Date d = getCommitDate(rev);
            String p = df.format(d);
            if (!metricMap.containsKey(p))
               metricMap.put(p, new Metric(p));
            Metric m = metricMap.get(p);
            Metric m = metricMap.get(p);
            m.count++;
            total.count++;
            if (tagMap.containsKey(rev.getId())) {
               m.tag++;
               total.tag++;
            }
         }
         }
      } catch (Throwable t) {
         LOGGER.error("Failed to mine log history for metrics", t);
      }