hgext/githelp.py
changeset 36268 257f3651ada9
parent 35721 f50067fbeead
child 37123 a8a902d7176e
equal deleted inserted replaced
36267:6ea0b78ddcac 36268:257f3651ada9
    20 import getopt
    20 import getopt
    21 import re
    21 import re
    22 
    22 
    23 from mercurial.i18n import _
    23 from mercurial.i18n import _
    24 from mercurial import (
    24 from mercurial import (
       
    25     encoding,
    25     error,
    26     error,
    26     fancyopts,
    27     fancyopts,
    27     registrar,
    28     registrar,
    28     util,
    29     util,
    29 )
    30 )
   107     def __init__(self, name):
   108     def __init__(self, name):
   108         self.name = name
   109         self.name = name
   109         self.args = []
   110         self.args = []
   110         self.opts = {}
   111         self.opts = {}
   111 
   112 
   112     def __str__(self):
   113     def __bytes__(self):
   113         cmd = "hg " + self.name
   114         cmd = "hg " + self.name
   114         if self.opts:
   115         if self.opts:
   115             for k, values in sorted(self.opts.iteritems()):
   116             for k, values in sorted(self.opts.iteritems()):
   116                 for v in values:
   117                 for v in values:
   117                     if v:
   118                     if v:
   121         if self.args:
   122         if self.args:
   122             cmd += " "
   123             cmd += " "
   123             cmd += " ".join(self.args)
   124             cmd += " ".join(self.args)
   124         return cmd
   125         return cmd
   125 
   126 
       
   127     __str__ = encoding.strmethod(__bytes__)
       
   128 
   126     def append(self, value):
   129     def append(self, value):
   127         self.args.append(value)
   130         self.args.append(value)
   128 
   131 
   129     def extend(self, values):
   132     def extend(self, values):
   130         self.args.extend(values)
   133         self.args.extend(values)
   165             cmd.extend(args)
   168             cmd.extend(args)
   166         else:
   169         else:
   167             ui.status(_("note: use hg addremove to remove files that have "
   170             ui.status(_("note: use hg addremove to remove files that have "
   168                         "been deleted.\n\n"))
   171                         "been deleted.\n\n"))
   169 
   172 
   170     ui.status((str(cmd)), "\n")
   173     ui.status((bytes(cmd)), "\n")
   171 
   174 
   172 def am(ui, repo, *args, **kwargs):
   175 def am(ui, repo, *args, **kwargs):
   173     cmdoptions=[
   176     cmdoptions=[
   174     ]
   177     ]
   175     args, opts = parseoptions(ui, cmdoptions, args)
   178     args, opts = parseoptions(ui, cmdoptions, args)
   176     cmd = Command('import')
   179     cmd = Command('import')
   177     ui.status(str(cmd), "\n")
   180     ui.status(bytes(cmd), "\n")
   178 
   181 
   179 def apply(ui, repo, *args, **kwargs):
   182 def apply(ui, repo, *args, **kwargs):
   180     cmdoptions = [
   183     cmdoptions = [
   181         ('p', 'p', int, ''),
   184         ('p', 'p', int, ''),
   182     ]
   185     ]
   185     cmd = Command('import --no-commit')
   188     cmd = Command('import --no-commit')
   186     if (opts.get('p')):
   189     if (opts.get('p')):
   187         cmd['-p'] = opts.get('p')
   190         cmd['-p'] = opts.get('p')
   188     cmd.extend(args)
   191     cmd.extend(args)
   189 
   192 
   190     ui.status((str(cmd)), "\n")
   193     ui.status((bytes(cmd)), "\n")
   191 
   194 
   192 def bisect(ui, repo, *args, **kwargs):
   195 def bisect(ui, repo, *args, **kwargs):
   193     ui.status(_("See 'hg help bisect' for how to use bisect.\n\n"))
   196     ui.status(_("See 'hg help bisect' for how to use bisect.\n\n"))
   194 
   197 
   195 def blame(ui, repo, *args, **kwargs):
   198 def blame(ui, repo, *args, **kwargs):
   196     cmdoptions = [
   199     cmdoptions = [
   197     ]
   200     ]
   198     args, opts = parseoptions(ui, cmdoptions, args)
   201     args, opts = parseoptions(ui, cmdoptions, args)
   199     cmd = Command('annotate -udl')
   202     cmd = Command('annotate -udl')
   200     cmd.extend([convert(v) for v in args])
   203     cmd.extend([convert(v) for v in args])
   201     ui.status((str(cmd)), "\n")
   204     ui.status((bytes(cmd)), "\n")
   202 
   205 
   203 def branch(ui, repo, *args, **kwargs):
   206 def branch(ui, repo, *args, **kwargs):
   204     cmdoptions = [
   207     cmdoptions = [
   205         ('', 'set-upstream', None, ''),
   208         ('', 'set-upstream', None, ''),
   206         ('', 'set-upstream-to', '', ''),
   209         ('', 'set-upstream-to', '', ''),
   237         if len(args) > 1:
   240         if len(args) > 1:
   238             cmd['-r'] = args[1]
   241             cmd['-r'] = args[1]
   239             cmd.append(args[0])
   242             cmd.append(args[0])
   240         elif len(args) == 1:
   243         elif len(args) == 1:
   241             cmd.append(args[0])
   244             cmd.append(args[0])
   242     ui.status((str(cmd)), "\n")
   245     ui.status((bytes(cmd)), "\n")
   243 
   246 
   244 def ispath(repo, string):
   247 def ispath(repo, string):
   245     """
   248     """
   246     The first argument to git checkout can either be a revision or a path. Let's
   249     The first argument to git checkout can either be a revision or a path. Let's
   247     generally assume it's a revision, unless it's obviously a path. There are
   250     generally assume it's a revision, unless it's obviously a path. There are
   328         cmd = Command('revert')
   331         cmd = Command('revert')
   329         cmd['--all'] = None
   332         cmd['--all'] = None
   330     else:
   333     else:
   331         raise error.Abort("a commit must be specified")
   334         raise error.Abort("a commit must be specified")
   332 
   335 
   333     ui.status((str(cmd)), "\n")
   336     ui.status((bytes(cmd)), "\n")
   334 
   337 
   335 def cherrypick(ui, repo, *args, **kwargs):
   338 def cherrypick(ui, repo, *args, **kwargs):
   336     cmdoptions = [
   339     cmdoptions = [
   337         ('', 'continue', None, ''),
   340         ('', 'continue', None, ''),
   338         ('', 'abort', None, ''),
   341         ('', 'abort', None, ''),
   350         ui.status(_("note: hg graft does not have --abort.\n\n"))
   353         ui.status(_("note: hg graft does not have --abort.\n\n"))
   351         return
   354         return
   352     else:
   355     else:
   353         cmd.extend(args)
   356         cmd.extend(args)
   354 
   357 
   355     ui.status((str(cmd)), "\n")
   358     ui.status((bytes(cmd)), "\n")
   356 
   359 
   357 def clean(ui, repo, *args, **kwargs):
   360 def clean(ui, repo, *args, **kwargs):
   358     cmdoptions = [
   361     cmdoptions = [
   359         ('d', 'd', None, ''),
   362         ('d', 'd', None, ''),
   360         ('f', 'force', None, ''),
   363         ('f', 'force', None, ''),
   365     cmd = Command('purge')
   368     cmd = Command('purge')
   366     if opts.get('x'):
   369     if opts.get('x'):
   367         cmd['--all'] = None
   370         cmd['--all'] = None
   368     cmd.extend(args)
   371     cmd.extend(args)
   369 
   372 
   370     ui.status((str(cmd)), "\n")
   373     ui.status((bytes(cmd)), "\n")
   371 
   374 
   372 def clone(ui, repo, *args, **kwargs):
   375 def clone(ui, repo, *args, **kwargs):
   373     cmdoptions = [
   376     cmdoptions = [
   374         ('', 'bare', None, ''),
   377         ('', 'bare', None, ''),
   375         ('n', 'no-checkout', None, ''),
   378         ('n', 'no-checkout', None, ''),
   395     if opts.get('branch'):
   398     if opts.get('branch'):
   396         cocmd = Command("update")
   399         cocmd = Command("update")
   397         cocmd.append(opts.get('branch'))
   400         cocmd.append(opts.get('branch'))
   398         cmd = cmd & cocmd
   401         cmd = cmd & cocmd
   399 
   402 
   400     ui.status((str(cmd)), "\n")
   403     ui.status((bytes(cmd)), "\n")
   401 
   404 
   402 def commit(ui, repo, *args, **kwargs):
   405 def commit(ui, repo, *args, **kwargs):
   403     cmdoptions = [
   406     cmdoptions = [
   404         ('a', 'all', None, ''),
   407         ('a', 'all', None, ''),
   405         ('m', 'message', '', ''),
   408         ('m', 'message', '', ''),
   443     if opts.get('date'):
   446     if opts.get('date'):
   444         cmd['-d'] = opts.get('date')
   447         cmd['-d'] = opts.get('date')
   445 
   448 
   446     cmd.extend(args)
   449     cmd.extend(args)
   447 
   450 
   448     ui.status((str(cmd)), "\n")
   451     ui.status((bytes(cmd)), "\n")
   449 
   452 
   450 def deprecated(ui, repo, *args, **kwargs):
   453 def deprecated(ui, repo, *args, **kwargs):
   451     ui.warn(_('This command has been deprecated in the git project, ' +
   454     ui.warn(_('This command has been deprecated in the git project, ' +
   452         'thus isn\'t supported by this tool.\n\n'))
   455         'thus isn\'t supported by this tool.\n\n'))
   453 
   456 
   474             repo.revs(a)
   477             repo.revs(a)
   475             cmd['-r'] = a
   478             cmd['-r'] = a
   476         except Exception:
   479         except Exception:
   477             cmd.append(a)
   480             cmd.append(a)
   478 
   481 
   479     ui.status((str(cmd)), "\n")
   482     ui.status((bytes(cmd)), "\n")
   480 
   483 
   481 def difftool(ui, repo, *args, **kwargs):
   484 def difftool(ui, repo, *args, **kwargs):
   482     ui.status(_('Mercurial does not enable external difftool by default. You '
   485     ui.status(_('Mercurial does not enable external difftool by default. You '
   483         'need to enable the extdiff extension in your .hgrc file by adding\n'
   486         'need to enable the extdiff extension in your .hgrc file by adding\n'
   484         'extdiff =\n'
   487         'extdiff =\n'
   507                 if v in repo._bookmarks:
   510                 if v in repo._bookmarks:
   508                     cmd['-B'] = v
   511                     cmd['-B'] = v
   509                 else:
   512                 else:
   510                     cmd['-r'] = v
   513                     cmd['-r'] = v
   511 
   514 
   512     ui.status((str(cmd)), "\n")
   515     ui.status((bytes(cmd)), "\n")
   513 
   516 
   514 def grep(ui, repo, *args, **kwargs):
   517 def grep(ui, repo, *args, **kwargs):
   515     cmdoptions = [
   518     cmdoptions = [
   516     ]
   519     ]
   517     args, opts = parseoptions(ui, cmdoptions, args)
   520     args, opts = parseoptions(ui, cmdoptions, args)
   520 
   523 
   521     # For basic usage, git grep and hg grep are the same. They both have the
   524     # For basic usage, git grep and hg grep are the same. They both have the
   522     # pattern first, followed by paths.
   525     # pattern first, followed by paths.
   523     cmd.extend(args)
   526     cmd.extend(args)
   524 
   527 
   525     ui.status((str(cmd)), "\n")
   528     ui.status((bytes(cmd)), "\n")
   526 
   529 
   527 def init(ui, repo, *args, **kwargs):
   530 def init(ui, repo, *args, **kwargs):
   528     cmdoptions = [
   531     cmdoptions = [
   529     ]
   532     ]
   530     args, opts = parseoptions(ui, cmdoptions, args)
   533     args, opts = parseoptions(ui, cmdoptions, args)
   532     cmd = Command('init')
   535     cmd = Command('init')
   533 
   536 
   534     if len(args) > 0:
   537     if len(args) > 0:
   535         cmd.append(args[0])
   538         cmd.append(args[0])
   536 
   539 
   537     ui.status((str(cmd)), "\n")
   540     ui.status((bytes(cmd)), "\n")
   538 
   541 
   539 def log(ui, repo, *args, **kwargs):
   542 def log(ui, repo, *args, **kwargs):
   540     cmdoptions = [
   543     cmdoptions = [
   541         ('', 'follow', None, ''),
   544         ('', 'follow', None, ''),
   542         ('', 'decorate', None, ''),
   545         ('', 'decorate', None, ''),
   586             since, until = args[0].split('..')
   589             since, until = args[0].split('..')
   587             cmd['-r'] = "'%s::%s'" % (since, until)
   590             cmd['-r'] = "'%s::%s'" % (since, until)
   588             del args[0]
   591             del args[0]
   589         cmd.extend(args)
   592         cmd.extend(args)
   590 
   593 
   591     ui.status((str(cmd)), "\n")
   594     ui.status((bytes(cmd)), "\n")
   592 
   595 
   593 def lsfiles(ui, repo, *args, **kwargs):
   596 def lsfiles(ui, repo, *args, **kwargs):
   594     cmdoptions = [
   597     cmdoptions = [
   595         ('c', 'cached', None, ''),
   598         ('c', 'cached', None, ''),
   596         ('d', 'deleted', None, ''),
   599         ('d', 'deleted', None, ''),
   622         cmd['-0'] = None
   625         cmd['-0'] = None
   623     cmd.append('.')
   626     cmd.append('.')
   624     for include in args:
   627     for include in args:
   625         cmd['-I'] = util.shellquote(include)
   628         cmd['-I'] = util.shellquote(include)
   626 
   629 
   627     ui.status((str(cmd)), "\n")
   630     ui.status((bytes(cmd)), "\n")
   628 
   631 
   629 def merge(ui, repo, *args, **kwargs):
   632 def merge(ui, repo, *args, **kwargs):
   630     cmdoptions = [
   633     cmdoptions = [
   631     ]
   634     ]
   632     args, opts = parseoptions(ui, cmdoptions, args)
   635     args, opts = parseoptions(ui, cmdoptions, args)
   634     cmd = Command('merge')
   637     cmd = Command('merge')
   635 
   638 
   636     if len(args) > 0:
   639     if len(args) > 0:
   637         cmd.append(args[len(args) - 1])
   640         cmd.append(args[len(args) - 1])
   638 
   641 
   639     ui.status((str(cmd)), "\n")
   642     ui.status((bytes(cmd)), "\n")
   640 
   643 
   641 def mergebase(ui, repo, *args, **kwargs):
   644 def mergebase(ui, repo, *args, **kwargs):
   642     cmdoptions = []
   645     cmdoptions = []
   643     args, opts = parseoptions(ui, cmdoptions, args)
   646     args, opts = parseoptions(ui, cmdoptions, args)
   644 
   647 
   648     cmd = Command("log -T '{node}\\n' -r 'ancestor(%s,%s)'"
   651     cmd = Command("log -T '{node}\\n' -r 'ancestor(%s,%s)'"
   649                   % (args[0], args[1]))
   652                   % (args[0], args[1]))
   650 
   653 
   651     ui.status(_('NOTE: ancestors() is part of the revset language.\n'),
   654     ui.status(_('NOTE: ancestors() is part of the revset language.\n'),
   652               _("Learn more about revsets with 'hg help revsets'\n\n"))
   655               _("Learn more about revsets with 'hg help revsets'\n\n"))
   653     ui.status((str(cmd)), "\n")
   656     ui.status((bytes(cmd)), "\n")
   654 
   657 
   655 def mergetool(ui, repo, *args, **kwargs):
   658 def mergetool(ui, repo, *args, **kwargs):
   656     cmdoptions = []
   659     cmdoptions = []
   657     args, opts = parseoptions(ui, cmdoptions, args)
   660     args, opts = parseoptions(ui, cmdoptions, args)
   658 
   661 
   659     cmd = Command("resolve")
   662     cmd = Command("resolve")
   660 
   663 
   661     if len(args) == 0:
   664     if len(args) == 0:
   662         cmd['--all'] = None
   665         cmd['--all'] = None
   663     cmd.extend(args)
   666     cmd.extend(args)
   664     ui.status((str(cmd)), "\n")
   667     ui.status((bytes(cmd)), "\n")
   665 
   668 
   666 def mv(ui, repo, *args, **kwargs):
   669 def mv(ui, repo, *args, **kwargs):
   667     cmdoptions = [
   670     cmdoptions = [
   668         ('f', 'force', None, ''),
   671         ('f', 'force', None, ''),
   669     ]
   672     ]
   673     cmd.extend(args)
   676     cmd.extend(args)
   674 
   677 
   675     if opts.get('force'):
   678     if opts.get('force'):
   676         cmd['-f'] = None
   679         cmd['-f'] = None
   677 
   680 
   678     ui.status((str(cmd)), "\n")
   681     ui.status((bytes(cmd)), "\n")
   679 
   682 
   680 def pull(ui, repo, *args, **kwargs):
   683 def pull(ui, repo, *args, **kwargs):
   681     cmdoptions = [
   684     cmdoptions = [
   682         ('', 'all', None, ''),
   685         ('', 'all', None, ''),
   683         ('f', 'force', None, ''),
   686         ('f', 'force', None, ''),
   699                 if v in repo._bookmarks:
   702                 if v in repo._bookmarks:
   700                     cmd['-B'] = v
   703                     cmd['-B'] = v
   701                 else:
   704                 else:
   702                     cmd['-r'] = v
   705                     cmd['-r'] = v
   703 
   706 
   704     ui.status((str(cmd)), "\n")
   707     ui.status((bytes(cmd)), "\n")
   705 
   708 
   706 def push(ui, repo, *args, **kwargs):
   709 def push(ui, repo, *args, **kwargs):
   707     cmdoptions = [
   710     cmdoptions = [
   708         ('', 'all', None, ''),
   711         ('', 'all', None, ''),
   709         ('f', 'force', None, ''),
   712         ('f', 'force', None, ''),
   726                     cmd['-r'] = v
   729                     cmd['-r'] = v
   727 
   730 
   728     if opts.get('force'):
   731     if opts.get('force'):
   729         cmd['-f'] = None
   732         cmd['-f'] = None
   730 
   733 
   731     ui.status((str(cmd)), "\n")
   734     ui.status((bytes(cmd)), "\n")
   732 
   735 
   733 def rebase(ui, repo, *args, **kwargs):
   736 def rebase(ui, repo, *args, **kwargs):
   734     cmdoptions = [
   737     cmdoptions = [
   735         ('', 'all', None, ''),
   738         ('', 'all', None, ''),
   736         ('i', 'interactive', None, ''),
   739         ('i', 'interactive', None, ''),
   746             "It just edits history.\n\n"))
   749             "It just edits history.\n\n"))
   747         cmd = Command('histedit')
   750         cmd = Command('histedit')
   748         if len(args) > 0:
   751         if len(args) > 0:
   749             ui.status(_("also note: 'hg histedit' will automatically detect"
   752             ui.status(_("also note: 'hg histedit' will automatically detect"
   750                       " your stack, so no second argument is necessary.\n\n"))
   753                       " your stack, so no second argument is necessary.\n\n"))
   751         ui.status((str(cmd)), "\n")
   754         ui.status((bytes(cmd)), "\n")
   752         return
   755         return
   753 
   756 
   754     if opts.get('skip'):
   757     if opts.get('skip'):
   755         cmd = Command('revert --all -r .')
   758         cmd = Command('revert --all -r .')
   756         ui.status((str(cmd)), "\n")
   759         ui.status((bytes(cmd)), "\n")
   757 
   760 
   758     cmd = Command('rebase')
   761     cmd = Command('rebase')
   759 
   762 
   760     if opts.get('continue') or opts.get('skip'):
   763     if opts.get('continue') or opts.get('skip'):
   761         cmd['--continue'] = None
   764         cmd['--continue'] = None
   775             cmd['-d'] = convert(args[0])
   778             cmd['-d'] = convert(args[0])
   776         elif len(args) == 2:
   779         elif len(args) == 2:
   777             cmd['-d'] = convert(args[0])
   780             cmd['-d'] = convert(args[0])
   778             cmd['-b'] = convert(args[1])
   781             cmd['-b'] = convert(args[1])
   779 
   782 
   780     ui.status((str(cmd)), "\n")
   783     ui.status((bytes(cmd)), "\n")
   781 
   784 
   782 def reflog(ui, repo, *args, **kwargs):
   785 def reflog(ui, repo, *args, **kwargs):
   783     cmdoptions = [
   786     cmdoptions = [
   784         ('', 'all', None, ''),
   787         ('', 'all', None, ''),
   785     ]
   788     ]
   789     if opts.get('all'):
   792     if opts.get('all'):
   790         cmd['--all'] = None
   793         cmd['--all'] = None
   791     if len(args) > 0:
   794     if len(args) > 0:
   792         cmd.append(args[0])
   795         cmd.append(args[0])
   793 
   796 
   794     ui.status(str(cmd), "\n\n")
   797     ui.status(bytes(cmd), "\n\n")
   795     ui.status(_("note: in hg commits can be deleted from repo but we always"
   798     ui.status(_("note: in hg commits can be deleted from repo but we always"
   796               " have backups.\n"))
   799               " have backups.\n"))
   797 
   800 
   798 def reset(ui, repo, *args, **kwargs):
   801 def reset(ui, repo, *args, **kwargs):
   799     cmdoptions = [
   802     cmdoptions = [
   817     if hard:
   820     if hard:
   818         cmd.append('--clean')
   821         cmd.append('--clean')
   819 
   822 
   820     cmd.append(commit)
   823     cmd.append(commit)
   821 
   824 
   822     ui.status((str(cmd)), "\n")
   825     ui.status((bytes(cmd)), "\n")
   823 
   826 
   824 def revert(ui, repo, *args, **kwargs):
   827 def revert(ui, repo, *args, **kwargs):
   825     cmdoptions = [
   828     cmdoptions = [
   826     ]
   829     ]
   827     args, opts = parseoptions(ui, cmdoptions, args)
   830     args, opts = parseoptions(ui, cmdoptions, args)
   832 
   835 
   833     cmd = Command('backout')
   836     cmd = Command('backout')
   834     if args:
   837     if args:
   835         cmd.append(args[0])
   838         cmd.append(args[0])
   836 
   839 
   837     ui.status((str(cmd)), "\n")
   840     ui.status((bytes(cmd)), "\n")
   838 
   841 
   839 def revparse(ui, repo, *args, **kwargs):
   842 def revparse(ui, repo, *args, **kwargs):
   840     cmdoptions = [
   843     cmdoptions = [
   841         ('', 'show-cdup', None, ''),
   844         ('', 'show-cdup', None, ''),
   842         ('', 'show-toplevel', None, ''),
   845         ('', 'show-toplevel', None, ''),
   845 
   848 
   846     if opts.get('show_cdup') or opts.get('show_toplevel'):
   849     if opts.get('show_cdup') or opts.get('show_toplevel'):
   847         cmd = Command('root')
   850         cmd = Command('root')
   848         if opts.get('show_cdup'):
   851         if opts.get('show_cdup'):
   849             ui.status(_("note: hg root prints the root of the repository\n\n"))
   852             ui.status(_("note: hg root prints the root of the repository\n\n"))
   850         ui.status((str(cmd)), "\n")
   853         ui.status((bytes(cmd)), "\n")
   851     else:
   854     else:
   852         ui.status(_("note: see hg help revset for how to refer to commits\n"))
   855         ui.status(_("note: see hg help revset for how to refer to commits\n"))
   853 
   856 
   854 def rm(ui, repo, *args, **kwargs):
   857 def rm(ui, repo, *args, **kwargs):
   855     cmdoptions = [
   858     cmdoptions = [
   864     if opts.get('force'):
   867     if opts.get('force'):
   865         cmd['-f'] = None
   868         cmd['-f'] = None
   866     if opts.get('dry_run'):
   869     if opts.get('dry_run'):
   867         cmd['-n'] = None
   870         cmd['-n'] = None
   868 
   871 
   869     ui.status((str(cmd)), "\n")
   872     ui.status((bytes(cmd)), "\n")
   870 
   873 
   871 def show(ui, repo, *args, **kwargs):
   874 def show(ui, repo, *args, **kwargs):
   872     cmdoptions = [
   875     cmdoptions = [
   873         ('', 'name-status', None, ''),
   876         ('', 'name-status', None, ''),
   874         ('', 'pretty', '', ''),
   877         ('', 'pretty', '', ''),
   896         cmd = Command('export')
   899         cmd = Command('export')
   897         cmd.append('--config diff.unified=%d' % (opts['unified'],))
   900         cmd.append('--config diff.unified=%d' % (opts['unified'],))
   898     else:
   901     else:
   899         cmd = Command('export')
   902         cmd = Command('export')
   900 
   903 
   901     ui.status((str(cmd)), "\n")
   904     ui.status((bytes(cmd)), "\n")
   902 
   905 
   903 def stash(ui, repo, *args, **kwargs):
   906 def stash(ui, repo, *args, **kwargs):
   904     cmdoptions = [
   907     cmdoptions = [
   905     ]
   908     ]
   906     args, opts = parseoptions(ui, cmdoptions, args)
   909     args, opts = parseoptions(ui, cmdoptions, args)
   932             if args[0] != 'save':
   935             if args[0] != 'save':
   933                 cmd['--name'] = args[0]
   936                 cmd['--name'] = args[0]
   934             elif len(args) > 1:
   937             elif len(args) > 1:
   935                 cmd['--name'] = args[1]
   938                 cmd['--name'] = args[1]
   936 
   939 
   937     ui.status((str(cmd)), "\n")
   940     ui.status((bytes(cmd)), "\n")
   938 
   941 
   939 def status(ui, repo, *args, **kwargs):
   942 def status(ui, repo, *args, **kwargs):
   940     cmdoptions = [
   943     cmdoptions = [
   941         ('', 'ignored', None, ''),
   944         ('', 'ignored', None, ''),
   942     ]
   945     ]
   946     cmd.extend(args)
   949     cmd.extend(args)
   947 
   950 
   948     if opts.get('ignored'):
   951     if opts.get('ignored'):
   949         cmd['-i'] = None
   952         cmd['-i'] = None
   950 
   953 
   951     ui.status((str(cmd)), "\n")
   954     ui.status((bytes(cmd)), "\n")
   952 
   955 
   953 def svn(ui, repo, *args, **kwargs):
   956 def svn(ui, repo, *args, **kwargs):
   954     svncmd = args[0]
   957     svncmd = args[0]
   955     if not svncmd in gitsvncommands:
   958     if not svncmd in gitsvncommands:
   956         ui.warn(_("error: unknown git svn command %s\n") % (svncmd))
   959         ui.warn(_("error: unknown git svn command %s\n") % (svncmd))
   963     ]
   966     ]
   964     args, opts = parseoptions(ui, cmdoptions, args)
   967     args, opts = parseoptions(ui, cmdoptions, args)
   965 
   968 
   966     cmd = Command('push')
   969     cmd = Command('push')
   967 
   970 
   968     ui.status((str(cmd)), "\n")
   971     ui.status((bytes(cmd)), "\n")
   969 
   972 
   970 def svnfetch(ui, repo, *args, **kwargs):
   973 def svnfetch(ui, repo, *args, **kwargs):
   971     cmdoptions = [
   974     cmdoptions = [
   972     ]
   975     ]
   973     args, opts = parseoptions(ui, cmdoptions, args)
   976     args, opts = parseoptions(ui, cmdoptions, args)
   974 
   977 
   975     cmd = Command('pull')
   978     cmd = Command('pull')
   976     cmd.append('default-push')
   979     cmd.append('default-push')
   977 
   980 
   978     ui.status((str(cmd)), "\n")
   981     ui.status((bytes(cmd)), "\n")
   979 
   982 
   980 def svnfindrev(ui, repo, *args, **kwargs):
   983 def svnfindrev(ui, repo, *args, **kwargs):
   981     cmdoptions = [
   984     cmdoptions = [
   982     ]
   985     ]
   983     args, opts = parseoptions(ui, cmdoptions, args)
   986     args, opts = parseoptions(ui, cmdoptions, args)
   984 
   987 
   985     cmd = Command('log')
   988     cmd = Command('log')
   986     cmd['-r'] = args[0]
   989     cmd['-r'] = args[0]
   987 
   990 
   988     ui.status((str(cmd)), "\n")
   991     ui.status((bytes(cmd)), "\n")
   989 
   992 
   990 def svnrebase(ui, repo, *args, **kwargs):
   993 def svnrebase(ui, repo, *args, **kwargs):
   991     cmdoptions = [
   994     cmdoptions = [
   992         ('l', 'local', None, ''),
   995         ('l', 'local', None, ''),
   993     ]
   996     ]
   998     rebasecmd = Command('rebase')
  1001     rebasecmd = Command('rebase')
   999     rebasecmd.append('tip')
  1002     rebasecmd.append('tip')
  1000 
  1003 
  1001     cmd = pullcmd & rebasecmd
  1004     cmd = pullcmd & rebasecmd
  1002 
  1005 
  1003     ui.status((str(cmd)), "\n")
  1006     ui.status((bytes(cmd)), "\n")
  1004 
  1007 
  1005 def tag(ui, repo, *args, **kwargs):
  1008 def tag(ui, repo, *args, **kwargs):
  1006     cmdoptions = [
  1009     cmdoptions = [
  1007         ('f', 'force', None, ''),
  1010         ('f', 'force', None, ''),
  1008         ('l', 'list', None, ''),
  1011         ('l', 'list', None, ''),
  1022             cmd['--remove'] = None
  1025             cmd['--remove'] = None
  1023 
  1026 
  1024         if opts.get('force'):
  1027         if opts.get('force'):
  1025             cmd['-f'] = None
  1028             cmd['-f'] = None
  1026 
  1029 
  1027     ui.status((str(cmd)), "\n")
  1030     ui.status((bytes(cmd)), "\n")
  1028 
  1031 
  1029 gitcommands = {
  1032 gitcommands = {
  1030     'add': add,
  1033     'add': add,
  1031     'am': am,
  1034     'am': am,
  1032     'apply': apply,
  1035     'apply': apply,