mercurial/commands.py
changeset 14319 b33f3e35efb0
parent 14318 1f46be4689ed
child 14321 003d63bb4fa5
equal deleted inserted replaced
14318:1f46be4689ed 14319:b33f3e35efb0
   259         funcmap[-1] = lambda x: "%s:%s" % (lastfunc(x), x[1])
   259         funcmap[-1] = lambda x: "%s:%s" % (lastfunc(x), x[1])
   260 
   260 
   261     def bad(x, y):
   261     def bad(x, y):
   262         raise util.Abort("%s: %s" % (x, y))
   262         raise util.Abort("%s: %s" % (x, y))
   263 
   263 
   264     ctx = cmdutil.revsingle(repo, opts.get('rev'))
   264     ctx = scmutil.revsingle(repo, opts.get('rev'))
   265     m = cmdutil.match(repo, pats, opts)
   265     m = cmdutil.match(repo, pats, opts)
   266     m.bad = bad
   266     m.bad = bad
   267     follow = not opts.get('no_follow')
   267     follow = not opts.get('no_follow')
   268     for abs in ctx.walk(m):
   268     for abs in ctx.walk(m):
   269         fctx = ctx[abs]
   269         fctx = ctx[abs]
   320     removed.
   320     removed.
   321 
   321 
   322     Returns 0 on success.
   322     Returns 0 on success.
   323     '''
   323     '''
   324 
   324 
   325     ctx = cmdutil.revsingle(repo, opts.get('rev'))
   325     ctx = scmutil.revsingle(repo, opts.get('rev'))
   326     if not ctx:
   326     if not ctx:
   327         raise util.Abort(_('no working directory: please specify a revision'))
   327         raise util.Abort(_('no working directory: please specify a revision'))
   328     node = ctx.node()
   328     node = ctx.node()
   329     dest = cmdutil.makefilename(repo, dest, node)
   329     dest = cmdutil.makefilename(repo, dest, node)
   330     if os.path.realpath(dest) == repo.root:
   330     if os.path.realpath(dest) == repo.root:
   388     date = opts.get('date')
   388     date = opts.get('date')
   389     if date:
   389     if date:
   390         opts['date'] = util.parsedate(date)
   390         opts['date'] = util.parsedate(date)
   391 
   391 
   392     cmdutil.bailifchanged(repo)
   392     cmdutil.bailifchanged(repo)
   393     node = cmdutil.revsingle(repo, rev).node()
   393     node = scmutil.revsingle(repo, rev).node()
   394 
   394 
   395     op1, op2 = repo.dirstate.parents()
   395     op1, op2 = repo.dirstate.parents()
   396     a = repo.changelog.ancestor(op1, node)
   396     a = repo.changelog.ancestor(op1, node)
   397     if a != node:
   397     if a != node:
   398         raise util.Abort(_('cannot backout change on a different branch'))
   398         raise util.Abort(_('cannot backout change on a different branch'))
   571                     raise util.Abort(_("failed to execute %s") % command)
   571                     raise util.Abort(_("failed to execute %s") % command)
   572                 elif status < 0:
   572                 elif status < 0:
   573                     raise util.Abort(_("%s killed") % command)
   573                     raise util.Abort(_("%s killed") % command)
   574                 else:
   574                 else:
   575                     transition = "bad"
   575                     transition = "bad"
   576                 ctx = cmdutil.revsingle(repo, rev)
   576                 ctx = scmutil.revsingle(repo, rev)
   577                 rev = None # clear for future iterations
   577                 rev = None # clear for future iterations
   578                 state[transition].append(ctx.node())
   578                 state[transition].append(ctx.node())
   579                 ui.status(_('Changeset %d:%s: %s\n') % (ctx, ctx, transition))
   579                 ui.status(_('Changeset %d:%s: %s\n') % (ctx, ctx, transition))
   580                 check_state(state, interactive=False)
   580                 check_state(state, interactive=False)
   581                 # bisect
   581                 # bisect
   589         return
   589         return
   590 
   590 
   591     # update state
   591     # update state
   592 
   592 
   593     if rev:
   593     if rev:
   594         nodes = [repo.lookup(i) for i in cmdutil.revrange(repo, [rev])]
   594         nodes = [repo.lookup(i) for i in scmutil.revrange(repo, [rev])]
   595     else:
   595     else:
   596         nodes = [repo.lookup('.')]
   596         nodes = [repo.lookup('.')]
   597 
   597 
   598     if good or bad or skip:
   598     if good or bad or skip:
   599         if good:
   599         if good:
   874 
   874 
   875     Returns 0 on success, 1 if no changes found.
   875     Returns 0 on success, 1 if no changes found.
   876     """
   876     """
   877     revs = None
   877     revs = None
   878     if 'rev' in opts:
   878     if 'rev' in opts:
   879         revs = cmdutil.revrange(repo, opts['rev'])
   879         revs = scmutil.revrange(repo, opts['rev'])
   880 
   880 
   881     if opts.get('all'):
   881     if opts.get('all'):
   882         base = ['null']
   882         base = ['null']
   883     else:
   883     else:
   884         base = cmdutil.revrange(repo, opts.get('base'))
   884         base = scmutil.revrange(repo, opts.get('base'))
   885     if base:
   885     if base:
   886         if dest:
   886         if dest:
   887             raise util.Abort(_("--base is incompatible with specifying "
   887             raise util.Abort(_("--base is incompatible with specifying "
   888                                "a destination"))
   888                                "a destination"))
   889         common = [repo.lookup(rev) for rev in base]
   889         common = [repo.lookup(rev) for rev in base]
   933     :``%d``: dirname of file being printed, or '.' if in repository root
   933     :``%d``: dirname of file being printed, or '.' if in repository root
   934     :``%p``: root-relative path name of file being printed
   934     :``%p``: root-relative path name of file being printed
   935 
   935 
   936     Returns 0 on success.
   936     Returns 0 on success.
   937     """
   937     """
   938     ctx = cmdutil.revsingle(repo, opts.get('rev'))
   938     ctx = scmutil.revsingle(repo, opts.get('rev'))
   939     err = 1
   939     err = 1
   940     m = cmdutil.match(repo, (file1,) + pats, opts)
   940     m = cmdutil.match(repo, (file1,) + pats, opts)
   941     for abs in ctx.walk(m):
   941     for abs in ctx.walk(m):
   942         fp = cmdutil.makefileobj(repo, opts.get('output'), ctx.node(),
   942         fp = cmdutil.makefileobj(repo, opts.get('output'), ctx.node(),
   943                                  pathname=abs)
   943                                  pathname=abs)
  1829 @command('debugrebuildstate',
  1829 @command('debugrebuildstate',
  1830     [('r', 'rev', '', _('revision to rebuild to'), _('REV'))],
  1830     [('r', 'rev', '', _('revision to rebuild to'), _('REV'))],
  1831     _('[-r REV] [REV]'))
  1831     _('[-r REV] [REV]'))
  1832 def debugrebuildstate(ui, repo, rev="tip"):
  1832 def debugrebuildstate(ui, repo, rev="tip"):
  1833     """rebuild the dirstate as it would look like for the given revision"""
  1833     """rebuild the dirstate as it would look like for the given revision"""
  1834     ctx = cmdutil.revsingle(repo, rev)
  1834     ctx = scmutil.revsingle(repo, rev)
  1835     wlock = repo.wlock()
  1835     wlock = repo.wlock()
  1836     try:
  1836     try:
  1837         repo.dirstate.rebuild(ctx.node(), ctx.manifest())
  1837         repo.dirstate.rebuild(ctx.node(), ctx.manifest())
  1838     finally:
  1838     finally:
  1839         wlock.release()
  1839         wlock.release()
  1842     [('r', 'rev', '', _('revision to debug'), _('REV'))],
  1842     [('r', 'rev', '', _('revision to debug'), _('REV'))],
  1843     _('[-r REV] FILE'))
  1843     _('[-r REV] FILE'))
  1844 def debugrename(ui, repo, file1, *pats, **opts):
  1844 def debugrename(ui, repo, file1, *pats, **opts):
  1845     """dump rename information"""
  1845     """dump rename information"""
  1846 
  1846 
  1847     ctx = cmdutil.revsingle(repo, opts.get('rev'))
  1847     ctx = scmutil.revsingle(repo, opts.get('rev'))
  1848     m = cmdutil.match(repo, (file1,) + pats, opts)
  1848     m = cmdutil.match(repo, (file1,) + pats, opts)
  1849     for abs in ctx.walk(m):
  1849     for abs in ctx.walk(m):
  1850         fctx = ctx[abs]
  1850         fctx = ctx[abs]
  1851         o = fctx.filelog().renamed(fctx.filenode())
  1851         o = fctx.filelog().renamed(fctx.filenode())
  1852         rel = m.rel(abs)
  1852         rel = m.rel(abs)
  2016     be used with care.
  2016     be used with care.
  2017 
  2017 
  2018     Returns 0 on success.
  2018     Returns 0 on success.
  2019     """
  2019     """
  2020 
  2020 
  2021     r1 = cmdutil.revsingle(repo, rev1).node()
  2021     r1 = scmutil.revsingle(repo, rev1).node()
  2022     r2 = cmdutil.revsingle(repo, rev2, 'null').node()
  2022     r2 = scmutil.revsingle(repo, rev2, 'null').node()
  2023 
  2023 
  2024     wlock = repo.wlock()
  2024     wlock = repo.wlock()
  2025     try:
  2025     try:
  2026         repo.dirstate.setparents(r1, r2)
  2026         repo.dirstate.setparents(r1, r2)
  2027     finally:
  2027     finally:
  2062 @command('debugsub',
  2062 @command('debugsub',
  2063     [('r', 'rev', '',
  2063     [('r', 'rev', '',
  2064      _('revision to check'), _('REV'))],
  2064      _('revision to check'), _('REV'))],
  2065     _('[-r REV] [REV]'))
  2065     _('[-r REV] [REV]'))
  2066 def debugsub(ui, repo, rev=None):
  2066 def debugsub(ui, repo, rev=None):
  2067     ctx = cmdutil.revsingle(repo, rev, None)
  2067     ctx = scmutil.revsingle(repo, rev, None)
  2068     for k, v in sorted(ctx.substate.items()):
  2068     for k, v in sorted(ctx.substate.items()):
  2069         ui.write('path %s\n' % k)
  2069         ui.write('path %s\n' % k)
  2070         ui.write(' source   %s\n' % v[0])
  2070         ui.write(' source   %s\n' % v[0])
  2071         ui.write(' revision %s\n' % v[1])
  2071         ui.write(' revision %s\n' % v[1])
  2072 
  2072 
  2148 
  2148 
  2149     if revs and change:
  2149     if revs and change:
  2150         msg = _('cannot specify --rev and --change at the same time')
  2150         msg = _('cannot specify --rev and --change at the same time')
  2151         raise util.Abort(msg)
  2151         raise util.Abort(msg)
  2152     elif change:
  2152     elif change:
  2153         node2 = cmdutil.revsingle(repo, change, None).node()
  2153         node2 = scmutil.revsingle(repo, change, None).node()
  2154         node1 = repo[node2].p1().node()
  2154         node1 = repo[node2].p1().node()
  2155     else:
  2155     else:
  2156         node1, node2 = cmdutil.revpair(repo, revs)
  2156         node1, node2 = scmutil.revpair(repo, revs)
  2157 
  2157 
  2158     if reverse:
  2158     if reverse:
  2159         node1, node2 = node2, node1
  2159         node1, node2 = node2, node1
  2160 
  2160 
  2161     diffopts = patch.diffopts(ui, opts)
  2161     diffopts = patch.diffopts(ui, opts)
  2209     Returns 0 on success.
  2209     Returns 0 on success.
  2210     """
  2210     """
  2211     changesets += tuple(opts.get('rev', []))
  2211     changesets += tuple(opts.get('rev', []))
  2212     if not changesets:
  2212     if not changesets:
  2213         raise util.Abort(_("export requires at least one changeset"))
  2213         raise util.Abort(_("export requires at least one changeset"))
  2214     revs = cmdutil.revrange(repo, changesets)
  2214     revs = scmutil.revrange(repo, changesets)
  2215     if len(revs) > 1:
  2215     if len(revs) > 1:
  2216         ui.note(_('exporting patches:\n'))
  2216         ui.note(_('exporting patches:\n'))
  2217     else:
  2217     else:
  2218         ui.note(_('exporting patch:\n'))
  2218         ui.note(_('exporting patch:\n'))
  2219     cmdutil.export(repo, revs, template=opts.get('output'),
  2219     cmdutil.export(repo, revs, template=opts.get('output'),
  2499     Returns 0 if matching heads are found, 1 if not.
  2499     Returns 0 if matching heads are found, 1 if not.
  2500     """
  2500     """
  2501 
  2501 
  2502     start = None
  2502     start = None
  2503     if 'rev' in opts:
  2503     if 'rev' in opts:
  2504         start = cmdutil.revsingle(repo, opts['rev'], None).node()
  2504         start = scmutil.revsingle(repo, opts['rev'], None).node()
  2505 
  2505 
  2506     if opts.get('topo'):
  2506     if opts.get('topo'):
  2507         heads = [repo[h] for h in repo.heads(start)]
  2507         heads = [repo[h] for h in repo.heads(start)]
  2508     else:
  2508     else:
  2509         heads = []
  2509         heads = []
  2942                   ('+'.join([hexfunc(p.node()) for p in parents]), changed)]
  2942                   ('+'.join([hexfunc(p.node()) for p in parents]), changed)]
  2943             if num:
  2943             if num:
  2944                 output.append("%s%s" %
  2944                 output.append("%s%s" %
  2945                   ('+'.join([str(p.rev()) for p in parents]), changed))
  2945                   ('+'.join([str(p.rev()) for p in parents]), changed))
  2946         else:
  2946         else:
  2947             ctx = cmdutil.revsingle(repo, rev)
  2947             ctx = scmutil.revsingle(repo, rev)
  2948             if default or id:
  2948             if default or id:
  2949                 output = [hexfunc(ctx.node())]
  2949                 output = [hexfunc(ctx.node())]
  2950             if num:
  2950             if num:
  2951                 output.append(str(ctx.rev()))
  2951                 output.append(str(ctx.rev()))
  2952 
  2952 
  3233     contain whitespace as multiple filenames.
  3233     contain whitespace as multiple filenames.
  3234 
  3234 
  3235     Returns 0 if a match is found, 1 otherwise.
  3235     Returns 0 if a match is found, 1 otherwise.
  3236     """
  3236     """
  3237     end = opts.get('print0') and '\0' or '\n'
  3237     end = opts.get('print0') and '\0' or '\n'
  3238     rev = cmdutil.revsingle(repo, opts.get('rev'), None).node()
  3238     rev = scmutil.revsingle(repo, opts.get('rev'), None).node()
  3239 
  3239 
  3240     ret = 1
  3240     ret = 1
  3241     m = cmdutil.match(repo, pats, opts, default='relglob')
  3241     m = cmdutil.match(repo, pats, opts, default='relglob')
  3242     m.bad = lambda x, y: False
  3242     m.bad = lambda x, y: False
  3243     for abs in repo[rev].walk(m):
  3243     for abs in repo[rev].walk(m):
  3310     limit = cmdutil.loglimit(opts)
  3310     limit = cmdutil.loglimit(opts)
  3311     count = 0
  3311     count = 0
  3312 
  3312 
  3313     endrev = None
  3313     endrev = None
  3314     if opts.get('copies') and opts.get('rev'):
  3314     if opts.get('copies') and opts.get('rev'):
  3315         endrev = max(cmdutil.revrange(repo, opts.get('rev'))) + 1
  3315         endrev = max(scmutil.revrange(repo, opts.get('rev'))) + 1
  3316 
  3316 
  3317     df = False
  3317     df = False
  3318     if opts["date"]:
  3318     if opts["date"]:
  3319         df = util.matchdate(opts["date"])
  3319         df = util.matchdate(opts["date"])
  3320 
  3320 
  3393 
  3393 
  3394     if not node:
  3394     if not node:
  3395         node = rev
  3395         node = rev
  3396 
  3396 
  3397     decor = {'l':'644 @ ', 'x':'755 * ', '':'644   '}
  3397     decor = {'l':'644 @ ', 'x':'755 * ', '':'644   '}
  3398     ctx = cmdutil.revsingle(repo, node)
  3398     ctx = scmutil.revsingle(repo, node)
  3399     for f in ctx:
  3399     for f in ctx:
  3400         if ui.debugflag:
  3400         if ui.debugflag:
  3401             ui.write("%40s " % hex(ctx.manifest()[f]))
  3401             ui.write("%40s " % hex(ctx.manifest()[f]))
  3402         if ui.verbose:
  3402         if ui.verbose:
  3403             ui.write(decor[ctx.flags(f)])
  3403             ui.write(decor[ctx.flags(f)])
  3469             raise util.Abort(_('working directory not at a head revision'),
  3469             raise util.Abort(_('working directory not at a head revision'),
  3470                              hint=_("use 'hg update' or merge with an "
  3470                              hint=_("use 'hg update' or merge with an "
  3471                                     "explicit revision"))
  3471                                     "explicit revision"))
  3472         node = parent == bheads[0] and bheads[-1] or bheads[0]
  3472         node = parent == bheads[0] and bheads[-1] or bheads[0]
  3473     else:
  3473     else:
  3474         node = cmdutil.revsingle(repo, node).node()
  3474         node = scmutil.revsingle(repo, node).node()
  3475 
  3475 
  3476     if opts.get('preview'):
  3476     if opts.get('preview'):
  3477         # find nodes that are ancestors of p2 but not of p1
  3477         # find nodes that are ancestors of p2 but not of p1
  3478         p1 = repo.lookup('.')
  3478         p1 = repo.lookup('.')
  3479         p2 = repo.lookup(node)
  3479         p2 = repo.lookup(node)
  3541     argument to --rev if given) is printed.
  3541     argument to --rev if given) is printed.
  3542 
  3542 
  3543     Returns 0 on success.
  3543     Returns 0 on success.
  3544     """
  3544     """
  3545 
  3545 
  3546     ctx = cmdutil.revsingle(repo, opts.get('rev'), None)
  3546     ctx = scmutil.revsingle(repo, opts.get('rev'), None)
  3547 
  3547 
  3548     if file_:
  3548     if file_:
  3549         m = cmdutil.match(repo, (file_,), opts)
  3549         m = cmdutil.match(repo, (file_,), opts)
  3550         if m.anypats() or len(m.files()) != 1:
  3550         if m.anypats() or len(m.files()) != 1:
  3551             raise util.Abort(_('can only specify an explicit filename'))
  3551             raise util.Abort(_('can only specify an explicit filename'))
  4072 
  4072 
  4073     if not pats and not opts.get('all'):
  4073     if not pats and not opts.get('all'):
  4074         raise util.Abort(_('no files or directories specified; '
  4074         raise util.Abort(_('no files or directories specified; '
  4075                            'use --all to revert the whole repo'))
  4075                            'use --all to revert the whole repo'))
  4076 
  4076 
  4077     ctx = cmdutil.revsingle(repo, opts.get('rev'))
  4077     ctx = scmutil.revsingle(repo, opts.get('rev'))
  4078     node = ctx.node()
  4078     node = ctx.node()
  4079     mf = ctx.manifest()
  4079     mf = ctx.manifest()
  4080     if node == parent:
  4080     if node == parent:
  4081         pmf = mf
  4081         pmf = mf
  4082     else:
  4082     else:
  4517         raise util.Abort(msg)
  4517         raise util.Abort(msg)
  4518     elif change:
  4518     elif change:
  4519         node2 = repo.lookup(change)
  4519         node2 = repo.lookup(change)
  4520         node1 = repo[node2].p1().node()
  4520         node1 = repo[node2].p1().node()
  4521     else:
  4521     else:
  4522         node1, node2 = cmdutil.revpair(repo, revs)
  4522         node1, node2 = scmutil.revpair(repo, revs)
  4523 
  4523 
  4524     cwd = (pats and repo.getcwd()) or ''
  4524     cwd = (pats and repo.getcwd()) or ''
  4525     end = opts.get('print0') and '\0' or '\n'
  4525     end = opts.get('print0') and '\0' or '\n'
  4526     copy = {}
  4526     copy = {}
  4527     states = 'modified added removed deleted unknown ignored clean'.split()
  4527     states = 'modified added removed deleted unknown ignored clean'.split()
  4808         if p2 != nullid:
  4808         if p2 != nullid:
  4809             raise util.Abort(_('uncommitted merge'))
  4809             raise util.Abort(_('uncommitted merge'))
  4810         bheads = repo.branchheads()
  4810         bheads = repo.branchheads()
  4811         if not opts.get('force') and bheads and p1 not in bheads:
  4811         if not opts.get('force') and bheads and p1 not in bheads:
  4812             raise util.Abort(_('not at a branch head (use -f to force)'))
  4812             raise util.Abort(_('not at a branch head (use -f to force)'))
  4813     r = cmdutil.revsingle(repo, rev_).node()
  4813     r = scmutil.revsingle(repo, rev_).node()
  4814 
  4814 
  4815     if not message:
  4815     if not message:
  4816         # we don't translate commit messages
  4816         # we don't translate commit messages
  4817         message = ('Added tag %s for changeset %s' %
  4817         message = ('Added tag %s for changeset %s' %
  4818                    (', '.join(names), short(r)))
  4818                    (', '.join(names), short(r)))
  4959     if rev is None or rev == '':
  4959     if rev is None or rev == '':
  4960         rev = node
  4960         rev = node
  4961 
  4961 
  4962     # if we defined a bookmark, we have to remember the original bookmark name
  4962     # if we defined a bookmark, we have to remember the original bookmark name
  4963     brev = rev
  4963     brev = rev
  4964     rev = cmdutil.revsingle(repo, rev, rev).rev()
  4964     rev = scmutil.revsingle(repo, rev, rev).rev()
  4965 
  4965 
  4966     if check and clean:
  4966     if check and clean:
  4967         raise util.Abort(_("cannot specify both -c/--check and -C/--clean"))
  4967         raise util.Abort(_("cannot specify both -c/--check and -C/--clean"))
  4968 
  4968 
  4969     if check:
  4969     if check: