Class DiffOperationsImpl
- java.lang.Object
-
- com.google.gerrit.server.patch.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 Summary
Constructors Constructor Description DiffOperationsImpl(ModifiedFilesCache modifiedFilesCache, FileDiffCache fileDiffCache, com.google.gerrit.server.patch.BaseCommitUtil baseCommit)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description FileDiffOutput
getModifiedFile(Project.NameKey project, org.eclipse.jgit.lib.ObjectId oldCommit, org.eclipse.jgit.lib.ObjectId newCommit, String fileName, DiffPreferencesInfo.Whitespace whitespace)
Returns the diff for a single file between two patchset commits.FileDiffOutput
getModifiedFileAgainstParent(Project.NameKey project, org.eclipse.jgit.lib.ObjectId newCommit, int parent, String fileName, DiffPreferencesInfo.Whitespace whitespace)
Returns the diff for a single file between a patchset commit against its parent or the auto-merge commit.Map<String,FileDiffOutput>
listModifiedFiles(Project.NameKey project, org.eclipse.jgit.lib.ObjectId oldCommit, org.eclipse.jgit.lib.ObjectId newCommit, DiffOptions diffOptions)
Returns the list of added, deleted or modified files between two commits (patchsets).Map<String,FileDiffOutput>
listModifiedFilesAgainstParent(Project.NameKey project, org.eclipse.jgit.lib.ObjectId newCommit, int parent, DiffOptions diffOptions)
Returns the list of added, deleted or modified files between a commit against its base.Map<String,ModifiedFile>
loadModifiedFiles(Project.NameKey project, org.eclipse.jgit.lib.ObjectId oldCommit, org.eclipse.jgit.lib.ObjectId newCommit, DiffOptions diffOptions, org.eclipse.jgit.revwalk.RevWalk revWalk, org.eclipse.jgit.lib.Config repoConfig)
This method is similar toDiffOperations.listModifiedFilesAgainstParent(NameKey, ObjectId, int, DiffOptions)
but loads the modified files directly instead of retrieving them from the diff cache.Map<String,ModifiedFile>
loadModifiedFilesAgainstParent(Project.NameKey project, org.eclipse.jgit.lib.ObjectId newCommit, int parentNum, DiffOptions diffOptions, org.eclipse.jgit.revwalk.RevWalk revWalk, org.eclipse.jgit.lib.Config repoConfig)
This method is similar toDiffOperations.listModifiedFilesAgainstParent(NameKey, ObjectId, int, DiffOptions)
but loads the modified files directly instead of retrieving them from the diff cache.static com.google.inject.Module
module()
-
-
-
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. ThePatch.COMMIT_MSG
andPatch.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. IfnewCommit
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 interfaceDiffOperations
- 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 ifnewCommit
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 exceptPatch.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 thenewCommit
could not be parsed for extracting the base commit, or if an internal error occurred in Git while evaluating the diff.
-
loadModifiedFilesAgainstParent
public Map<String,ModifiedFile> loadModifiedFilesAgainstParent(Project.NameKey project, org.eclipse.jgit.lib.ObjectId newCommit, int parentNum, DiffOptions diffOptions, org.eclipse.jgit.revwalk.RevWalk revWalk, org.eclipse.jgit.lib.Config repoConfig) throws DiffNotAvailableException
Description copied from interface:DiffOperations
This method is similar toDiffOperations.listModifiedFilesAgainstParent(NameKey, ObjectId, int, DiffOptions)
but loads the modified files directly instead of retrieving them from the diff cache.A RevWalk and repoConfig are also supplied and are used to look up the commit IDs. This is useful in case one the commits is currently being created, that's why the
revWalk
parameter is needed.Note that rename detection is disabled for this method.
- Specified by:
loadModifiedFilesAgainstParent
in interfaceDiffOperations
- Returns:
- a map of file paths to
ModifiedFile
. TheModifiedFile
contains the old/new file paths and the change type (added, deleted, etc...). - Throws:
DiffNotAvailableException
-
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 interfaceDiffOperations
- 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 exceptPatch.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.
-
loadModifiedFiles
public Map<String,ModifiedFile> loadModifiedFiles(Project.NameKey project, org.eclipse.jgit.lib.ObjectId oldCommit, org.eclipse.jgit.lib.ObjectId newCommit, DiffOptions diffOptions, org.eclipse.jgit.revwalk.RevWalk revWalk, org.eclipse.jgit.lib.Config repoConfig) throws DiffNotAvailableException
Description copied from interface:DiffOperations
This method is similar toDiffOperations.listModifiedFilesAgainstParent(NameKey, ObjectId, int, DiffOptions)
but loads the modified files directly instead of retrieving them from the diff cache.A RevWalk and repoConfig are also supplied and are used to look up the commit IDs. This is useful in case one the commits is currently being created, that's why the
revWalk
parameter is needed.Note that rename detection is disabled for this method.
- Specified by:
loadModifiedFiles
in interfaceDiffOperations
- Returns:
- a map of file paths to
ModifiedFile
. TheModifiedFile
contains the old/new file paths and the change type (added, deleted, etc...). - Throws:
DiffNotAvailableException
-
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, thefileName
parameter should contain the old name of the file. This method will returnFileDiffOutput.empty(String, ObjectId, ObjectId)
if the requested file identified byfileName
has unchanged content or does not exist at both commits.- Specified by:
getModifiedFileAgainstParent
in interfaceDiffOperations
- 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 ifnewCommit
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, thefileName
parameter should contain the old name of the file. This method will returnFileDiffOutput.empty(String, ObjectId, ObjectId)
if the requested file identified byfileName
has unchanged content or does not exist at both commits.- Specified by:
getModifiedFile
in interfaceDiffOperations
- 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.
-
-