James Moger
2014-03-21 22f90cf8bcc12295c3ca55a160eceb3e41408dcd
src/main/java/com/gitblit/utils/DiffUtils.java
@@ -66,23 +66,23 @@
         return null;
      }
   }
   /**
    * Encapsulates the output of a diff.
    * Encapsulates the output of a diff.
    */
   public static class DiffOutput implements Serializable {
      private static final long serialVersionUID = 1L;
      public final DiffOutputType type;
      public final String content;
      public final DiffStat stat;
      DiffOutput(DiffOutputType type, String content, DiffStat stat) {
         this.type = type;
         this.content = content;
         this.stat = stat;
      }
      public PathChangeModel getPath(String path) {
         if (stat == null) {
            return null;
@@ -98,15 +98,15 @@
   public static class DiffStat implements Serializable {
      private static final long serialVersionUID = 1L;
      public final List<PathChangeModel> paths = new ArrayList<PathChangeModel>();
      private final String commitId;
      public DiffStat(String commitId) {
         this.commitId = commitId;
      }
      public PathChangeModel addPath(DiffEntry entry) {
         PathChangeModel pcm = PathChangeModel.from(entry, commitId);
         paths.add(pcm);
@@ -128,7 +128,7 @@
         }
         return val;
      }
      public PathChangeModel getPath(String path) {
         PathChangeModel stat = null;
         for (PathChangeModel p : paths) {
@@ -138,7 +138,7 @@
            }
         }
         return stat;
      }
      }
      @Override
      public String toString() {
@@ -150,15 +150,15 @@
         return sb.toString();
      }
   }
   public static class NormalizedDiffStat implements Serializable {
      private static final long serialVersionUID = 1L;
      public final int insertions;
      public final int deletions;
      public final int blanks;
      NormalizedDiffStat(int insertions, int deletions, int blanks) {
         this.insertions = insertions;
         this.deletions = deletions;
@@ -282,7 +282,7 @@
      } catch (Throwable t) {
         LOGGER.error("failed to generate commit diff!", t);
      }
      return new DiffOutput(outputType, diff, stat);
   }
@@ -344,6 +344,38 @@
         LOGGER.error("failed to generate commit diff!", t);
      }
      return diff;
   }
   /**
    * Returns the diffstat between the two commits for the specified file or folder.
    *
    * @param repository
    * @param base
    *            if base commit is unspecified, the diffstat is generated against
    *            the primary parent of the specified tip.
    * @param tip
    * @param path
    *            if path is specified, the diffstat is generated only for the
    *            specified file or folder. if unspecified, the diffstat is
    *            generated for the entire diff between the two commits.
    * @return patch as a string
    */
   public static DiffStat getDiffStat(Repository repository, String base, String tip) {
      RevCommit baseCommit = null;
      RevCommit tipCommit = null;
      RevWalk revWalk = null;
      try {
         revWalk = new RevWalk(repository);
         tipCommit = revWalk.parseCommit(repository.resolve(tip));
         if (!StringUtils.isEmpty(base)) {
            baseCommit = revWalk.parseCommit(repository.resolve(base));
         }
      } catch (Exception e) {
         LOGGER.error("failed to generate diffstat!", e);
      } finally {
         revWalk.dispose();
      }
      return getDiffStat(repository, baseCommit, tipCommit, null);
   }
   public static DiffStat getDiffStat(Repository repository, RevCommit commit) {
@@ -442,10 +474,10 @@
      }
      return lines;
   }
   /**
    * Normalizes a diffstat to an N-segment display.
    *
    *
    * @params segments
    * @param insertions
    * @param deletions
@@ -482,7 +514,7 @@
         sd = segments - si;
         sb = 0;
      }
      return new NormalizedDiffStat(si, sd, sb);
   }
}