mercurial/commands.py
changeset 2820 0bf22c109cc3
parent 2803 987c31e2a08c
child 2822 30f59f4a327e
equal deleted inserted replaced
2819:90a4181ca9ed 2820:0bf22c109cc3
   974         parent = p
   974         parent = p
   975     else:
   975     else:
   976         if opts['parent']:
   976         if opts['parent']:
   977             raise util.Abort(_('cannot use --parent on non-merge changeset'))
   977             raise util.Abort(_('cannot use --parent on non-merge changeset'))
   978         parent = p1
   978         parent = p1
   979     hg.update(repo, node, force=True, show_stats=False)
   979     hg.update(repo, node, force=True, show_stats=False) # backout
   980     revert_opts = opts.copy()
   980     revert_opts = opts.copy()
   981     revert_opts['rev'] = hex(parent)
   981     revert_opts['rev'] = hex(parent)
   982     revert(ui, repo, **revert_opts)
   982     revert(ui, repo, **revert_opts)
   983     commit_opts = opts.copy()
   983     commit_opts = opts.copy()
   984     commit_opts['addremove'] = False
   984     commit_opts['addremove'] = False
   991     ui.status(_('changeset %s backs out changeset %s\n') %
   991     ui.status(_('changeset %s backs out changeset %s\n') %
   992               (nice(repo.changelog.tip()), nice(node)))
   992               (nice(repo.changelog.tip()), nice(node)))
   993     if op1 != node:
   993     if op1 != node:
   994         if opts['merge']:
   994         if opts['merge']:
   995             ui.status(_('merging with changeset %s\n') % nice(op1))
   995             ui.status(_('merging with changeset %s\n') % nice(op1))
   996             doupdate(ui, repo, hex(op1), merge=True)
   996             n = _lookup(repo, hex(op1))
       
   997             hg.update(repo, n, allow=True) # merge
   997         else:
   998         else:
   998             ui.status(_('the backout changeset is a new head - '
   999             ui.status(_('the backout changeset is a new head - '
   999                         'do not forget to merge\n'))
  1000                         'do not forget to merge\n'))
  1000             ui.status(_('(use "backout --merge" '
  1001             ui.status(_('(use "backout --merge" '
  1001                         'if you want to auto-merge)\n'))
  1002                         'if you want to auto-merge)\n'))
  2150     files.sort()
  2151     files.sort()
  2151 
  2152 
  2152     for f in files:
  2153     for f in files:
  2153         ui.write("%40s %3s %s\n" % (hex(m[f]), mf[f] and "755" or "644", f))
  2154         ui.write("%40s %3s %s\n" % (hex(m[f]), mf[f] and "755" or "644", f))
  2154 
  2155 
  2155 def merge(ui, repo, node=None, **opts):
  2156 def merge(ui, repo, node=None, force=None, branch=None):
  2156     """Merge working directory with another revision
  2157     """Merge working directory with another revision
  2157 
  2158 
  2158     Merge the contents of the current working directory and the
  2159     Merge the contents of the current working directory and the
  2159     requested revision. Files that changed between either parent are
  2160     requested revision. Files that changed between either parent are
  2160     marked as changed for the next commit and a commit must be
  2161     marked as changed for the next commit and a commit must be
  2161     performed before any further updates are allowed.
  2162     performed before any further updates are allowed.
  2162     """
  2163     """
  2163     return doupdate(ui, repo, node=node, merge=True, **opts)
  2164 
       
  2165     node = _lookup(repo, node, branch)
       
  2166     hg.update(repo, node, allow=True, forcemerge=force) # merge
  2164 
  2167 
  2165 def outgoing(ui, repo, dest=None, **opts):
  2168 def outgoing(ui, repo, dest=None, **opts):
  2166     """show changesets not found in destination
  2169     """show changesets not found in destination
  2167 
  2170 
  2168     Show changesets not found in the specified destination repository or
  2171     Show changesets not found in the specified destination repository or
  2252 def postincoming(ui, repo, modheads, optupdate):
  2255 def postincoming(ui, repo, modheads, optupdate):
  2253     if modheads == 0:
  2256     if modheads == 0:
  2254         return
  2257         return
  2255     if optupdate:
  2258     if optupdate:
  2256         if modheads == 1:
  2259         if modheads == 1:
  2257             return doupdate(ui, repo)
  2260             return hg.update(repo, repo.changelog.tip()) # update
  2258         else:
  2261         else:
  2259             ui.status(_("not updating, since new heads added\n"))
  2262             ui.status(_("not updating, since new heads added\n"))
  2260     if modheads > 1:
  2263     if modheads > 1:
  2261         ui.status(_("(run 'hg heads' to see heads, 'hg merge' to merge)\n"))
  2264         ui.status(_("(run 'hg heads' to see heads, 'hg merge' to merge)\n"))
  2262     else:
  2265     else:
  2602                     handle(remove, False)
  2605                     handle(remove, False)
  2603 
  2606 
  2604     if not opts.get('dry_run'):
  2607     if not opts.get('dry_run'):
  2605         repo.dirstate.forget(forget[0])
  2608         repo.dirstate.forget(forget[0])
  2606         r = hg.update(repo, node, False, True, update.has_key, False,
  2609         r = hg.update(repo, node, False, True, update.has_key, False,
  2607                       wlock=wlock, show_stats=False)
  2610                       wlock=wlock, show_stats=False) # revert
  2608         repo.dirstate.update(add[0], 'a')
  2611         repo.dirstate.update(add[0], 'a')
  2609         repo.dirstate.update(undelete[0], 'n')
  2612         repo.dirstate.update(undelete[0], 'n')
  2610         repo.dirstate.update(remove[0], 'r')
  2613         repo.dirstate.update(remove[0], 'r')
  2611         return r
  2614         return r
  2612 
  2615 
  2903     merging or discarding local changes.
  2906     merging or discarding local changes.
  2904     """
  2907     """
  2905     if merge:
  2908     if merge:
  2906         ui.warn(_('(the -m/--merge option is deprecated; '
  2909         ui.warn(_('(the -m/--merge option is deprecated; '
  2907                   'use the merge command instead)\n'))
  2910                   'use the merge command instead)\n'))
  2908     return doupdate(ui, repo, node, merge, clean, force, branch)
  2911     node = _lookup(repo, node, branch)
  2909 
  2912     return hg.update(repo, node, allow=merge, force=clean, forcemerge=force)
  2910 def doupdate(ui, repo, node=None, merge=False, clean=False, force=None,
  2913 
  2911              branch=None):
  2914 def _lookup(repo, node, branch=None):
  2912     if branch:
  2915     if branch:
  2913         br = repo.branchlookup(branch=branch)
  2916         br = repo.branchlookup(branch=branch)
  2914         found = []
  2917         found = []
  2915         for x in br:
  2918         for x in br:
  2916             if branch in br[x]:
  2919             if branch in br[x]:
  2917                 found.append(x)
  2920                 found.append(x)
  2918         if len(found) > 1:
  2921         if len(found) > 1:
  2919             ui.warn(_("Found multiple heads for %s\n") % branch)
  2922             repo.ui.warn(_("Found multiple heads for %s\n") % branch)
  2920             for x in found:
  2923             for x in found:
  2921                 show_changeset(ui, repo, {}).show(changenode=x, brinfo=br)
  2924                 show_changeset(ui, repo, {}).show(changenode=x, brinfo=br)
  2922             return 1
  2925             raise util.Abort("")
  2923         if len(found) == 1:
  2926         if len(found) == 1:
  2924             node = found[0]
  2927             node = found[0]
  2925             ui.warn(_("Using head %s for branch %s\n") % (short(node), branch))
  2928             repo.ui.warn(_("Using head %s for branch %s\n")
       
  2929                          % (short(node), branch))
  2926         else:
  2930         else:
  2927             ui.warn(_("branch %s not found\n") % (branch))
  2931             raise util.Abort(_("branch %s not found\n") % (branch))
  2928             return 1
       
  2929     else:
  2932     else:
  2930         node = node and repo.lookup(node) or repo.changelog.tip()
  2933         node = node and repo.lookup(node) or repo.changelog.tip()
  2931     return hg.update(repo, node, allow=merge, force=clean, forcemerge=force)
  2934     return node
  2932 
  2935 
  2933 def verify(ui, repo):
  2936 def verify(ui, repo):
  2934     """verify the integrity of the repository
  2937     """verify the integrity of the repository
  2935 
  2938 
  2936     Verify the integrity of the current repository.
  2939     Verify the integrity of the current repository.