Package com.google.gerrit.server.git
Class MergeUtil
java.lang.Object
com.google.gerrit.server.git.MergeUtil
Utility methods used during the merge process.
Note: Unless otherwise specified, the methods in this class do
not flush ObjectInserter
s. Callers that want to read back objects before
flushing should use ObjectInserter.newReader()
. This is already the default behavior of
BatchUpdate
.
-
Method Summary
Modifier and TypeMethodDescriptionboolean
canCherryPick
(MergeSorter mergeSorter, org.eclipse.jgit.lib.Repository repo, CodeReviewCommit mergeTip, CodeReviewCommit.CodeReviewRevWalk rw, CodeReviewCommit toMerge) boolean
canFastForward
(MergeSorter mergeSorter, CodeReviewCommit mergeTip, CodeReviewCommit.CodeReviewRevWalk rw, CodeReviewCommit toMerge) boolean
canFastForwardOrMerge
(MergeSorter mergeSorter, CodeReviewCommit mergeTip, CodeReviewCommit.CodeReviewRevWalk rw, org.eclipse.jgit.lib.Repository repo, CodeReviewCommit toMerge) boolean
canMerge
(MergeSorter mergeSorter, org.eclipse.jgit.lib.Repository repo, CodeReviewCommit mergeTip, CodeReviewCommit toMerge) createCherryPickFromCommit
(org.eclipse.jgit.lib.ObjectInserter inserter, org.eclipse.jgit.lib.Config repoConfig, org.eclipse.jgit.revwalk.RevCommit mergeTip, org.eclipse.jgit.revwalk.RevCommit originalCommit, org.eclipse.jgit.lib.PersonIdent cherryPickCommitterIdent, String commitMsg, CodeReviewCommit.CodeReviewRevWalk rw, int parentIndex, boolean ignoreIdenticalTree, boolean allowConflicts) createCherryPickFromCommit
(org.eclipse.jgit.lib.ObjectInserter inserter, org.eclipse.jgit.lib.Config repoConfig, org.eclipse.jgit.revwalk.RevCommit mergeTip, org.eclipse.jgit.revwalk.RevCommit originalCommit, org.eclipse.jgit.lib.PersonIdent cherryPickCommitterIdent, String commitMsg, CodeReviewCommit.CodeReviewRevWalk rw, int parentIndex, boolean ignoreIdenticalTree, boolean allowConflicts, boolean diff3Format) createCommitMessageOnSubmit
(CodeReviewCommit n, org.eclipse.jgit.revwalk.RevCommit mergeTip) createCommitMessageOnSubmit
(org.eclipse.jgit.revwalk.RevCommit n, org.eclipse.jgit.revwalk.RevCommit mergeTip, ChangeNotes notes, PatchSet.Id id) Creates a commit message for a change, which can be customized by plugins.static String
createConflictMessage
(List<String> conflicts) static CodeReviewCommit
createMergeCommit
(org.eclipse.jgit.lib.ObjectInserter inserter, org.eclipse.jgit.lib.Config repoConfig, org.eclipse.jgit.revwalk.RevCommit mergeTip, org.eclipse.jgit.revwalk.RevCommit originalCommit, String mergeStrategy, boolean allowConflicts, org.eclipse.jgit.lib.PersonIdent committerIdent, String commitMsg, CodeReviewCommit.CodeReviewRevWalk rw) static CodeReviewCommit
createMergeCommit
(org.eclipse.jgit.lib.ObjectInserter inserter, org.eclipse.jgit.lib.Config repoConfig, org.eclipse.jgit.revwalk.RevCommit mergeTip, org.eclipse.jgit.revwalk.RevCommit originalCommit, String mergeStrategy, boolean allowConflicts, org.eclipse.jgit.lib.PersonIdent authorIdent, org.eclipse.jgit.lib.PersonIdent committerIdent, String commitMsg, CodeReviewCommit.CodeReviewRevWalk rw) static CodeReviewCommit
findAnyMergedInto
(CodeReviewCommit.CodeReviewRevWalk rw, Iterable<CodeReviewCommit> commits, CodeReviewCommit tip) findUnmergedChanges
(Set<Change.Id> expected, CodeReviewCommit.CodeReviewRevWalk rw, org.eclipse.jgit.revwalk.RevFlag canMergeFlag, CodeReviewCommit oldTip, CodeReviewCommit mergeTip, Iterable<Change.Id> alreadyMerged) getFirstFastForward
(CodeReviewCommit mergeTip, org.eclipse.jgit.revwalk.RevWalk rw, List<CodeReviewCommit> toMerge) static org.eclipse.jgit.merge.ThreeWayMergeStrategy
getMergeStrategy
(org.eclipse.jgit.lib.Config cfg) boolean
hasMissingDependencies
(MergeSorter mergeSorter, CodeReviewCommit toMerge) void
markCleanMerges
(org.eclipse.jgit.revwalk.RevWalk rw, org.eclipse.jgit.revwalk.RevFlag canMergeFlag, CodeReviewCommit mergeTip, Set<org.eclipse.jgit.revwalk.RevCommit> alreadyAccepted) mergeOneCommit
(org.eclipse.jgit.lib.PersonIdent author, org.eclipse.jgit.lib.PersonIdent committer, CodeReviewCommit.CodeReviewRevWalk rw, org.eclipse.jgit.lib.ObjectInserter inserter, org.eclipse.jgit.lib.Config repoConfig, BranchNameKey destBranch, CodeReviewCommit mergeTip, CodeReviewCommit n) static String
mergeStrategyName
(boolean useContentMerge, boolean useRecursiveMerge) static org.eclipse.jgit.lib.ObjectId
mergeWithConflicts
(org.eclipse.jgit.revwalk.RevWalk rw, org.eclipse.jgit.lib.ObjectInserter ins, org.eclipse.jgit.dircache.DirCache dc, String oursName, org.eclipse.jgit.revwalk.RevCommit ours, String theirsName, org.eclipse.jgit.revwalk.RevCommit theirs, Map<String, org.eclipse.jgit.merge.MergeResult<? extends org.eclipse.jgit.diff.Sequence>> mergeResults) static org.eclipse.jgit.lib.ObjectId
mergeWithConflicts
(org.eclipse.jgit.revwalk.RevWalk rw, org.eclipse.jgit.lib.ObjectInserter ins, org.eclipse.jgit.dircache.DirCache dc, String oursName, org.eclipse.jgit.revwalk.RevCommit ours, String theirsName, org.eclipse.jgit.revwalk.RevCommit theirs, Map<String, org.eclipse.jgit.merge.MergeResult<? extends org.eclipse.jgit.diff.Sequence>> mergeResults, boolean diff3Format) static org.eclipse.jgit.merge.Merger
newMerger
(org.eclipse.jgit.lib.ObjectInserter inserter, org.eclipse.jgit.lib.Config repoConfig, String strategyName) org.eclipse.jgit.merge.ThreeWayMerger
newThreeWayMerger
(org.eclipse.jgit.lib.ObjectInserter inserter, org.eclipse.jgit.lib.Config repoConfig) static org.eclipse.jgit.merge.ThreeWayMerger
newThreeWayMerger
(org.eclipse.jgit.lib.ObjectInserter inserter, org.eclipse.jgit.lib.Config repoConfig, String strategyName) reduceToMinimalMerge
(MergeSorter mergeSorter, Collection<CodeReviewCommit> toSort) static org.eclipse.jgit.revwalk.RevCommit
resolveCommit
(org.eclipse.jgit.lib.Repository repo, org.eclipse.jgit.revwalk.RevWalk rw, String str) static boolean
useRecursiveMerge
(org.eclipse.jgit.lib.Config cfg) writeMergeCommit
(org.eclipse.jgit.lib.PersonIdent author, org.eclipse.jgit.lib.PersonIdent committer, CodeReviewCommit.CodeReviewRevWalk rw, org.eclipse.jgit.lib.ObjectInserter inserter, BranchNameKey destBranch, CodeReviewCommit mergeTip, org.eclipse.jgit.lib.ObjectId treeId, CodeReviewCommit n)
-
Method Details
-
useRecursiveMerge
public static boolean useRecursiveMerge(org.eclipse.jgit.lib.Config cfg) -
getMergeStrategy
public static org.eclipse.jgit.merge.ThreeWayMergeStrategy getMergeStrategy(org.eclipse.jgit.lib.Config cfg) -
getFirstFastForward
public CodeReviewCommit getFirstFastForward(CodeReviewCommit mergeTip, org.eclipse.jgit.revwalk.RevWalk rw, List<CodeReviewCommit> toMerge) -
reduceToMinimalMerge
public List<CodeReviewCommit> reduceToMinimalMerge(MergeSorter mergeSorter, Collection<CodeReviewCommit> toSort) -
createCherryPickFromCommit
public CodeReviewCommit createCherryPickFromCommit(org.eclipse.jgit.lib.ObjectInserter inserter, org.eclipse.jgit.lib.Config repoConfig, org.eclipse.jgit.revwalk.RevCommit mergeTip, org.eclipse.jgit.revwalk.RevCommit originalCommit, org.eclipse.jgit.lib.PersonIdent cherryPickCommitterIdent, String commitMsg, CodeReviewCommit.CodeReviewRevWalk rw, int parentIndex, boolean ignoreIdenticalTree, boolean allowConflicts) throws IOException, MergeIdenticalTreeException, MergeConflictException, MethodNotAllowedException, com.google.gerrit.exceptions.InvalidMergeStrategyException - Throws:
IOException
MergeIdenticalTreeException
MergeConflictException
MethodNotAllowedException
com.google.gerrit.exceptions.InvalidMergeStrategyException
-
createCherryPickFromCommit
public CodeReviewCommit createCherryPickFromCommit(org.eclipse.jgit.lib.ObjectInserter inserter, org.eclipse.jgit.lib.Config repoConfig, org.eclipse.jgit.revwalk.RevCommit mergeTip, org.eclipse.jgit.revwalk.RevCommit originalCommit, org.eclipse.jgit.lib.PersonIdent cherryPickCommitterIdent, String commitMsg, CodeReviewCommit.CodeReviewRevWalk rw, int parentIndex, boolean ignoreIdenticalTree, boolean allowConflicts, boolean diff3Format) throws IOException, MergeIdenticalTreeException, MergeConflictException, MethodNotAllowedException, com.google.gerrit.exceptions.InvalidMergeStrategyException - Throws:
IOException
MergeIdenticalTreeException
MergeConflictException
MethodNotAllowedException
com.google.gerrit.exceptions.InvalidMergeStrategyException
-
mergeWithConflicts
public static org.eclipse.jgit.lib.ObjectId mergeWithConflicts(org.eclipse.jgit.revwalk.RevWalk rw, org.eclipse.jgit.lib.ObjectInserter ins, org.eclipse.jgit.dircache.DirCache dc, String oursName, org.eclipse.jgit.revwalk.RevCommit ours, String theirsName, org.eclipse.jgit.revwalk.RevCommit theirs, Map<String, org.eclipse.jgit.merge.MergeResult<? extends org.eclipse.jgit.diff.Sequence>> mergeResults) throws IOException- Throws:
IOException
-
mergeWithConflicts
public static org.eclipse.jgit.lib.ObjectId mergeWithConflicts(org.eclipse.jgit.revwalk.RevWalk rw, org.eclipse.jgit.lib.ObjectInserter ins, org.eclipse.jgit.dircache.DirCache dc, String oursName, org.eclipse.jgit.revwalk.RevCommit ours, String theirsName, org.eclipse.jgit.revwalk.RevCommit theirs, Map<String, org.eclipse.jgit.merge.MergeResult<? extends org.eclipse.jgit.diff.Sequence>> mergeResults, boolean diff3Format) throws IOException- Throws:
IOException
-
createMergeCommit
public static CodeReviewCommit createMergeCommit(org.eclipse.jgit.lib.ObjectInserter inserter, org.eclipse.jgit.lib.Config repoConfig, org.eclipse.jgit.revwalk.RevCommit mergeTip, org.eclipse.jgit.revwalk.RevCommit originalCommit, String mergeStrategy, boolean allowConflicts, org.eclipse.jgit.lib.PersonIdent committerIdent, String commitMsg, CodeReviewCommit.CodeReviewRevWalk rw) throws IOException, MergeIdenticalTreeException, MergeConflictException, com.google.gerrit.exceptions.InvalidMergeStrategyException - Throws:
IOException
MergeIdenticalTreeException
MergeConflictException
com.google.gerrit.exceptions.InvalidMergeStrategyException
-
createMergeCommit
public static CodeReviewCommit createMergeCommit(org.eclipse.jgit.lib.ObjectInserter inserter, org.eclipse.jgit.lib.Config repoConfig, org.eclipse.jgit.revwalk.RevCommit mergeTip, org.eclipse.jgit.revwalk.RevCommit originalCommit, String mergeStrategy, boolean allowConflicts, org.eclipse.jgit.lib.PersonIdent authorIdent, org.eclipse.jgit.lib.PersonIdent committerIdent, String commitMsg, CodeReviewCommit.CodeReviewRevWalk rw) throws IOException, MergeIdenticalTreeException, MergeConflictException, com.google.gerrit.exceptions.InvalidMergeStrategyException - Throws:
IOException
MergeIdenticalTreeException
MergeConflictException
com.google.gerrit.exceptions.InvalidMergeStrategyException
-
createConflictMessage
-
createCommitMessageOnSubmit
public String createCommitMessageOnSubmit(CodeReviewCommit n, org.eclipse.jgit.revwalk.RevCommit mergeTip) -
createCommitMessageOnSubmit
public String createCommitMessageOnSubmit(org.eclipse.jgit.revwalk.RevCommit n, org.eclipse.jgit.revwalk.RevCommit mergeTip, ChangeNotes notes, PatchSet.Id id) Creates a commit message for a change, which can be customized by plugins.By default, adds footers to existing commit message based on the state of the change. Plugins implementing
ChangeMessageModifier
can modify the resulting commit message arbitrarily.- Returns:
- new message
-
canMerge
public boolean canMerge(MergeSorter mergeSorter, org.eclipse.jgit.lib.Repository repo, CodeReviewCommit mergeTip, CodeReviewCommit toMerge) -
canFastForward
public boolean canFastForward(MergeSorter mergeSorter, CodeReviewCommit mergeTip, CodeReviewCommit.CodeReviewRevWalk rw, CodeReviewCommit toMerge) -
canFastForwardOrMerge
public boolean canFastForwardOrMerge(MergeSorter mergeSorter, CodeReviewCommit mergeTip, CodeReviewCommit.CodeReviewRevWalk rw, org.eclipse.jgit.lib.Repository repo, CodeReviewCommit toMerge) -
canCherryPick
public boolean canCherryPick(MergeSorter mergeSorter, org.eclipse.jgit.lib.Repository repo, CodeReviewCommit mergeTip, CodeReviewCommit.CodeReviewRevWalk rw, CodeReviewCommit toMerge) -
hasMissingDependencies
-
mergeOneCommit
public CodeReviewCommit mergeOneCommit(org.eclipse.jgit.lib.PersonIdent author, org.eclipse.jgit.lib.PersonIdent committer, CodeReviewCommit.CodeReviewRevWalk rw, org.eclipse.jgit.lib.ObjectInserter inserter, org.eclipse.jgit.lib.Config repoConfig, BranchNameKey destBranch, CodeReviewCommit mergeTip, CodeReviewCommit n) throws com.google.gerrit.exceptions.InvalidMergeStrategyException - Throws:
com.google.gerrit.exceptions.InvalidMergeStrategyException
-
writeMergeCommit
public CodeReviewCommit writeMergeCommit(org.eclipse.jgit.lib.PersonIdent author, org.eclipse.jgit.lib.PersonIdent committer, CodeReviewCommit.CodeReviewRevWalk rw, org.eclipse.jgit.lib.ObjectInserter inserter, BranchNameKey destBranch, CodeReviewCommit mergeTip, org.eclipse.jgit.lib.ObjectId treeId, CodeReviewCommit n) throws IOException, org.eclipse.jgit.errors.MissingObjectException, org.eclipse.jgit.errors.IncorrectObjectTypeException - Throws:
IOException
org.eclipse.jgit.errors.MissingObjectException
org.eclipse.jgit.errors.IncorrectObjectTypeException
-
newThreeWayMerger
public org.eclipse.jgit.merge.ThreeWayMerger newThreeWayMerger(org.eclipse.jgit.lib.ObjectInserter inserter, org.eclipse.jgit.lib.Config repoConfig) throws com.google.gerrit.exceptions.InvalidMergeStrategyException - Throws:
com.google.gerrit.exceptions.InvalidMergeStrategyException
-
mergeStrategyName
-
mergeStrategyName
-
newThreeWayMerger
public static org.eclipse.jgit.merge.ThreeWayMerger newThreeWayMerger(org.eclipse.jgit.lib.ObjectInserter inserter, org.eclipse.jgit.lib.Config repoConfig, String strategyName) throws com.google.gerrit.exceptions.InvalidMergeStrategyException - Throws:
com.google.gerrit.exceptions.InvalidMergeStrategyException
-
newMerger
public static org.eclipse.jgit.merge.Merger newMerger(org.eclipse.jgit.lib.ObjectInserter inserter, org.eclipse.jgit.lib.Config repoConfig, String strategyName) throws com.google.gerrit.exceptions.InvalidMergeStrategyException - Throws:
com.google.gerrit.exceptions.InvalidMergeStrategyException
-
markCleanMerges
public void markCleanMerges(org.eclipse.jgit.revwalk.RevWalk rw, org.eclipse.jgit.revwalk.RevFlag canMergeFlag, CodeReviewCommit mergeTip, Set<org.eclipse.jgit.revwalk.RevCommit> alreadyAccepted) -
findUnmergedChanges
public Set<Change.Id> findUnmergedChanges(Set<Change.Id> expected, CodeReviewCommit.CodeReviewRevWalk rw, org.eclipse.jgit.revwalk.RevFlag canMergeFlag, CodeReviewCommit oldTip, CodeReviewCommit mergeTip, Iterable<Change.Id> alreadyMerged) -
findAnyMergedInto
public static CodeReviewCommit findAnyMergedInto(CodeReviewCommit.CodeReviewRevWalk rw, Iterable<CodeReviewCommit> commits, CodeReviewCommit tip) throws IOException - Throws:
IOException
-
resolveCommit
public static org.eclipse.jgit.revwalk.RevCommit resolveCommit(org.eclipse.jgit.lib.Repository repo, org.eclipse.jgit.revwalk.RevWalk rw, String str) throws BadRequestException, ResourceNotFoundException, IOException
-