mercurial/merge.py
changeset 2813 56f99f5aab34
parent 2812 3aeab7bb5adc
child 2814 0f787997e3c2
equal deleted inserted replaced
2812:3aeab7bb5adc 2813:56f99f5aab34
    54         wlock = repo.wlock()
    54         wlock = repo.wlock()
    55 
    55 
    56     pl = repo.dirstate.parents()
    56     pl = repo.dirstate.parents()
    57     if not force and pl[1] != nullid:
    57     if not force and pl[1] != nullid:
    58         raise util.Abort(_("outstanding uncommitted merges"))
    58         raise util.Abort(_("outstanding uncommitted merges"))
    59 
       
    60     err = False
       
    61 
    59 
    62     p1, p2 = pl[0], node
    60     p1, p2 = pl[0], node
    63     pa = repo.changelog.ancestor(p1, p2)
    61     pa = repo.changelog.ancestor(p1, p2)
    64     m1n = repo.changelog.read(p1)[0]
    62     m1n = repo.changelog.read(p1)[0]
    65     m2n = repo.changelog.read(p2)[0]
    63     m2n = repo.changelog.read(p2)[0]
   274                 repo.dirstate.update([f], 'n', st_mtime=-1)
   272                 repo.dirstate.update([f], 'n', st_mtime=-1)
   275             else:
   273             else:
   276                 repo.dirstate.update([f], 'n')
   274                 repo.dirstate.update([f], 'n')
   277 
   275 
   278     # merge the tricky bits
   276     # merge the tricky bits
   279     failedmerge = []
   277     unresolved = []
   280     files = merge.keys()
   278     files = merge.keys()
   281     files.sort()
   279     files.sort()
   282     for f in files:
   280     for f in files:
   283         repo.ui.status(_("merging %s\n") % f)
   281         repo.ui.status(_("merging %s\n") % f)
   284         my, other, flag = merge[f]
   282         my, other, flag = merge[f]
   285         ret = merge3(repo, f, my, other, xp1, xp2)
   283         ret = merge3(repo, f, my, other, xp1, xp2)
   286         if ret:
   284         if ret:
   287             err = True
   285             unresolved.append(f)
   288             failedmerge.append(f)
       
   289         util.set_exec(repo.wjoin(f), flag)
   286         util.set_exec(repo.wjoin(f), flag)
   290         if not partial:
   287         if not partial:
   291             if branchmerge:
   288             if branchmerge:
   292                 # We've done a branch merge, mark this file as merged
   289                 # We've done a branch merge, mark this file as merged
   293                 # so that we properly record the merger later
   290                 # so that we properly record the merger later
   320     if not partial:
   317     if not partial:
   321         repo.dirstate.setparents(p1, p2)
   318         repo.dirstate.setparents(p1, p2)
   322 
   319 
   323     if show_stats:
   320     if show_stats:
   324         stats = ((len(get), _("updated")),
   321         stats = ((len(get), _("updated")),
   325                  (len(merge) - len(failedmerge), _("merged")),
   322                  (len(merge) - len(unresolved), _("merged")),
   326                  (len(remove), _("removed")),
   323                  (len(remove), _("removed")),
   327                  (len(failedmerge), _("unresolved")))
   324                  (len(unresolved), _("unresolved")))
   328         note = ", ".join([_("%d files %s") % s for s in stats])
   325         note = ", ".join([_("%d files %s") % s for s in stats])
   329         repo.ui.status("%s\n" % note)
   326         repo.ui.status("%s\n" % note)
   330     if not partial:
   327     if not partial:
   331         if branchmerge:
   328         if branchmerge:
   332             if failedmerge:
   329             if unresolved:
   333                 repo.ui.status(_("There are unresolved merges,"
   330                 repo.ui.status(_("There are unresolved merges,"
   334                                 " you can redo the full merge using:\n"
   331                                 " you can redo the full merge using:\n"
   335                                 "  hg update -C %s\n"
   332                                 "  hg update -C %s\n"
   336                                 "  hg merge %s\n"
   333                                 "  hg merge %s\n"
   337                                 % (repo.changelog.rev(p1),
   334                                 % (repo.changelog.rev(p1),
   338                                     repo.changelog.rev(p2))))
   335                                     repo.changelog.rev(p2))))
   339             elif remind:
   336             elif remind:
   340                 repo.ui.status(_("(branch merge, don't forget to commit)\n"))
   337                 repo.ui.status(_("(branch merge, don't forget to commit)\n"))
   341         elif failedmerge:
   338         elif unresolved:
   342             repo.ui.status(_("There are unresolved merges with"
   339             repo.ui.status(_("There are unresolved merges with"
   343                              " locally modified files.\n"))
   340                              " locally modified files.\n"))
   344 
   341 
   345     repo.hook('update', parent1=xp1, parent2=xxp2, error=int(err))
   342     repo.hook('update', parent1=xp1, parent2=xxp2, error=len(unresolved))
   346     return err
   343     return len(unresolved)
   347 
   344