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 use ObjectInserter.newReader(). This is already the default behavior of BatchUpdate.

  • Method Details

    • useRecursiveMerge

      public static boolean useRecursiveMerge(org.eclipse.jgit.lib.Config cfg)
    • useGitattributesForMerge

      public static boolean useGitattributesForMerge(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, boolean diff3Format, org.eclipse.jgit.attributes.AttributesNodeProvider attributesNodeProvider) 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, 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 authorIdent, org.eclipse.jgit.lib.PersonIdent committerIdent, String commitMsg, CodeReviewCommit.CodeReviewRevWalk rw, boolean diff3Format) throws IOException, MergeIdenticalTreeException, MergeConflictException, com.google.gerrit.exceptions.InvalidMergeStrategyException
      Throws:
      IOException
      MergeIdenticalTreeException
      MergeConflictException
      com.google.gerrit.exceptions.InvalidMergeStrategyException
    • createConflictMessage

      public static String createConflictMessage(List<String> conflicts)
    • 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

      public boolean hasMissingDependencies(MergeSorter mergeSorter, CodeReviewCommit toMerge)
    • 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, org.eclipse.jgit.attributes.AttributesNodeProvider attributesNodeProvider) 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.Repository repo) throws com.google.gerrit.exceptions.InvalidMergeStrategyException
      Throws:
      com.google.gerrit.exceptions.InvalidMergeStrategyException
    • newThreeWayMerger

      public org.eclipse.jgit.merge.ThreeWayMerger newThreeWayMerger(org.eclipse.jgit.lib.ObjectInserter inserter, org.eclipse.jgit.lib.Config repoConfig, org.eclipse.jgit.attributes.AttributesNodeProvider attributesNodeProvider) throws com.google.gerrit.exceptions.InvalidMergeStrategyException
      Throws:
      com.google.gerrit.exceptions.InvalidMergeStrategyException
    • 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, org.eclipse.jgit.attributes.AttributesNodeProvider attributesNodeProvider, String strategyName, boolean useGitattributesForMerge) 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
      Throws:
      BadRequestException
      ResourceNotFoundException
      IOException