hgext/githelp.py
changeset 43076 2372284d9457
parent 42416 7752cd3a2f83
child 43077 687b865b95ad
equal deleted inserted replaced
43075:57875cf423c9 43076:2372284d9457
    27     fancyopts,
    27     fancyopts,
    28     pycompat,
    28     pycompat,
    29     registrar,
    29     registrar,
    30     scmutil,
    30     scmutil,
    31 )
    31 )
    32 from mercurial.utils import (
    32 from mercurial.utils import procutil
    33     procutil,
       
    34 )
       
    35 
    33 
    36 # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for
    34 # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for
    37 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should
    35 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should
    38 # be specifying the version(s) of Mercurial they are tested with, or
    36 # be specifying the version(s) of Mercurial they are tested with, or
    39 # leave the attribute unspecified.
    37 # leave the attribute unspecified.
    40 testedwith = 'ships-with-hg-core'
    38 testedwith = 'ships-with-hg-core'
    41 
    39 
    42 cmdtable = {}
    40 cmdtable = {}
    43 command = registrar.command(cmdtable)
    41 command = registrar.command(cmdtable)
       
    42 
    44 
    43 
    45 def convert(s):
    44 def convert(s):
    46     if s.startswith("origin/"):
    45     if s.startswith("origin/"):
    47         return s[7:]
    46         return s[7:]
    48     if 'HEAD' in s:
    47     if 'HEAD' in s:
    49         s = s.replace('HEAD', '.')
    48         s = s.replace('HEAD', '.')
    50     # HEAD~ in git is .~1 in mercurial
    49     # HEAD~ in git is .~1 in mercurial
    51     s = re.sub('~$', '~1', s)
    50     s = re.sub('~$', '~1', s)
    52     return s
    51     return s
    53 
    52 
    54 @command('githelp|git', [
    53 
    55     ], _('hg githelp'),
    54 @command(
    56     helpcategory=command.CATEGORY_HELP, helpbasic=True)
    55     'githelp|git',
       
    56     [],
       
    57     _('hg githelp'),
       
    58     helpcategory=command.CATEGORY_HELP,
       
    59     helpbasic=True,
       
    60 )
    57 def githelp(ui, repo, *args, **kwargs):
    61 def githelp(ui, repo, *args, **kwargs):
    58     '''suggests the Mercurial equivalent of the given git command
    62     '''suggests the Mercurial equivalent of the given git command
    59 
    63 
    60     Usage: hg githelp -- <git command>
    64     Usage: hg githelp -- <git command>
    61     '''
    65     '''
    62 
    66 
    63     if len(args) == 0 or (len(args) == 1 and args[0] =='git'):
    67     if len(args) == 0 or (len(args) == 1 and args[0] == 'git'):
    64         raise error.Abort(_('missing git command - '
    68         raise error.Abort(
    65                             'usage: hg githelp -- <git command>'))
    69             _('missing git command - ' 'usage: hg githelp -- <git command>')
       
    70         )
    66 
    71 
    67     if args[0] == 'git':
    72     if args[0] == 'git':
    68         args = args[1:]
    73         args = args[1:]
    69 
    74 
    70     cmd = args[0]
    75     cmd = args[0]
    71     if not cmd in gitcommands:
    76     if not cmd in gitcommands:
    72         raise error.Abort(_("error: unknown git command %s") % (cmd))
    77         raise error.Abort(_("error: unknown git command %s") % cmd)
    73 
    78 
    74     ui.pager('githelp')
    79     ui.pager('githelp')
    75     args = args[1:]
    80     args = args[1:]
    76     return gitcommands[cmd](ui, repo, *args, **kwargs)
    81     return gitcommands[cmd](ui, repo, *args, **kwargs)
       
    82 
    77 
    83 
    78 def parseoptions(ui, cmdoptions, args):
    84 def parseoptions(ui, cmdoptions, args):
    79     cmdoptions = list(cmdoptions)
    85     cmdoptions = list(cmdoptions)
    80     opts = {}
    86     opts = {}
    81     args = list(args)
    87     args = list(args)
    89             if (r'--' + ex.opt) in ex.msg:
    95             if (r'--' + ex.opt) in ex.msg:
    90                 flag = '--' + pycompat.bytestr(ex.opt)
    96                 flag = '--' + pycompat.bytestr(ex.opt)
    91             elif (r'-' + ex.opt) in ex.msg:
    97             elif (r'-' + ex.opt) in ex.msg:
    92                 flag = '-' + pycompat.bytestr(ex.opt)
    98                 flag = '-' + pycompat.bytestr(ex.opt)
    93             else:
    99             else:
    94                 raise error.Abort(_("unknown option %s") %
   100                 raise error.Abort(
    95                                   pycompat.bytestr(ex.opt))
   101                     _("unknown option %s") % pycompat.bytestr(ex.opt)
       
   102                 )
    96             try:
   103             try:
    97                 args.remove(flag)
   104                 args.remove(flag)
    98             except Exception:
   105             except Exception:
    99                 msg = _("unknown option '%s' packed with other options")
   106                 msg = _("unknown option '%s' packed with other options")
   100                 hint = _("please try passing the option as its own flag: -%s")
   107                 hint = _("please try passing the option as its own flag: -%s")
   101                 raise error.Abort(msg % pycompat.bytestr(ex.opt),
   108                 raise error.Abort(
   102                                   hint=hint % pycompat.bytestr(ex.opt))
   109                     msg % pycompat.bytestr(ex.opt),
       
   110                     hint=hint % pycompat.bytestr(ex.opt),
       
   111                 )
   103 
   112 
   104             ui.warn(_("ignoring unknown option %s\n") % flag)
   113             ui.warn(_("ignoring unknown option %s\n") % flag)
   105 
   114 
   106     args = list([convert(x) for x in args])
   115     args = list([convert(x) for x in args])
   107     opts = dict([(k, convert(v)) if isinstance(v, str) else (k, v)
   116     opts = dict(
   108                                  for k, v in opts.iteritems()])
   117         [
       
   118             (k, convert(v)) if isinstance(v, str) else (k, v)
       
   119             for k, v in opts.iteritems()
       
   120         ]
       
   121     )
   109 
   122 
   110     return args, opts
   123     return args, opts
       
   124 
   111 
   125 
   112 class Command(object):
   126 class Command(object):
   113     def __init__(self, name):
   127     def __init__(self, name):
   114         self.name = name
   128         self.name = name
   115         self.args = []
   129         self.args = []
   147         values.append(value)
   161         values.append(value)
   148 
   162 
   149     def __and__(self, other):
   163     def __and__(self, other):
   150         return AndCommand(self, other)
   164         return AndCommand(self, other)
   151 
   165 
       
   166 
   152 class AndCommand(object):
   167 class AndCommand(object):
   153     def __init__(self, left, right):
   168     def __init__(self, left, right):
   154         self.left = left
   169         self.left = left
   155         self.right = right
   170         self.right = right
   156 
   171 
   158         return "%s && %s" % (self.left, self.right)
   173         return "%s && %s" % (self.left, self.right)
   159 
   174 
   160     def __and__(self, other):
   175     def __and__(self, other):
   161         return AndCommand(self, other)
   176         return AndCommand(self, other)
   162 
   177 
       
   178 
   163 def add(ui, repo, *args, **kwargs):
   179 def add(ui, repo, *args, **kwargs):
   164     cmdoptions = [
   180     cmdoptions = [
   165         ('A', 'all', None, ''),
   181         ('A', 'all', None, ''),
   166         ('p', 'patch', None, ''),
   182         ('p', 'patch', None, ''),
   167     ]
   183     ]
   168     args, opts = parseoptions(ui, cmdoptions, args)
   184     args, opts = parseoptions(ui, cmdoptions, args)
   169 
   185 
   170     if (opts.get('patch')):
   186     if opts.get('patch'):
   171         ui.status(_("note: Mercurial will commit when complete, "
   187         ui.status(
   172                     "as there is no staging area in Mercurial\n\n"))
   188             _(
       
   189                 "note: Mercurial will commit when complete, "
       
   190                 "as there is no staging area in Mercurial\n\n"
       
   191             )
       
   192         )
   173         cmd = Command('commit --interactive')
   193         cmd = Command('commit --interactive')
   174     else:
   194     else:
   175         cmd = Command("add")
   195         cmd = Command("add")
   176 
   196 
   177         if not opts.get('all'):
   197         if not opts.get('all'):
   178             cmd.extend(args)
   198             cmd.extend(args)
   179         else:
   199         else:
   180             ui.status(_("note: use hg addremove to remove files that have "
   200             ui.status(
   181                         "been deleted\n\n"))
   201                 _(
   182 
   202                     "note: use hg addremove to remove files that have "
   183     ui.status((bytes(cmd)), "\n")
   203                     "been deleted\n\n"
       
   204                 )
       
   205             )
       
   206 
       
   207     ui.status((bytes(cmd)), "\n")
       
   208 
   184 
   209 
   185 def am(ui, repo, *args, **kwargs):
   210 def am(ui, repo, *args, **kwargs):
   186     cmdoptions=[
   211     cmdoptions = []
   187     ]
       
   188     args, opts = parseoptions(ui, cmdoptions, args)
   212     args, opts = parseoptions(ui, cmdoptions, args)
   189     cmd = Command('import')
   213     cmd = Command('import')
   190     ui.status(bytes(cmd), "\n")
   214     ui.status(bytes(cmd), "\n")
   191 
   215 
       
   216 
   192 def apply(ui, repo, *args, **kwargs):
   217 def apply(ui, repo, *args, **kwargs):
   193     cmdoptions = [
   218     cmdoptions = [
   194         ('p', 'p', int, ''),
   219         ('p', 'p', int, ''),
   195         ('', 'directory', '', ''),
   220         ('', 'directory', '', ''),
   196     ]
   221     ]
   197     args, opts = parseoptions(ui, cmdoptions, args)
   222     args, opts = parseoptions(ui, cmdoptions, args)
   198 
   223 
   199     cmd = Command('import --no-commit')
   224     cmd = Command('import --no-commit')
   200     if (opts.get('p')):
   225     if opts.get('p'):
   201         cmd['-p'] = opts.get('p')
   226         cmd['-p'] = opts.get('p')
   202     if opts.get('directory'):
   227     if opts.get('directory'):
   203         cmd['--prefix'] = opts.get('directory')
   228         cmd['--prefix'] = opts.get('directory')
   204     cmd.extend(args)
   229     cmd.extend(args)
   205 
   230 
   206     ui.status((bytes(cmd)), "\n")
   231     ui.status((bytes(cmd)), "\n")
   207 
   232 
       
   233 
   208 def bisect(ui, repo, *args, **kwargs):
   234 def bisect(ui, repo, *args, **kwargs):
   209     ui.status(_("see 'hg help bisect' for how to use bisect\n\n"))
   235     ui.status(_("see 'hg help bisect' for how to use bisect\n\n"))
   210 
   236 
       
   237 
   211 def blame(ui, repo, *args, **kwargs):
   238 def blame(ui, repo, *args, **kwargs):
   212     cmdoptions = [
   239     cmdoptions = []
   213     ]
       
   214     args, opts = parseoptions(ui, cmdoptions, args)
   240     args, opts = parseoptions(ui, cmdoptions, args)
   215     cmd = Command('annotate -udl')
   241     cmd = Command('annotate -udl')
   216     cmd.extend([convert(v) for v in args])
   242     cmd.extend([convert(v) for v in args])
   217     ui.status((bytes(cmd)), "\n")
   243     ui.status((bytes(cmd)), "\n")
       
   244 
   218 
   245 
   219 def branch(ui, repo, *args, **kwargs):
   246 def branch(ui, repo, *args, **kwargs):
   220     cmdoptions = [
   247     cmdoptions = [
   221         ('', 'set-upstream', None, ''),
   248         ('', 'set-upstream', None, ''),
   222         ('', 'set-upstream-to', '', ''),
   249         ('', 'set-upstream-to', '', ''),
   257             cmd.append(args[0])
   284             cmd.append(args[0])
   258         elif len(args) == 1:
   285         elif len(args) == 1:
   259             cmd.append(args[0])
   286             cmd.append(args[0])
   260     ui.status((bytes(cmd)), "\n")
   287     ui.status((bytes(cmd)), "\n")
   261 
   288 
       
   289 
   262 def ispath(repo, string):
   290 def ispath(repo, string):
   263     """
   291     """
   264     The first argument to git checkout can either be a revision or a path. Let's
   292     The first argument to git checkout can either be a revision or a path. Let's
   265     generally assume it's a revision, unless it's obviously a path. There are
   293     generally assume it's a revision, unless it's obviously a path. There are
   266     too many ways to spell revisions in git for us to reasonably catch all of
   294     too many ways to spell revisions in git for us to reasonably catch all of
   285 
   313 
   286     didexist = (repopath in manifest) or manifest.hasdir(repopath)
   314     didexist = (repopath in manifest) or manifest.hasdir(repopath)
   287 
   315 
   288     return didexist
   316     return didexist
   289 
   317 
       
   318 
   290 def checkout(ui, repo, *args, **kwargs):
   319 def checkout(ui, repo, *args, **kwargs):
   291     cmdoptions = [
   320     cmdoptions = [
   292         ('b', 'branch', '', ''),
   321         ('b', 'branch', '', ''),
   293         ('B', 'branch', '', ''),
   322         ('B', 'branch', '', ''),
   294         ('f', 'force', None, ''),
   323         ('f', 'force', None, ''),
   295         ('p', 'patch', None, ''),
   324         ('p', 'patch', None, ''),
   296     ]
   325     ]
   297     paths = []
   326     paths = []
   298     if '--' in args:
   327     if '--' in args:
   299         sepindex = args.index('--')
   328         sepindex = args.index('--')
   300         paths.extend(args[sepindex + 1:])
   329         paths.extend(args[sepindex + 1 :])
   301         args = args[:sepindex]
   330         args = args[:sepindex]
   302 
   331 
   303     args, opts = parseoptions(ui, cmdoptions, args)
   332     args, opts = parseoptions(ui, cmdoptions, args)
   304 
   333 
   305     rev = None
   334     rev = None
   348     else:
   377     else:
   349         raise error.Abort(_("a commit must be specified"))
   378         raise error.Abort(_("a commit must be specified"))
   350 
   379 
   351     ui.status((bytes(cmd)), "\n")
   380     ui.status((bytes(cmd)), "\n")
   352 
   381 
       
   382 
   353 def cherrypick(ui, repo, *args, **kwargs):
   383 def cherrypick(ui, repo, *args, **kwargs):
   354     cmdoptions = [
   384     cmdoptions = [
   355         ('', 'continue', None, ''),
   385         ('', 'continue', None, ''),
   356         ('', 'abort', None, ''),
   386         ('', 'abort', None, ''),
   357         ('e', 'edit', None, ''),
   387         ('e', 'edit', None, ''),
   370     else:
   400     else:
   371         cmd.extend(args)
   401         cmd.extend(args)
   372 
   402 
   373     ui.status((bytes(cmd)), "\n")
   403     ui.status((bytes(cmd)), "\n")
   374 
   404 
       
   405 
   375 def clean(ui, repo, *args, **kwargs):
   406 def clean(ui, repo, *args, **kwargs):
   376     cmdoptions = [
   407     cmdoptions = [
   377         ('d', 'd', None, ''),
   408         ('d', 'd', None, ''),
   378         ('f', 'force', None, ''),
   409         ('f', 'force', None, ''),
   379         ('x', 'x', None, ''),
   410         ('x', 'x', None, ''),
   385         cmd['--all'] = None
   416         cmd['--all'] = None
   386     cmd.extend(args)
   417     cmd.extend(args)
   387 
   418 
   388     ui.status((bytes(cmd)), "\n")
   419     ui.status((bytes(cmd)), "\n")
   389 
   420 
       
   421 
   390 def clone(ui, repo, *args, **kwargs):
   422 def clone(ui, repo, *args, **kwargs):
   391     cmdoptions = [
   423     cmdoptions = [
   392         ('', 'bare', None, ''),
   424         ('', 'bare', None, ''),
   393         ('n', 'no-checkout', None, ''),
   425         ('n', 'no-checkout', None, ''),
   394         ('b', 'branch', '', ''),
   426         ('b', 'branch', '', ''),
   403     if len(args) > 1:
   435     if len(args) > 1:
   404         cmd.append(args[1])
   436         cmd.append(args[1])
   405 
   437 
   406     if opts.get('bare'):
   438     if opts.get('bare'):
   407         cmd['-U'] = None
   439         cmd['-U'] = None
   408         ui.status(_("note: Mercurial does not have bare clones. "
   440         ui.status(
   409                     "-U will clone the repo without checking out a commit\n\n"))
   441             _(
       
   442                 "note: Mercurial does not have bare clones. "
       
   443                 "-U will clone the repo without checking out a commit\n\n"
       
   444             )
       
   445         )
   410     elif opts.get('no_checkout'):
   446     elif opts.get('no_checkout'):
   411         cmd['-U'] = None
   447         cmd['-U'] = None
   412 
   448 
   413     if opts.get('branch'):
   449     if opts.get('branch'):
   414         cocmd = Command("update")
   450         cocmd = Command("update")
   415         cocmd.append(opts.get('branch'))
   451         cocmd.append(opts.get('branch'))
   416         cmd = cmd & cocmd
   452         cmd = cmd & cocmd
   417 
   453 
   418     ui.status((bytes(cmd)), "\n")
   454     ui.status((bytes(cmd)), "\n")
       
   455 
   419 
   456 
   420 def commit(ui, repo, *args, **kwargs):
   457 def commit(ui, repo, *args, **kwargs):
   421     cmdoptions = [
   458     cmdoptions = [
   422         ('a', 'all', None, ''),
   459         ('a', 'all', None, ''),
   423         ('m', 'message', '', ''),
   460         ('m', 'message', '', ''),
   446 
   483 
   447     if opts.get('message'):
   484     if opts.get('message'):
   448         cmd['-m'] = "'%s'" % (opts.get('message'),)
   485         cmd['-m'] = "'%s'" % (opts.get('message'),)
   449 
   486 
   450     if opts.get('all'):
   487     if opts.get('all'):
   451         ui.status(_("note: Mercurial doesn't have a staging area, "
   488         ui.status(
   452                     "so there is no --all. -A will add and remove files "
   489             _(
   453                     "for you though.\n\n"))
   490                 "note: Mercurial doesn't have a staging area, "
       
   491                 "so there is no --all. -A will add and remove files "
       
   492                 "for you though.\n\n"
       
   493             )
       
   494         )
   454 
   495 
   455     if opts.get('file'):
   496     if opts.get('file'):
   456         cmd['-l'] = opts.get('file')
   497         cmd['-l'] = opts.get('file')
   457 
   498 
   458     if opts.get('author'):
   499     if opts.get('author'):
   463 
   504 
   464     cmd.extend(args)
   505     cmd.extend(args)
   465 
   506 
   466     ui.status((bytes(cmd)), "\n")
   507     ui.status((bytes(cmd)), "\n")
   467 
   508 
       
   509 
   468 def deprecated(ui, repo, *args, **kwargs):
   510 def deprecated(ui, repo, *args, **kwargs):
   469     ui.warn(_('this command has been deprecated in the git project, '
   511     ui.warn(
   470               'thus isn\'t supported by this tool\n\n'))
   512         _(
       
   513             'this command has been deprecated in the git project, '
       
   514             'thus isn\'t supported by this tool\n\n'
       
   515         )
       
   516     )
       
   517 
   471 
   518 
   472 def diff(ui, repo, *args, **kwargs):
   519 def diff(ui, repo, *args, **kwargs):
   473     cmdoptions = [
   520     cmdoptions = [
   474         ('a', 'all', None, ''),
   521         ('a', 'all', None, ''),
   475         ('', 'cached', None, ''),
   522         ('', 'cached', None, ''),
   478     args, opts = parseoptions(ui, cmdoptions, args)
   525     args, opts = parseoptions(ui, cmdoptions, args)
   479 
   526 
   480     cmd = Command('diff')
   527     cmd = Command('diff')
   481 
   528 
   482     if opts.get('cached'):
   529     if opts.get('cached'):
   483         ui.status(_('note: Mercurial has no concept of a staging area, '
   530         ui.status(
   484                     'so --cached does nothing\n\n'))
   531             _(
       
   532                 'note: Mercurial has no concept of a staging area, '
       
   533                 'so --cached does nothing\n\n'
       
   534             )
       
   535         )
   485 
   536 
   486     if opts.get('reverse'):
   537     if opts.get('reverse'):
   487         cmd['--reverse'] = None
   538         cmd['--reverse'] = None
   488 
   539 
   489     for a in list(args):
   540     for a in list(args):
   494         except Exception:
   545         except Exception:
   495             cmd.append(a)
   546             cmd.append(a)
   496 
   547 
   497     ui.status((bytes(cmd)), "\n")
   548     ui.status((bytes(cmd)), "\n")
   498 
   549 
       
   550 
   499 def difftool(ui, repo, *args, **kwargs):
   551 def difftool(ui, repo, *args, **kwargs):
   500     ui.status(_('Mercurial does not enable external difftool by default. You '
   552     ui.status(
   501         'need to enable the extdiff extension in your .hgrc file by adding\n'
   553         _(
   502         'extdiff =\n'
   554             'Mercurial does not enable external difftool by default. You '
   503         'to the [extensions] section and then running\n\n'
   555             'need to enable the extdiff extension in your .hgrc file by adding\n'
   504         'hg extdiff -p <program>\n\n'
   556             'extdiff =\n'
   505         'See \'hg help extdiff\' and \'hg help -e extdiff\' for more '
   557             'to the [extensions] section and then running\n\n'
   506         'information.\n'))
   558             'hg extdiff -p <program>\n\n'
       
   559             'See \'hg help extdiff\' and \'hg help -e extdiff\' for more '
       
   560             'information.\n'
       
   561         )
       
   562     )
       
   563 
   507 
   564 
   508 def fetch(ui, repo, *args, **kwargs):
   565 def fetch(ui, repo, *args, **kwargs):
   509     cmdoptions = [
   566     cmdoptions = [
   510         ('', 'all', None, ''),
   567         ('', 'all', None, ''),
   511         ('f', 'force', None, ''),
   568         ('f', 'force', None, ''),
   515     cmd = Command('pull')
   572     cmd = Command('pull')
   516 
   573 
   517     if len(args) > 0:
   574     if len(args) > 0:
   518         cmd.append(args[0])
   575         cmd.append(args[0])
   519         if len(args) > 1:
   576         if len(args) > 1:
   520             ui.status(_("note: Mercurial doesn't have refspecs. "
   577             ui.status(
   521                         "-r can be used to specify which commits you want to "
   578                 _(
   522                         "pull. -B can be used to specify which bookmark you "
   579                     "note: Mercurial doesn't have refspecs. "
   523                         "want to pull.\n\n"))
   580                     "-r can be used to specify which commits you want to "
       
   581                     "pull. -B can be used to specify which bookmark you "
       
   582                     "want to pull.\n\n"
       
   583                 )
       
   584             )
   524             for v in args[1:]:
   585             for v in args[1:]:
   525                 if v in repo._bookmarks:
   586                 if v in repo._bookmarks:
   526                     cmd['-B'] = v
   587                     cmd['-B'] = v
   527                 else:
   588                 else:
   528                     cmd['-r'] = v
   589                     cmd['-r'] = v
   529 
   590 
   530     ui.status((bytes(cmd)), "\n")
   591     ui.status((bytes(cmd)), "\n")
   531 
   592 
       
   593 
   532 def grep(ui, repo, *args, **kwargs):
   594 def grep(ui, repo, *args, **kwargs):
   533     cmdoptions = [
   595     cmdoptions = []
   534     ]
       
   535     args, opts = parseoptions(ui, cmdoptions, args)
   596     args, opts = parseoptions(ui, cmdoptions, args)
   536 
   597 
   537     cmd = Command('grep')
   598     cmd = Command('grep')
   538 
   599 
   539     # For basic usage, git grep and hg grep are the same. They both have the
   600     # For basic usage, git grep and hg grep are the same. They both have the
   540     # pattern first, followed by paths.
   601     # pattern first, followed by paths.
   541     cmd.extend(args)
   602     cmd.extend(args)
   542 
   603 
   543     ui.status((bytes(cmd)), "\n")
   604     ui.status((bytes(cmd)), "\n")
   544 
   605 
       
   606 
   545 def init(ui, repo, *args, **kwargs):
   607 def init(ui, repo, *args, **kwargs):
   546     cmdoptions = [
   608     cmdoptions = []
   547     ]
       
   548     args, opts = parseoptions(ui, cmdoptions, args)
   609     args, opts = parseoptions(ui, cmdoptions, args)
   549 
   610 
   550     cmd = Command('init')
   611     cmd = Command('init')
   551 
   612 
   552     if len(args) > 0:
   613     if len(args) > 0:
   553         cmd.append(args[0])
   614         cmd.append(args[0])
   554 
   615 
   555     ui.status((bytes(cmd)), "\n")
   616     ui.status((bytes(cmd)), "\n")
       
   617 
   556 
   618 
   557 def log(ui, repo, *args, **kwargs):
   619 def log(ui, repo, *args, **kwargs):
   558     cmdoptions = [
   620     cmdoptions = [
   559         ('', 'follow', None, ''),
   621         ('', 'follow', None, ''),
   560         ('', 'decorate', None, ''),
   622         ('', 'decorate', None, ''),
   566         ('', 'stat', None, ''),
   628         ('', 'stat', None, ''),
   567         ('', 'graph', None, ''),
   629         ('', 'graph', None, ''),
   568         ('p', 'patch', None, ''),
   630         ('p', 'patch', None, ''),
   569     ]
   631     ]
   570     args, opts = parseoptions(ui, cmdoptions, args)
   632     args, opts = parseoptions(ui, cmdoptions, args)
   571     ui.status(_('note: -v prints the entire commit message like Git does. To '
   633     ui.status(
   572                 'print just the first line, drop the -v.\n\n'))
   634         _(
   573     ui.status(_("note: see hg help revset for information on how to filter "
   635             'note: -v prints the entire commit message like Git does. To '
   574                 "log output\n\n"))
   636             'print just the first line, drop the -v.\n\n'
       
   637         )
       
   638     )
       
   639     ui.status(
       
   640         _(
       
   641             "note: see hg help revset for information on how to filter "
       
   642             "log output\n\n"
       
   643         )
       
   644     )
   575 
   645 
   576     cmd = Command('log')
   646     cmd = Command('log')
   577     cmd['-v'] = None
   647     cmd['-v'] = None
   578 
   648 
   579     if opts.get('number'):
   649     if opts.get('number'):
   588         cmd['-p'] = None
   658         cmd['-p'] = None
   589 
   659 
   590     if opts.get('pretty') or opts.get('format') or opts.get('oneline'):
   660     if opts.get('pretty') or opts.get('format') or opts.get('oneline'):
   591         format = opts.get('format', '')
   661         format = opts.get('format', '')
   592         if 'format:' in format:
   662         if 'format:' in format:
   593             ui.status(_("note: --format format:??? equates to Mercurial's "
   663             ui.status(
   594                         "--template. See hg help templates for more info.\n\n"))
   664                 _(
       
   665                     "note: --format format:??? equates to Mercurial's "
       
   666                     "--template. See hg help templates for more info.\n\n"
       
   667                 )
       
   668             )
   595             cmd['--template'] = '???'
   669             cmd['--template'] = '???'
   596         else:
   670         else:
   597             ui.status(_("note: --pretty/format/oneline equate to Mercurial's "
   671             ui.status(
   598                         "--style or --template. See hg help templates for "
   672                 _(
   599                         "more info.\n\n"))
   673                     "note: --pretty/format/oneline equate to Mercurial's "
       
   674                     "--style or --template. See hg help templates for "
       
   675                     "more info.\n\n"
       
   676                 )
       
   677             )
   600             cmd['--style'] = '???'
   678             cmd['--style'] = '???'
   601 
   679 
   602     if len(args) > 0:
   680     if len(args) > 0:
   603         if '..' in args[0]:
   681         if '..' in args[0]:
   604             since, until = args[0].split('..')
   682             since, until = args[0].split('..')
   605             cmd['-r'] = "'%s::%s'" % (since, until)
   683             cmd['-r'] = "'%s::%s'" % (since, until)
   606             del args[0]
   684             del args[0]
   607         cmd.extend(args)
   685         cmd.extend(args)
   608 
   686 
   609     ui.status((bytes(cmd)), "\n")
   687     ui.status((bytes(cmd)), "\n")
       
   688 
   610 
   689 
   611 def lsfiles(ui, repo, *args, **kwargs):
   690 def lsfiles(ui, repo, *args, **kwargs):
   612     cmdoptions = [
   691     cmdoptions = [
   613         ('c', 'cached', None, ''),
   692         ('c', 'cached', None, ''),
   614         ('d', 'deleted', None, ''),
   693         ('d', 'deleted', None, ''),
   618         ('s', 'stage', None, ''),
   697         ('s', 'stage', None, ''),
   619         ('z', '_zero', None, ''),
   698         ('z', '_zero', None, ''),
   620     ]
   699     ]
   621     args, opts = parseoptions(ui, cmdoptions, args)
   700     args, opts = parseoptions(ui, cmdoptions, args)
   622 
   701 
   623     if (opts.get('modified') or opts.get('deleted')
   702     if (
   624         or opts.get('others') or opts.get('ignored')):
   703         opts.get('modified')
       
   704         or opts.get('deleted')
       
   705         or opts.get('others')
       
   706         or opts.get('ignored')
       
   707     ):
   625         cmd = Command('status')
   708         cmd = Command('status')
   626         if opts.get('deleted'):
   709         if opts.get('deleted'):
   627             cmd['-d'] = None
   710             cmd['-d'] = None
   628         if opts.get('modified'):
   711         if opts.get('modified'):
   629             cmd['-m'] = None
   712             cmd['-m'] = None
   632         if opts.get('ignored'):
   715         if opts.get('ignored'):
   633             cmd['-i'] = None
   716             cmd['-i'] = None
   634     else:
   717     else:
   635         cmd = Command('files')
   718         cmd = Command('files')
   636     if opts.get('stage'):
   719     if opts.get('stage'):
   637         ui.status(_("note: Mercurial doesn't have a staging area, ignoring "
   720         ui.status(
   638                   "--stage\n"))
   721             _(
       
   722                 "note: Mercurial doesn't have a staging area, ignoring "
       
   723                 "--stage\n"
       
   724             )
       
   725         )
   639     if opts.get('_zero'):
   726     if opts.get('_zero'):
   640         cmd['-0'] = None
   727         cmd['-0'] = None
   641     cmd.append('.')
   728     cmd.append('.')
   642     for include in args:
   729     for include in args:
   643         cmd['-I'] = procutil.shellquote(include)
   730         cmd['-I'] = procutil.shellquote(include)
   644 
   731 
   645     ui.status((bytes(cmd)), "\n")
   732     ui.status((bytes(cmd)), "\n")
   646 
   733 
       
   734 
   647 def merge(ui, repo, *args, **kwargs):
   735 def merge(ui, repo, *args, **kwargs):
   648     cmdoptions = [
   736     cmdoptions = []
   649     ]
       
   650     args, opts = parseoptions(ui, cmdoptions, args)
   737     args, opts = parseoptions(ui, cmdoptions, args)
   651 
   738 
   652     cmd = Command('merge')
   739     cmd = Command('merge')
   653 
   740 
   654     if len(args) > 0:
   741     if len(args) > 0:
   655         cmd.append(args[len(args) - 1])
   742         cmd.append(args[len(args) - 1])
   656 
   743 
   657     ui.status((bytes(cmd)), "\n")
   744     ui.status((bytes(cmd)), "\n")
   658 
   745 
       
   746 
   659 def mergebase(ui, repo, *args, **kwargs):
   747 def mergebase(ui, repo, *args, **kwargs):
   660     cmdoptions = []
   748     cmdoptions = []
   661     args, opts = parseoptions(ui, cmdoptions, args)
   749     args, opts = parseoptions(ui, cmdoptions, args)
   662 
   750 
   663     if len(args) != 2:
   751     if len(args) != 2:
   664         args = ['A', 'B']
   752         args = ['A', 'B']
   665 
   753 
   666     cmd = Command("log -T '{node}\\n' -r 'ancestor(%s,%s)'"
   754     cmd = Command(
   667                   % (args[0], args[1]))
   755         "log -T '{node}\\n' -r 'ancestor(%s,%s)'" % (args[0], args[1])
   668 
   756     )
   669     ui.status(_('note: ancestors() is part of the revset language\n'),
   757 
   670               _("(learn more about revsets with 'hg help revsets')\n\n"))
   758     ui.status(
   671     ui.status((bytes(cmd)), "\n")
   759         _('note: ancestors() is part of the revset language\n'),
       
   760         _("(learn more about revsets with 'hg help revsets')\n\n"),
       
   761     )
       
   762     ui.status((bytes(cmd)), "\n")
       
   763 
   672 
   764 
   673 def mergetool(ui, repo, *args, **kwargs):
   765 def mergetool(ui, repo, *args, **kwargs):
   674     cmdoptions = []
   766     cmdoptions = []
   675     args, opts = parseoptions(ui, cmdoptions, args)
   767     args, opts = parseoptions(ui, cmdoptions, args)
   676 
   768 
   678 
   770 
   679     if len(args) == 0:
   771     if len(args) == 0:
   680         cmd['--all'] = None
   772         cmd['--all'] = None
   681     cmd.extend(args)
   773     cmd.extend(args)
   682     ui.status((bytes(cmd)), "\n")
   774     ui.status((bytes(cmd)), "\n")
       
   775 
   683 
   776 
   684 def mv(ui, repo, *args, **kwargs):
   777 def mv(ui, repo, *args, **kwargs):
   685     cmdoptions = [
   778     cmdoptions = [
   686         ('f', 'force', None, ''),
   779         ('f', 'force', None, ''),
   687         ('n', 'dry-run', None, ''),
   780         ('n', 'dry-run', None, ''),
   696     if opts.get('dry_run'):
   789     if opts.get('dry_run'):
   697         cmd['-n'] = None
   790         cmd['-n'] = None
   698 
   791 
   699     ui.status((bytes(cmd)), "\n")
   792     ui.status((bytes(cmd)), "\n")
   700 
   793 
       
   794 
   701 def pull(ui, repo, *args, **kwargs):
   795 def pull(ui, repo, *args, **kwargs):
   702     cmdoptions = [
   796     cmdoptions = [
   703         ('', 'all', None, ''),
   797         ('', 'all', None, ''),
   704         ('f', 'force', None, ''),
   798         ('f', 'force', None, ''),
   705         ('r', 'rebase', None, ''),
   799         ('r', 'rebase', None, ''),
   710     cmd['--rebase'] = None
   804     cmd['--rebase'] = None
   711 
   805 
   712     if len(args) > 0:
   806     if len(args) > 0:
   713         cmd.append(args[0])
   807         cmd.append(args[0])
   714         if len(args) > 1:
   808         if len(args) > 1:
   715             ui.status(_("note: Mercurial doesn't have refspecs. "
   809             ui.status(
   716                         "-r can be used to specify which commits you want to "
   810                 _(
   717                         "pull. -B can be used to specify which bookmark you "
   811                     "note: Mercurial doesn't have refspecs. "
   718                         "want to pull.\n\n"))
   812                     "-r can be used to specify which commits you want to "
       
   813                     "pull. -B can be used to specify which bookmark you "
       
   814                     "want to pull.\n\n"
       
   815                 )
       
   816             )
   719             for v in args[1:]:
   817             for v in args[1:]:
   720                 if v in repo._bookmarks:
   818                 if v in repo._bookmarks:
   721                     cmd['-B'] = v
   819                     cmd['-B'] = v
   722                 else:
   820                 else:
   723                     cmd['-r'] = v
   821                     cmd['-r'] = v
   724 
   822 
   725     ui.status((bytes(cmd)), "\n")
   823     ui.status((bytes(cmd)), "\n")
   726 
   824 
       
   825 
   727 def push(ui, repo, *args, **kwargs):
   826 def push(ui, repo, *args, **kwargs):
   728     cmdoptions = [
   827     cmdoptions = [
   729         ('', 'all', None, ''),
   828         ('', 'all', None, ''),
   730         ('f', 'force', None, ''),
   829         ('f', 'force', None, ''),
   731     ]
   830     ]
   734     cmd = Command('push')
   833     cmd = Command('push')
   735 
   834 
   736     if len(args) > 0:
   835     if len(args) > 0:
   737         cmd.append(args[0])
   836         cmd.append(args[0])
   738         if len(args) > 1:
   837         if len(args) > 1:
   739             ui.status(_("note: Mercurial doesn't have refspecs. "
   838             ui.status(
   740                         "-r can be used to specify which commits you want "
   839                 _(
   741                         "to push. -B can be used to specify which bookmark "
   840                     "note: Mercurial doesn't have refspecs. "
   742                         "you want to push.\n\n"))
   841                     "-r can be used to specify which commits you want "
       
   842                     "to push. -B can be used to specify which bookmark "
       
   843                     "you want to push.\n\n"
       
   844                 )
       
   845             )
   743             for v in args[1:]:
   846             for v in args[1:]:
   744                 if v in repo._bookmarks:
   847                 if v in repo._bookmarks:
   745                     cmd['-B'] = v
   848                     cmd['-B'] = v
   746                 else:
   849                 else:
   747                     cmd['-r'] = v
   850                     cmd['-r'] = v
   748 
   851 
   749     if opts.get('force'):
   852     if opts.get('force'):
   750         cmd['-f'] = None
   853         cmd['-f'] = None
   751 
   854 
   752     ui.status((bytes(cmd)), "\n")
   855     ui.status((bytes(cmd)), "\n")
       
   856 
   753 
   857 
   754 def rebase(ui, repo, *args, **kwargs):
   858 def rebase(ui, repo, *args, **kwargs):
   755     cmdoptions = [
   859     cmdoptions = [
   756         ('', 'all', None, ''),
   860         ('', 'all', None, ''),
   757         ('i', 'interactive', None, ''),
   861         ('i', 'interactive', None, ''),
   761         ('', 'skip', None, ''),
   865         ('', 'skip', None, ''),
   762     ]
   866     ]
   763     args, opts = parseoptions(ui, cmdoptions, args)
   867     args, opts = parseoptions(ui, cmdoptions, args)
   764 
   868 
   765     if opts.get('interactive'):
   869     if opts.get('interactive'):
   766         ui.status(_("note: hg histedit does not perform a rebase. "
   870         ui.status(
   767                     "It just edits history.\n\n"))
   871             _(
       
   872                 "note: hg histedit does not perform a rebase. "
       
   873                 "It just edits history.\n\n"
       
   874             )
       
   875         )
   768         cmd = Command('histedit')
   876         cmd = Command('histedit')
   769         if len(args) > 0:
   877         if len(args) > 0:
   770             ui.status(_("also note: 'hg histedit' will automatically detect"
   878             ui.status(
   771                       " your stack, so no second argument is necessary\n\n"))
   879                 _(
       
   880                     "also note: 'hg histedit' will automatically detect"
       
   881                     " your stack, so no second argument is necessary\n\n"
       
   882                 )
       
   883             )
   772         ui.status((bytes(cmd)), "\n")
   884         ui.status((bytes(cmd)), "\n")
   773         return
   885         return
   774 
   886 
   775     if opts.get('skip'):
   887     if opts.get('skip'):
   776         cmd = Command('revert --all -r .')
   888         cmd = Command('revert --all -r .')
   782         cmd['--continue'] = None
   894         cmd['--continue'] = None
   783     if opts.get('abort'):
   895     if opts.get('abort'):
   784         cmd['--abort'] = None
   896         cmd['--abort'] = None
   785 
   897 
   786     if opts.get('onto'):
   898     if opts.get('onto'):
   787         ui.status(_("note: if you're trying to lift a commit off one branch, "
   899         ui.status(
   788                     "try hg rebase -d <destination commit> -s <commit to be "
   900             _(
   789                     "lifted>\n\n"))
   901                 "note: if you're trying to lift a commit off one branch, "
       
   902                 "try hg rebase -d <destination commit> -s <commit to be "
       
   903                 "lifted>\n\n"
       
   904             )
       
   905         )
   790         cmd['-d'] = convert(opts.get('onto'))
   906         cmd['-d'] = convert(opts.get('onto'))
   791         if len(args) < 2:
   907         if len(args) < 2:
   792             raise error.Abort(_("expected format: git rebase --onto X Y Z"))
   908             raise error.Abort(_("expected format: git rebase --onto X Y Z"))
   793         cmd['-s'] = "'::%s - ::%s'" % (convert(args[1]), convert(args[0]))
   909         cmd['-s'] = "'::%s - ::%s'" % (convert(args[1]), convert(args[0]))
   794     else:
   910     else:
   798             cmd['-d'] = convert(args[0])
   914             cmd['-d'] = convert(args[0])
   799             cmd['-b'] = convert(args[1])
   915             cmd['-b'] = convert(args[1])
   800 
   916 
   801     ui.status((bytes(cmd)), "\n")
   917     ui.status((bytes(cmd)), "\n")
   802 
   918 
       
   919 
   803 def reflog(ui, repo, *args, **kwargs):
   920 def reflog(ui, repo, *args, **kwargs):
   804     cmdoptions = [
   921     cmdoptions = [
   805         ('', 'all', None, ''),
   922         ('', 'all', None, ''),
   806     ]
   923     ]
   807     args, opts = parseoptions(ui, cmdoptions, args)
   924     args, opts = parseoptions(ui, cmdoptions, args)
   811         cmd['--all'] = None
   928         cmd['--all'] = None
   812     if len(args) > 0:
   929     if len(args) > 0:
   813         cmd.append(args[0])
   930         cmd.append(args[0])
   814 
   931 
   815     ui.status(bytes(cmd), "\n\n")
   932     ui.status(bytes(cmd), "\n\n")
   816     ui.status(_("note: in hg commits can be deleted from repo but we always"
   933     ui.status(
   817               " have backups\n"))
   934         _(
       
   935             "note: in hg commits can be deleted from repo but we always"
       
   936             " have backups\n"
       
   937         )
       
   938     )
       
   939 
   818 
   940 
   819 def reset(ui, repo, *args, **kwargs):
   941 def reset(ui, repo, *args, **kwargs):
   820     cmdoptions = [
   942     cmdoptions = [
   821         ('', 'soft', None, ''),
   943         ('', 'soft', None, ''),
   822         ('', 'hard', None, ''),
   944         ('', 'hard', None, ''),
   826 
   948 
   827     commit = convert(args[0] if len(args) > 0 else '.')
   949     commit = convert(args[0] if len(args) > 0 else '.')
   828     hard = opts.get('hard')
   950     hard = opts.get('hard')
   829 
   951 
   830     if opts.get('mixed'):
   952     if opts.get('mixed'):
   831         ui.status(_('note: --mixed has no meaning since Mercurial has no '
   953         ui.status(
   832                     'staging area\n\n'))
   954             _(
       
   955                 'note: --mixed has no meaning since Mercurial has no '
       
   956                 'staging area\n\n'
       
   957             )
       
   958         )
   833     if opts.get('soft'):
   959     if opts.get('soft'):
   834         ui.status(_('note: --soft has no meaning since Mercurial has no '
   960         ui.status(
   835                     'staging area\n\n'))
   961             _(
       
   962                 'note: --soft has no meaning since Mercurial has no '
       
   963                 'staging area\n\n'
       
   964             )
       
   965         )
   836 
   966 
   837     cmd = Command('update')
   967     cmd = Command('update')
   838     if hard:
   968     if hard:
   839         cmd.append('--clean')
   969         cmd.append('--clean')
   840 
   970 
   841     cmd.append(commit)
   971     cmd.append(commit)
   842 
   972 
   843     ui.status((bytes(cmd)), "\n")
   973     ui.status((bytes(cmd)), "\n")
   844 
   974 
       
   975 
   845 def revert(ui, repo, *args, **kwargs):
   976 def revert(ui, repo, *args, **kwargs):
   846     cmdoptions = [
   977     cmdoptions = []
   847     ]
       
   848     args, opts = parseoptions(ui, cmdoptions, args)
   978     args, opts = parseoptions(ui, cmdoptions, args)
   849 
   979 
   850     if len(args) > 1:
   980     if len(args) > 1:
   851         ui.status(_("note: hg backout doesn't support multiple commits at "
   981         ui.status(
   852                     "once\n\n"))
   982             _(
       
   983                 "note: hg backout doesn't support multiple commits at "
       
   984                 "once\n\n"
       
   985             )
       
   986         )
   853 
   987 
   854     cmd = Command('backout')
   988     cmd = Command('backout')
   855     if args:
   989     if args:
   856         cmd.append(args[0])
   990         cmd.append(args[0])
   857 
   991 
   858     ui.status((bytes(cmd)), "\n")
   992     ui.status((bytes(cmd)), "\n")
       
   993 
   859 
   994 
   860 def revparse(ui, repo, *args, **kwargs):
   995 def revparse(ui, repo, *args, **kwargs):
   861     cmdoptions = [
   996     cmdoptions = [
   862         ('', 'show-cdup', None, ''),
   997         ('', 'show-cdup', None, ''),
   863         ('', 'show-toplevel', None, ''),
   998         ('', 'show-toplevel', None, ''),
   870             ui.status(_("note: hg root prints the root of the repository\n\n"))
  1005             ui.status(_("note: hg root prints the root of the repository\n\n"))
   871         ui.status((bytes(cmd)), "\n")
  1006         ui.status((bytes(cmd)), "\n")
   872     else:
  1007     else:
   873         ui.status(_("note: see hg help revset for how to refer to commits\n"))
  1008         ui.status(_("note: see hg help revset for how to refer to commits\n"))
   874 
  1009 
       
  1010 
   875 def rm(ui, repo, *args, **kwargs):
  1011 def rm(ui, repo, *args, **kwargs):
   876     cmdoptions = [
  1012     cmdoptions = [
   877         ('f', 'force', None, ''),
  1013         ('f', 'force', None, ''),
   878         ('n', 'dry-run', None, ''),
  1014         ('n', 'dry-run', None, ''),
   879     ]
  1015     ]
   886         cmd['-f'] = None
  1022         cmd['-f'] = None
   887     if opts.get('dry_run'):
  1023     if opts.get('dry_run'):
   888         cmd['-n'] = None
  1024         cmd['-n'] = None
   889 
  1025 
   890     ui.status((bytes(cmd)), "\n")
  1026     ui.status((bytes(cmd)), "\n")
       
  1027 
   891 
  1028 
   892 def show(ui, repo, *args, **kwargs):
  1029 def show(ui, repo, *args, **kwargs):
   893     cmdoptions = [
  1030     cmdoptions = [
   894         ('', 'name-status', None, ''),
  1031         ('', 'name-status', None, ''),
   895         ('', 'pretty', '', ''),
  1032         ('', 'pretty', '', ''),
   918         cmd.append('--config diff.unified=%d' % (opts['unified'],))
  1055         cmd.append('--config diff.unified=%d' % (opts['unified'],))
   919     else:
  1056     else:
   920         cmd = Command('export')
  1057         cmd = Command('export')
   921 
  1058 
   922     ui.status((bytes(cmd)), "\n")
  1059     ui.status((bytes(cmd)), "\n")
       
  1060 
   923 
  1061 
   924 def stash(ui, repo, *args, **kwargs):
  1062 def stash(ui, repo, *args, **kwargs):
   925     cmdoptions = [
  1063     cmdoptions = [
   926         ('p', 'patch', None, ''),
  1064         ('p', 'patch', None, ''),
   927     ]
  1065     ]
   954         if len(args) > 1:
  1092         if len(args) > 1:
   955             cmd.append(args[1])
  1093             cmd.append(args[1])
   956         if action == 'apply':
  1094         if action == 'apply':
   957             cmd['--keep'] = None
  1095             cmd['--keep'] = None
   958     elif action == 'branch' or action == 'create':
  1096     elif action == 'branch' or action == 'create':
   959         ui.status(_("note: Mercurial doesn't have equivalents to the "
  1097         ui.status(
   960                     "git stash branch or create actions\n\n"))
  1098             _(
       
  1099                 "note: Mercurial doesn't have equivalents to the "
       
  1100                 "git stash branch or create actions\n\n"
       
  1101             )
       
  1102         )
   961         return
  1103         return
   962     else:
  1104     else:
   963         if len(args) > 0:
  1105         if len(args) > 0:
   964             if args[0] != 'save':
  1106             if args[0] != 'save':
   965                 cmd['--name'] = args[0]
  1107                 cmd['--name'] = args[0]
   966             elif len(args) > 1:
  1108             elif len(args) > 1:
   967                 cmd['--name'] = args[1]
  1109                 cmd['--name'] = args[1]
   968 
  1110 
   969     ui.status((bytes(cmd)), "\n")
  1111     ui.status((bytes(cmd)), "\n")
   970 
  1112 
       
  1113 
   971 def status(ui, repo, *args, **kwargs):
  1114 def status(ui, repo, *args, **kwargs):
   972     cmdoptions = [
  1115     cmdoptions = [
   973         ('', 'ignored', None, ''),
  1116         ('', 'ignored', None, ''),
   974     ]
  1117     ]
   975     args, opts = parseoptions(ui, cmdoptions, args)
  1118     args, opts = parseoptions(ui, cmdoptions, args)
   979 
  1122 
   980     if opts.get('ignored'):
  1123     if opts.get('ignored'):
   981         cmd['-i'] = None
  1124         cmd['-i'] = None
   982 
  1125 
   983     ui.status((bytes(cmd)), "\n")
  1126     ui.status((bytes(cmd)), "\n")
       
  1127 
   984 
  1128 
   985 def svn(ui, repo, *args, **kwargs):
  1129 def svn(ui, repo, *args, **kwargs):
   986     if not args:
  1130     if not args:
   987         raise error.Abort(_('missing svn command'))
  1131         raise error.Abort(_('missing svn command'))
   988     svncmd = args[0]
  1132     svncmd = args[0]
   989     if svncmd not in gitsvncommands:
  1133     if svncmd not in gitsvncommands:
   990         raise error.Abort(_('unknown git svn command "%s"') % (svncmd))
  1134         raise error.Abort(_('unknown git svn command "%s"') % svncmd)
   991 
  1135 
   992     args = args[1:]
  1136     args = args[1:]
   993     return gitsvncommands[svncmd](ui, repo, *args, **kwargs)
  1137     return gitsvncommands[svncmd](ui, repo, *args, **kwargs)
   994 
  1138 
       
  1139 
   995 def svndcommit(ui, repo, *args, **kwargs):
  1140 def svndcommit(ui, repo, *args, **kwargs):
   996     cmdoptions = [
  1141     cmdoptions = []
   997     ]
       
   998     args, opts = parseoptions(ui, cmdoptions, args)
  1142     args, opts = parseoptions(ui, cmdoptions, args)
   999 
  1143 
  1000     cmd = Command('push')
  1144     cmd = Command('push')
  1001 
  1145 
  1002     ui.status((bytes(cmd)), "\n")
  1146     ui.status((bytes(cmd)), "\n")
  1003 
  1147 
       
  1148 
  1004 def svnfetch(ui, repo, *args, **kwargs):
  1149 def svnfetch(ui, repo, *args, **kwargs):
  1005     cmdoptions = [
  1150     cmdoptions = []
  1006     ]
       
  1007     args, opts = parseoptions(ui, cmdoptions, args)
  1151     args, opts = parseoptions(ui, cmdoptions, args)
  1008 
  1152 
  1009     cmd = Command('pull')
  1153     cmd = Command('pull')
  1010     cmd.append('default-push')
  1154     cmd.append('default-push')
  1011 
  1155 
  1012     ui.status((bytes(cmd)), "\n")
  1156     ui.status((bytes(cmd)), "\n")
  1013 
  1157 
       
  1158 
  1014 def svnfindrev(ui, repo, *args, **kwargs):
  1159 def svnfindrev(ui, repo, *args, **kwargs):
  1015     cmdoptions = [
  1160     cmdoptions = []
  1016     ]
       
  1017     args, opts = parseoptions(ui, cmdoptions, args)
  1161     args, opts = parseoptions(ui, cmdoptions, args)
  1018 
  1162 
  1019     if not args:
  1163     if not args:
  1020         raise error.Abort(_('missing find-rev argument'))
  1164         raise error.Abort(_('missing find-rev argument'))
  1021 
  1165 
  1022     cmd = Command('log')
  1166     cmd = Command('log')
  1023     cmd['-r'] = args[0]
  1167     cmd['-r'] = args[0]
  1024 
  1168 
  1025     ui.status((bytes(cmd)), "\n")
  1169     ui.status((bytes(cmd)), "\n")
       
  1170 
  1026 
  1171 
  1027 def svnrebase(ui, repo, *args, **kwargs):
  1172 def svnrebase(ui, repo, *args, **kwargs):
  1028     cmdoptions = [
  1173     cmdoptions = [
  1029         ('l', 'local', None, ''),
  1174         ('l', 'local', None, ''),
  1030     ]
  1175     ]
  1037 
  1182 
  1038     cmd = pullcmd & rebasecmd
  1183     cmd = pullcmd & rebasecmd
  1039 
  1184 
  1040     ui.status((bytes(cmd)), "\n")
  1185     ui.status((bytes(cmd)), "\n")
  1041 
  1186 
       
  1187 
  1042 def tag(ui, repo, *args, **kwargs):
  1188 def tag(ui, repo, *args, **kwargs):
  1043     cmdoptions = [
  1189     cmdoptions = [
  1044         ('f', 'force', None, ''),
  1190         ('f', 'force', None, ''),
  1045         ('l', 'list', None, ''),
  1191         ('l', 'list', None, ''),
  1046         ('d', 'delete', None, ''),
  1192         ('d', 'delete', None, ''),
  1064 
  1210 
  1065         if opts.get('force'):
  1211         if opts.get('force'):
  1066             cmd['-f'] = None
  1212             cmd['-f'] = None
  1067 
  1213 
  1068     ui.status((bytes(cmd)), "\n")
  1214     ui.status((bytes(cmd)), "\n")
       
  1215 
  1069 
  1216 
  1070 gitcommands = {
  1217 gitcommands = {
  1071     'add': add,
  1218     'add': add,
  1072     'am': am,
  1219     'am': am,
  1073     'apply': apply,
  1220     'apply': apply,