Package com.google.gerrit.server.git
Class MergeUtil
- java.lang.Object
-
- com.google.gerrit.server.git.MergeUtil
-
public class MergeUtil extends Object
Utility methods used during the merge process.Note: Unless otherwise specified, the methods in this class do not flush
ObjectInserters. Callers that want to read back objects before flushing should useObjectInserter.newReader(). This is already the default behavior ofBatchUpdate.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interfaceMergeUtil.Factory
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description booleancanCherryPick(MergeSorter mergeSorter, org.eclipse.jgit.lib.Repository repo, CodeReviewCommit mergeTip, CodeReviewCommit.CodeReviewRevWalk rw, CodeReviewCommit toMerge)booleancanFastForward(MergeSorter mergeSorter, CodeReviewCommit mergeTip, CodeReviewCommit.CodeReviewRevWalk rw, CodeReviewCommit toMerge)booleancanMerge(MergeSorter mergeSorter, org.eclipse.jgit.lib.Repository repo, CodeReviewCommit mergeTip, CodeReviewCommit toMerge)CodeReviewCommitcreateCherryPickFromCommit(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)StringcreateCommitMessageOnSubmit(CodeReviewCommit n, org.eclipse.jgit.revwalk.RevCommit mergeTip)StringcreateCommitMessageOnSubmit(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 StringcreateConflictMessage(List<String> conflicts)static org.eclipse.jgit.revwalk.RevCommitcreateMergeCommit(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, org.eclipse.jgit.lib.PersonIdent committerIndent, String commitMsg, org.eclipse.jgit.revwalk.RevWalk rw)static CodeReviewCommitfindAnyMergedInto(CodeReviewCommit.CodeReviewRevWalk rw, Iterable<CodeReviewCommit> commits, CodeReviewCommit tip)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)CodeReviewCommitgetFirstFastForward(CodeReviewCommit mergeTip, org.eclipse.jgit.revwalk.RevWalk rw, List<CodeReviewCommit> toMerge)static org.eclipse.jgit.merge.ThreeWayMergeStrategygetMergeStrategy(org.eclipse.jgit.lib.Config cfg)booleanhasMissingDependencies(MergeSorter mergeSorter, CodeReviewCommit toMerge)voidmarkCleanMerges(org.eclipse.jgit.revwalk.RevWalk rw, org.eclipse.jgit.revwalk.RevFlag canMergeFlag, CodeReviewCommit mergeTip, Set<org.eclipse.jgit.revwalk.RevCommit> alreadyAccepted)CodeReviewCommitmergeOneCommit(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)StringmergeStrategyName()static StringmergeStrategyName(boolean useContentMerge, boolean useRecursiveMerge)static org.eclipse.jgit.lib.ObjectIdmergeWithConflicts(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.merge.MergernewMerger(org.eclipse.jgit.lib.ObjectInserter inserter, org.eclipse.jgit.lib.Config repoConfig, String strategyName)org.eclipse.jgit.merge.ThreeWayMergernewThreeWayMerger(org.eclipse.jgit.lib.ObjectInserter inserter, org.eclipse.jgit.lib.Config repoConfig)static org.eclipse.jgit.merge.ThreeWayMergernewThreeWayMerger(org.eclipse.jgit.lib.ObjectInserter inserter, org.eclipse.jgit.lib.Config repoConfig, String strategyName)List<CodeReviewCommit>reduceToMinimalMerge(MergeSorter mergeSorter, Collection<CodeReviewCommit> toSort)static org.eclipse.jgit.revwalk.RevCommitresolveCommit(org.eclipse.jgit.lib.Repository repo, org.eclipse.jgit.revwalk.RevWalk rw, String str)static booleanuseRecursiveMerge(org.eclipse.jgit.lib.Config cfg)CodeReviewCommitwriteMergeCommit(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 Detail
-
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) throws IntegrationException
- Throws:
IntegrationException
-
reduceToMinimalMerge
public List<CodeReviewCommit> reduceToMinimalMerge(MergeSorter mergeSorter, Collection<CodeReviewCommit> toSort) throws IntegrationException
- Throws:
IntegrationException
-
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 org.eclipse.jgit.errors.MissingObjectException, org.eclipse.jgit.errors.IncorrectObjectTypeException, IOException, MergeIdenticalTreeException, MergeConflictException, MethodNotAllowedException
- Throws:
org.eclipse.jgit.errors.MissingObjectExceptionorg.eclipse.jgit.errors.IncorrectObjectTypeExceptionIOExceptionMergeIdenticalTreeExceptionMergeConflictExceptionMethodNotAllowedException
-
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
-
createMergeCommit
public static org.eclipse.jgit.revwalk.RevCommit 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, org.eclipse.jgit.lib.PersonIdent committerIndent, String commitMsg, org.eclipse.jgit.revwalk.RevWalk rw) throws IOException, MergeIdenticalTreeException, MergeConflictException
-
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
ChangeMessageModifiercan modify the resulting commit message arbitrarily.- Parameters:
n-mergeTip-notes-id-- Returns:
- new message
-
canMerge
public boolean canMerge(MergeSorter mergeSorter, org.eclipse.jgit.lib.Repository repo, CodeReviewCommit mergeTip, CodeReviewCommit toMerge) throws IntegrationException
- Throws:
IntegrationException
-
canFastForward
public boolean canFastForward(MergeSorter mergeSorter, CodeReviewCommit mergeTip, CodeReviewCommit.CodeReviewRevWalk rw, CodeReviewCommit toMerge) throws IntegrationException
- Throws:
IntegrationException
-
canCherryPick
public boolean canCherryPick(MergeSorter mergeSorter, org.eclipse.jgit.lib.Repository repo, CodeReviewCommit mergeTip, CodeReviewCommit.CodeReviewRevWalk rw, CodeReviewCommit toMerge) throws IntegrationException
- Throws:
IntegrationException
-
hasMissingDependencies
public boolean hasMissingDependencies(MergeSorter mergeSorter, CodeReviewCommit toMerge) throws IntegrationException
- Throws:
IntegrationException
-
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 IntegrationException
- Throws:
IntegrationException
-
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:
IOExceptionorg.eclipse.jgit.errors.MissingObjectExceptionorg.eclipse.jgit.errors.IncorrectObjectTypeException
-
newThreeWayMerger
public org.eclipse.jgit.merge.ThreeWayMerger newThreeWayMerger(org.eclipse.jgit.lib.ObjectInserter inserter, org.eclipse.jgit.lib.Config repoConfig)
-
mergeStrategyName
public String mergeStrategyName()
-
mergeStrategyName
public static String mergeStrategyName(boolean useContentMerge, boolean useRecursiveMerge)
-
newThreeWayMerger
public static org.eclipse.jgit.merge.ThreeWayMerger newThreeWayMerger(org.eclipse.jgit.lib.ObjectInserter inserter, org.eclipse.jgit.lib.Config repoConfig, String strategyName)
-
newMerger
public static org.eclipse.jgit.merge.Merger newMerger(org.eclipse.jgit.lib.ObjectInserter inserter, org.eclipse.jgit.lib.Config repoConfig, String strategyName)
-
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) throws IntegrationException- Throws:
IntegrationException
-
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) throws IntegrationException
- Throws:
IntegrationException
-
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
-
-