1. 10 Mar, 2018 1 commit
    • merge: reverse merge bases for recursive merge · b2b37077
      When the commits being merged have multiple merge bases, reverse the
      order when creating the virtual merge base.  This is for compatibility
      with git's merge-recursive algorithm, and ensures that we build
      identical trees.
      
      Git does this to try to use older merge bases first.  Per 8918b0c:
      
      > It seems to be the only sane way to do it: when a two-head merge is
      > done, and the merge-base and one of the two branches agree, the
      > merge assumes that the other branch has something new.
      >
      > If we start creating virtual commits from newer merge-bases, and go
      > back to older merge-bases, and then merge with newer commits again,
      > chances are that a patch is lost, _because_ the merge-base and the
      > head agree on it. Unlikely, yes, but it happened to me.
      Edward Thomson committed
  2. 25 Nov, 2015 2 commits
    • merge: handle conflicts in recursive base building · 78859c63
      When building a recursive merge base, allow conflicts to occur.
      Use the file (with conflict markers) as the common ancestor.
      
      The user has already seen and dealt with this conflict by virtue
      of having a criss-cross merge.  If they resolved this conflict
      identically in both branches, then there will be no conflict in the
      result.  This is the best case scenario.
      
      If they did not resolve the conflict identically in the two branches,
      then we will generate a new conflict.  If the user is simply using
      standard conflict output then the results will be fairly sensible.
      But if the user is using a mergetool or using diff3 output, then the
      common ancestor will be a conflict file (itself with diff3 output,
      haha!).  This is quite terrible, but it matches git's behavior.
      Edward Thomson committed