mercurial/merge.py
changeset 2919 8743188f4d2e
parent 2918 db397c38005d
child 2997 545d33aa3f82
equal deleted inserted replaced
2918:db397c38005d 2919:8743188f4d2e
   252             continue
   252             continue
   253         repo.ui.note(_("getting %s\n") % f)
   253         repo.ui.note(_("getting %s\n") % f)
   254         t = repo.file(f).read(node)
   254         t = repo.file(f).read(node)
   255         repo.wwrite(f, t)
   255         repo.wwrite(f, t)
   256         util.set_exec(repo.wjoin(f), flag)
   256         util.set_exec(repo.wjoin(f), flag)
   257         if not partial:
       
   258             if branchmerge:
       
   259                 repo.dirstate.update([f], 'n', st_mtime=-1)
       
   260             else:
       
   261                 repo.dirstate.update([f], 'n')
       
   262 
   257 
   263     # merge the tricky bits
   258     # merge the tricky bits
   264     unresolved = []
   259     unresolved = []
   265     files = merge.keys()
   260     files = merge.keys()
   266     files.sort()
   261     files.sort()
   269         flag, my, other = merge[f]
   264         flag, my, other = merge[f]
   270         ret = merge3(repo, f, my, other, xp1, xp2)
   265         ret = merge3(repo, f, my, other, xp1, xp2)
   271         if ret:
   266         if ret:
   272             unresolved.append(f)
   267             unresolved.append(f)
   273         util.set_exec(repo.wjoin(f), flag)
   268         util.set_exec(repo.wjoin(f), flag)
   274         if not partial:
       
   275             if branchmerge:
       
   276                 # We've done a branch merge, mark this file as merged
       
   277                 # so that we properly record the merger later
       
   278                 repo.dirstate.update([f], 'm')
       
   279             else:
       
   280                 # We've update-merged a locally modified file, so
       
   281                 # we set the dirstate to emulate a normal checkout
       
   282                 # of that file some time in the past. Thus our
       
   283                 # merge will appear as a normal local file
       
   284                 # modification.
       
   285                 fl = repo.file(f)
       
   286                 f_len = fl.size(fl.rev(other))
       
   287                 repo.dirstate.update([f], 'n', st_size=f_len, st_mtime=-1)
       
   288 
   269 
   289     remove.sort()
   270     remove.sort()
   290     for f in remove:
   271     for f in remove:
   291         repo.ui.note(_("removing %s\n") % f)
   272         repo.ui.note(_("removing %s\n") % f)
   292         util.audit_path(f)
   273         util.audit_path(f)
   294             util.unlink(repo.wjoin(f))
   275             util.unlink(repo.wjoin(f))
   295         except OSError, inst:
   276         except OSError, inst:
   296             if inst.errno != errno.ENOENT:
   277             if inst.errno != errno.ENOENT:
   297                 repo.ui.warn(_("update failed to remove %s: %s!\n") %
   278                 repo.ui.warn(_("update failed to remove %s: %s!\n") %
   298                              (f, inst.strerror))
   279                              (f, inst.strerror))
       
   280 
       
   281     # update dirstate
   299     if not partial:
   282     if not partial:
       
   283         repo.dirstate.setparents(p1, p2)
       
   284         repo.dirstate.forget(forget)
   300         if branchmerge:
   285         if branchmerge:
   301             repo.dirstate.update(remove, 'r')
   286             repo.dirstate.update(remove, 'r')
   302         else:
   287         else:
   303             repo.dirstate.forget(remove)
   288             repo.dirstate.forget(remove)
   304 
   289 
   305     if not partial:
   290         files = get.keys()
   306         repo.dirstate.setparents(p1, p2)
   291         files.sort()
   307         repo.dirstate.forget(forget)
   292         for f in files:
       
   293             if branchmerge:
       
   294                 repo.dirstate.update([f], 'n', st_mtime=-1)
       
   295             else:
       
   296                 repo.dirstate.update([f], 'n')
       
   297 
       
   298         files = merge.keys()
       
   299         files.sort()
       
   300         for f in files:
       
   301             if branchmerge:
       
   302                 # We've done a branch merge, mark this file as merged
       
   303                 # so that we properly record the merger later
       
   304                 repo.dirstate.update([f], 'm')
       
   305             else:
       
   306                 # We've update-merged a locally modified file, so
       
   307                 # we set the dirstate to emulate a normal checkout
       
   308                 # of that file some time in the past. Thus our
       
   309                 # merge will appear as a normal local file
       
   310                 # modification.
       
   311                 fl = repo.file(f)
       
   312                 f_len = fl.size(fl.rev(other))
       
   313                 repo.dirstate.update([f], 'n', st_size=f_len, st_mtime=-1)
   308 
   314 
   309     if show_stats:
   315     if show_stats:
   310         stats = ((len(get), _("updated")),
   316         stats = ((len(get), _("updated")),
   311                  (len(merge) - len(unresolved), _("merged")),
   317                  (len(merge) - len(unresolved), _("merged")),
   312                  (len(remove), _("removed")),
   318                  (len(remove), _("removed")),