mercurial/merge.py
changeset 2968 545d33aa3f82
parent 2899 8743188f4d2e
child 2969 833677bc9791
equal deleted inserted replaced
2967:eef469259745 2968:545d33aa3f82
    68         raise util.Abort(_("outstanding uncommitted merges"))
    68         raise util.Abort(_("outstanding uncommitted merges"))
    69 
    69 
    70     p1, p2 = pl[0], node
    70     p1, p2 = pl[0], node
    71     pa = repo.changelog.ancestor(p1, p2)
    71     pa = repo.changelog.ancestor(p1, p2)
    72 
    72 
       
    73     # are we going backwards?
       
    74     backwards = (pa == p2)
       
    75 
    73     # is there a linear path from p1 to p2?
    76     # is there a linear path from p1 to p2?
    74     linear_path = (pa == p1 or pa == p2)
    77     linear_path = (pa == p1 or pa == p2)
    75     if branchmerge and linear_path:
    78     if branchmerge and linear_path:
    76         raise util.Abort(_("there is nothing to merge, just use "
    79         raise util.Abort(_("there is nothing to merge, just use "
    77                            "'hg update' or look at 'hg heads'"))
    80                            "'hg update' or look at 'hg heads'"))
   152                     repo.ui.debug(_(" %s versions differ, resolve\n") % f)
   155                     repo.ui.debug(_(" %s versions differ, resolve\n") % f)
   153                     merge[f] = (fmerge(f, mw, m2, ma), m1.get(f, nullid), m2[f])
   156                     merge[f] = (fmerge(f, mw, m2, ma), m1.get(f, nullid), m2[f])
   154                     s = 1
   157                     s = 1
   155                 # are we clobbering?
   158                 # are we clobbering?
   156                 # is remote's version newer?
   159                 # is remote's version newer?
   157                 # or are we going back in time?
   160                 # or are we going back in time and clean?
   158                 elif overwrite or m2[f] != a or (p2 == pa and mw[f] == m1[f]):
   161                 elif overwrite or m2[f] != a or (backwards and mw[f] == m1[f]):
   159                     repo.ui.debug(_(" remote %s is newer, get\n") % f)
   162                     repo.ui.debug(_(" remote %s is newer, get\n") % f)
   160                     get[f] = (m2.execf(f), m2[f])
   163                     get[f] = (m2.execf(f), m2[f])
   161                     s = 1
   164                     s = 1
   162             elif f in umap or f in added:
   165             elif f in umap or f in added:
   163                 # this unknown file is the same as the checkout
   166                 # this unknown file is the same as the checkout
   190             # file is created on branch or in working directory
   193             # file is created on branch or in working directory
   191             if overwrite and f not in umap:
   194             if overwrite and f not in umap:
   192                 repo.ui.debug(_("remote deleted %s, clobbering\n") % f)
   195                 repo.ui.debug(_("remote deleted %s, clobbering\n") % f)
   193                 remove.append(f)
   196                 remove.append(f)
   194             elif n == m1.get(f, nullid): # same as parent
   197             elif n == m1.get(f, nullid): # same as parent
   195                 if p2 == pa: # going backwards?
   198                 if backwards:
   196                     repo.ui.debug(_("remote deleted %s\n") % f)
   199                     repo.ui.debug(_("remote deleted %s\n") % f)
   197                     remove.append(f)
   200                     remove.append(f)
   198                 else:
   201                 else:
   199                     repo.ui.debug(_("local modified %s, keeping\n") % f)
   202                     repo.ui.debug(_("local modified %s, keeping\n") % f)
   200             else:
   203             else:
   215                 get[f] = (m2.execf(f), n)
   218                 get[f] = (m2.execf(f), n)
   216         elif f not in ma:
   219         elif f not in ma:
   217             repo.ui.debug(_("remote created %s\n") % f)
   220             repo.ui.debug(_("remote created %s\n") % f)
   218             get[f] = (m2.execf(f), n)
   221             get[f] = (m2.execf(f), n)
   219         else:
   222         else:
   220             if overwrite or p2 == pa: # going backwards?
   223             if overwrite or backwards:
   221                 repo.ui.debug(_("local deleted %s, recreating\n") % f)
   224                 repo.ui.debug(_("local deleted %s, recreating\n") % f)
   222                 get[f] = (m2.execf(f), n)
   225                 get[f] = (m2.execf(f), n)
   223             else:
   226             else:
   224                 repo.ui.debug(_("local deleted %s\n") % f)
   227                 repo.ui.debug(_("local deleted %s\n") % f)
   225 
   228