mercurial/merge.py
changeset 3316 39fd6e82ea38
parent 3315 38be819a1225
child 3371 8c36b33a27c7
equal deleted inserted replaced
3315:38be819a1225 3316:39fd6e82ea38
   289         elif m == "m": # merge
   289         elif m == "m": # merge
   290             f2, fd, flag, move = a[2:]
   290             f2, fd, flag, move = a[2:]
   291             if filemerge(repo, f, f2, wctx, mctx):
   291             if filemerge(repo, f, f2, wctx, mctx):
   292                 unresolved += 1
   292                 unresolved += 1
   293             else:
   293             else:
       
   294                 merged += 1
   294                 if f != fd:
   295                 if f != fd:
   295                     repo.ui.debug(_("copying %s to %s\n") % (f, fd))
   296                     repo.ui.debug(_("copying %s to %s\n") % (f, fd))
   296                     repo.wwrite(fd, repo.wread(f))
   297                     repo.wwrite(fd, repo.wread(f))
   297                     if move:
   298                     if move:
   298                         repo.ui.debug(_("removing %s\n") % f)
   299                         repo.ui.debug(_("removing %s\n") % f)
   299                         os.unlink(repo.wjoin(f))
   300                         os.unlink(repo.wjoin(f))
   300 
       
   301             util.set_exec(repo.wjoin(fd), flag)
   301             util.set_exec(repo.wjoin(fd), flag)
   302             merged += 1
       
   303         elif m == "g": # get
   302         elif m == "g": # get
   304             flag = a[2]
   303             flag = a[2]
   305             repo.ui.note(_("getting %s\n") % f)
   304             repo.ui.note(_("getting %s\n") % f)
   306             t = mctx.filectx(f).data()
   305             t = mctx.filectx(f).data()
   307             repo.wwrite(f, t)
   306             repo.wwrite(f, t)
   350                 if f != fd:
   349                 if f != fd:
   351                     repo.dirstate.copy(f, fd)
   350                     repo.dirstate.copy(f, fd)
   352                 else:
   351                 else:
   353                     repo.dirstate.copy(f2, fd)
   352                     repo.dirstate.copy(f2, fd)
   354 
   353 
   355 def update(repo, node, branchmerge=False, force=False, partial=None,
   354 def update(repo, node, branchmerge, force, partial, wlock):
   356            wlock=None, show_stats=True, remind=True):
       
   357     """
   355     """
   358     Perform a merge between the working directory and the given node
   356     Perform a merge between the working directory and the given node
   359 
   357 
   360     branchmerge = whether to merge between branches
   358     branchmerge = whether to merge between branches
   361     force = whether to force branch merging or file overwriting
   359     force = whether to force branch merging or file overwriting
   362     partial = a function to filter file lists (dirstate not updated)
   360     partial = a function to filter file lists (dirstate not updated)
   363     wlock = working dir lock, if already held
   361     wlock = working dir lock, if already held
   364     show_stats = whether to report merge statistics
       
   365     remind = whether to remind about merge
       
   366     """
   362     """
   367 
   363 
   368     if not wlock:
   364     if not wlock:
   369         wlock = repo.wlock()
   365         wlock = repo.wlock()
   370 
   366 
   402     if not branchmerge: # just jump to the new rev
   398     if not branchmerge: # just jump to the new rev
   403         fp1, fp2, xp1, xp2 = fp2, nullid, xp2, ''
   399         fp1, fp2, xp1, xp2 = fp2, nullid, xp2, ''
   404     if not partial:
   400     if not partial:
   405         repo.hook('preupdate', throw=True, parent1=xp1, parent2=xp2)
   401         repo.hook('preupdate', throw=True, parent1=xp1, parent2=xp2)
   406 
   402 
   407     updated, merged, removed, unresolved = applyupdates(repo, action, wc, p2)
   403     stats = applyupdates(repo, action, wc, p2)
   408 
   404 
   409     if show_stats:
       
   410         stats = ((updated, _("updated")),
       
   411                  (merged - unresolved, _("merged")),
       
   412                  (removed, _("removed")),
       
   413                  (unresolved, _("unresolved")))
       
   414         note = ", ".join([_("%d files %s") % s for s in stats])
       
   415         repo.ui.status("%s\n" % note)
       
   416     if not partial:
   405     if not partial:
   417         recordupdates(repo, action, branchmerge, p2)
   406         recordupdates(repo, action, branchmerge, p2)
   418         repo.dirstate.setparents(fp1, fp2)
   407         repo.dirstate.setparents(fp1, fp2)
   419         repo.hook('update', parent1=xp1, parent2=xp2, error=unresolved)
   408         repo.hook('update', parent1=xp1, parent2=xp2, error=stats[3])
   420 
   409 
   421         if branchmerge:
   410     return stats
   422             if unresolved:
   411 
   423                 repo.ui.status(_("There are unresolved merges,"
       
   424                                 " you can redo the full merge using:\n"
       
   425                                 "  hg update -C %s\n"
       
   426                                 "  hg merge %s\n"
       
   427                                 % (p1.rev(), p2.rev())))
       
   428             elif remind:
       
   429                 repo.ui.status(_("(branch merge, don't forget to commit)\n"))
       
   430         elif unresolved:
       
   431             repo.ui.status(_("There are unresolved merges with"
       
   432                              " locally modified files.\n"))
       
   433 
       
   434     return unresolved
       
   435