Class DiffOperationsImpl

  • All Implemented Interfaces:
    DiffOperations

    public class DiffOperationsImpl
    extends Object
    implements DiffOperations
    Provides different file diff operations. Uses the underlying Git/Gerrit caches to speed up the diff computation.
    • Constructor Detail

      • DiffOperationsImpl

        @Inject
        public DiffOperationsImpl​(ModifiedFilesCache modifiedFilesCache,
                                  FileDiffCache fileDiffCache,
                                  com.google.gerrit.server.patch.BaseCommitUtil baseCommit)
    • Method Detail

      • module

        public static com.google.inject.Module module()
      • listModifiedFilesAgainstParent

        public Map<String,​FileDiffOutput> listModifiedFilesAgainstParent​(Project.NameKey project,
                                                                               org.eclipse.jgit.lib.ObjectId newCommit,
                                                                               int parent,
                                                                               DiffOptions diffOptions)
                                                                        throws DiffNotAvailableException
        Description copied from interface: DiffOperations
        Returns the list of added, deleted or modified files between a commit against its base. The Patch.COMMIT_MSG and Patch.MERGE_LIST (for merge commits) are also returned.

        If parentNum is set, it is used as the old commit in the diff. Otherwise, if the newCommit has only one parent, it is used as base. If newCommit has two parents, the auto-merge commit is computed and used as base. The auto-merge for more than two parents is not supported.

        Specified by:
        listModifiedFilesAgainstParent in interface DiffOperations
        Parameters:
        project - a project name representing a git repository.
        newCommit - 20 bytes SHA-1 of the new commit used in the diff.
        parent - 1-based integer specifying which parent to use as base. If zero, the only parent will be used or the auto-merge if newCommit is a merge commit.
        Returns:
        map of file paths to the file diffs. The map key is the new file path for all Patch.ChangeType file diffs except Patch.ChangeType.DELETED entries where the map key contains the old file path. The map entries are not sorted by key.
        Throws:
        DiffNotAvailableException - if auto-merge is requested for a commit having more than two parents, if the newCommit could not be parsed for extracting the base commit, or if an internal error occurred in Git while evaluating the diff.
      • listModifiedFiles

        public Map<String,​FileDiffOutput> listModifiedFiles​(Project.NameKey project,
                                                                  org.eclipse.jgit.lib.ObjectId oldCommit,
                                                                  org.eclipse.jgit.lib.ObjectId newCommit,
                                                                  DiffOptions diffOptions)
                                                           throws DiffNotAvailableException
        Description copied from interface: DiffOperations
        Returns the list of added, deleted or modified files between two commits (patchsets). The commit message and merge list (for merge commits) are also returned.
        Specified by:
        listModifiedFiles in interface DiffOperations
        Parameters:
        project - a project name representing a git repository.
        oldCommit - 20 bytes SHA-1 of the old commit used in the diff.
        newCommit - 20 bytes SHA-1 of the new commit used in the diff.
        Returns:
        map of file paths to the file diffs. The map key is the new file path for all Patch.ChangeType file diffs except Patch.ChangeType.DELETED entries where the map key contains the old file path. The map entries are not sorted by key.
        Throws:
        DiffNotAvailableException - if an internal error occurred in Git while evaluating the diff.
      • getModifiedFileAgainstParent

        public FileDiffOutput getModifiedFileAgainstParent​(Project.NameKey project,
                                                           org.eclipse.jgit.lib.ObjectId newCommit,
                                                           int parent,
                                                           String fileName,
                                                           DiffPreferencesInfo.Whitespace whitespace)
                                                    throws DiffNotAvailableException
        Description copied from interface: DiffOperations
        Returns the diff for a single file between a patchset commit against its parent or the auto-merge commit. For deleted files, the fileName parameter should contain the old name of the file. This method will return FileDiffOutput.empty(String, ObjectId, ObjectId) if the requested file identified by fileName has unchanged content or does not exist at both commits.
        Specified by:
        getModifiedFileAgainstParent in interface DiffOperations
        Parameters:
        project - a project name representing a git repository.
        newCommit - 20 bytes SHA-1 of the new commit used in the diff.
        parent - 1-based integer specifying which parent to use as base. If zero, the only parent will be used or the auto-merge if newCommit is a merge commit.
        fileName - the file name for which the diff should be evaluated.
        whitespace - preference controlling whitespace effect in diff computation.
        Returns:
        the diff for the single file between the two commits.
        Throws:
        DiffNotAvailableException - if an internal error occurred in Git while evaluating the diff, or if an exception happened while parsing the base commit.
      • getModifiedFile

        public FileDiffOutput getModifiedFile​(Project.NameKey project,
                                              org.eclipse.jgit.lib.ObjectId oldCommit,
                                              org.eclipse.jgit.lib.ObjectId newCommit,
                                              String fileName,
                                              DiffPreferencesInfo.Whitespace whitespace)
                                       throws DiffNotAvailableException
        Description copied from interface: DiffOperations
        Returns the diff for a single file between two patchset commits. For deleted files, the fileName parameter should contain the old name of the file. This method will return FileDiffOutput.empty(String, ObjectId, ObjectId) if the requested file identified by fileName has unchanged content or does not exist at both commits.
        Specified by:
        getModifiedFile in interface DiffOperations
        Parameters:
        project - a project name representing a git repository.
        oldCommit - 20 bytes SHA-1 of the old commit used in the diff.
        newCommit - 20 bytes SHA-1 of the new commit used in the diff.
        fileName - the file name for which the diff should be evaluated.
        whitespace - preference controlling whitespace effect in diff computation.
        Returns:
        the diff for the single file between the two commits.
        Throws:
        DiffNotAvailableException - if an internal error occurred in Git while evaluating the diff.