Class RecursiveMerger


  • public class RecursiveMerger
    extends ResolveMerger
    A three-way merger performing a content-merge if necessary across multiple bases using recursion This merger extends the resolve merger and does several things differently: - allow more than one merge base, up to a maximum - uses "Lists" instead of Arrays for chained types - recursively merges the merge bases together to compute a usable base
    Since:
    3.0
    • Field Detail

      • MAX_BASES

        public final int MAX_BASES
        The maximum number of merge bases. This merge will stop when the number of merge bases exceeds this value
        See Also:
        Constant Field Values
    • Constructor Detail

      • RecursiveMerger

        protected RecursiveMerger​(Repository local,
                                  boolean inCore)
        Normal recursive merge when you want a choice of DirCache placement inCore
        Parameters:
        local - a Repository object.
        inCore - a boolean.
      • RecursiveMerger

        protected RecursiveMerger​(Repository local)
        Normal recursive merge, implies not inCore
        Parameters:
        local - a Repository object.
      • RecursiveMerger

        protected RecursiveMerger​(ObjectInserter inserter,
                                  Config config)
        Normal recursive merge, implies inCore.
        Parameters:
        inserter - an ObjectInserter object.
        config - the repository configuration
        Since:
        4.8
    • Method Detail

      • getBaseCommit

        protected RevCommit getBaseCommit​(RevCommit a,
                                          RevCommit b,
                                          int callDepth)
                                   throws IOException
        Get a single base commit for two given commits. If the two source commits have more than one base commit recursively merge the base commits together until a virtual common base commit has been found.
        Parameters:
        a - the first commit to be merged
        b - the second commit to be merged
        callDepth - the callDepth when this method is called recursively
        Returns:
        the merge base of two commits. If a criss-cross merge required a synthetic merge base this commit is visible only the merger's RevWalk and will not be in the repository.
        Throws:
        IOException
        IncorrectObjectTypeException - one of the input objects is not a commit.
        NoMergeBaseException - too many merge bases are found or the computation of a common merge base failed (e.g. because of a conflict).