Class DiffUtil

java.lang.Object
com.google.gerrit.server.patch.DiffUtil

public class DiffUtil extends Object
A utility class used by the diff cache interfaces GitModifiedFilesCache and ModifiedFilesCache.
  • Constructor Details

    • DiffUtil

      public DiffUtil()
  • Method Details

    • mergeRewrittenModifiedFiles

      public static com.google.common.collect.ImmutableList<ModifiedFile> mergeRewrittenModifiedFiles(List<ModifiedFile> modifiedFiles)
      Return the modifiedFiles input list while merging rewritten entries.

      Background: In some cases, JGit returns two diff entries (ADDED/DELETED, RENAMED/DELETED, etc...) for the same file path. This happens e.g. when a file's mode is changed between patchsets, for example converting a symlink file to a regular file. We identify this case and return a single modified file with changeType = Patch.ChangeType.REWRITE.

    • getTreeId

      public static org.eclipse.jgit.lib.ObjectId getTreeId(org.eclipse.jgit.revwalk.RevWalk rw, org.eclipse.jgit.lib.ObjectId commitId) throws IOException
      Returns the Git tree object ID pointed to by the commitId parameter.
      Parameters:
      rw - a RevWalk of an opened repository that is used to walk the commit graph.
      commitId - 20 bytes commitId SHA-1 hash.
      Returns:
      Git tree object ID pointed to by the commitId.
      Throws:
      IOException
    • getRevCommit

      public static org.eclipse.jgit.revwalk.RevCommit getRevCommit(org.eclipse.jgit.revwalk.RevWalk rw, org.eclipse.jgit.lib.ObjectId commitId) throws IOException
      Returns the RevCommit object given the 20 bytes commitId SHA-1 hash.
      Parameters:
      rw - a RevWalk of an opened repository that is used to walk the commit graph.
      commitId - 20 bytes commitId SHA-1 hash
      Returns:
      The RevCommit representing the commit in Git
      Throws:
      IOException - a pack file or loose object could not be read while parsing the commits.
    • areRelated

      public static boolean areRelated(org.eclipse.jgit.revwalk.RevCommit commitA, org.eclipse.jgit.revwalk.RevCommit commitB)
      Returns true if the commitA and commitB parameters are parent/child, if they have a common parent, or if any of them is a root or merge commit.
    • stringSize

      public static int stringSize(String str)
    • getFormattedDiff

      public static void getFormattedDiff(org.eclipse.jgit.lib.Repository repo, org.eclipse.jgit.revwalk.RevCommit baseCommit, org.eclipse.jgit.revwalk.RevCommit childCommit, String path, OutputStream out) throws IOException
      Get formatted diff between the given commits, either for a single path if specified, or for the full trees.
      Parameters:
      repo - to get the diff from
      baseCommit - to compare with
      childCommit - to compare
      path - to narrow the diff to
      out - to append the diff to
      Throws:
      IOException - if the diff couldn't be written
    • getFormattedDiff

      public static void getFormattedDiff(org.eclipse.jgit.lib.Repository repo, org.eclipse.jgit.lib.ObjectReader reader, org.eclipse.jgit.revwalk.RevTree baseTree, org.eclipse.jgit.revwalk.RevTree childTree, String path, OutputStream out) throws IOException
      Throws:
      IOException
    • normalizePatchForComparison

      public static String normalizePatchForComparison(String patch)
    • removePatchHeader

      public static String removePatchHeader(String patch)
    • getPatchHeader

      public static Optional<String> getPatchHeader(String patch)
    • normalizePatchForComparison

      public static String normalizePatchForComparison(BinaryResult bin) throws IOException
      Throws:
      IOException