##// END OF EJS Templates
phabricator: add custom vcr matcher to match request bodies...
phabricator: add custom vcr matcher to match request bodies Currently when the phabricator extension's conduit output changes the tests don't notice since the default vcr matcher only matches on 'method' and 'uri', not the body. Add a custom matcher that checks the same params are in the body (ignoring ordering). vcr's in-built body matcher can't be used since it fails under py3 with a "UnicodeEncodeError" on the "€ in commit message" tests. The DREV ids have decreased since the recordings were generated against a different phabricator instance to avoid spamming mercurial-devel. Differential Revision: https://phab.mercurial-scm.org/D6347

File last commit:

r41460:873a28d7 default
r42454:af13e208 default
Show More
githelp.py
1097 lines | 29.8 KiB | text/x-python | PythonLexer
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732 # githelp.py - Try to map Git commands to Mercurial equivalents.
#
# Copyright 2013 Facebook, Inc.
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
"""try mapping git commands to Mercurial commands
Tries to map a given git command to a Mercurial command:
$ hg githelp -- git checkout master
hg update master
If an unknown command or parameter combination is detected, an error is
produced.
"""
from __future__ import absolute_import
import getopt
import re
from mercurial.i18n import _
from mercurial import (
Gregory Szorc
githelp: cast commands to bytes...
r36248 encoding,
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732 error,
fancyopts,
Gregory Szorc
githelp: make argument parsing more compatible with Python 3...
r41459 pycompat,
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732 registrar,
Martin von Zweigbergk
githelp: use revsymbol() for looking up symbol...
r37406 scmutil,
Yuya Nishihara
procutil: bulk-replace function calls to point to new module
r37138 )
from mercurial.utils import (
procutil,
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732 )
# Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for
# extensions which SHIP WITH MERCURIAL. Non-mainline extensions should
# be specifying the version(s) of Mercurial they are tested with, or
# leave the attribute unspecified.
testedwith = 'ships-with-hg-core'
cmdtable = {}
command = registrar.command(cmdtable)
def convert(s):
if s.startswith("origin/"):
return s[7:]
if 'HEAD' in s:
s = s.replace('HEAD', '.')
# HEAD~ in git is .~1 in mercurial
s = re.sub('~$', '~1', s)
return s
Rodrigo Damazio
help: adding a proper declaration for shortlist/basic commands (API)...
r40331 @command('githelp|git', [
rdamazio@google.com
help: assigning categories to existing commands...
r40329 ], _('hg githelp'),
Rodrigo Damazio
help: adding a proper declaration for shortlist/basic commands (API)...
r40331 helpcategory=command.CATEGORY_HELP, helpbasic=True)
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732 def githelp(ui, repo, *args, **kwargs):
'''suggests the Mercurial equivalent of the given git command
Usage: hg githelp -- <git command>
'''
if len(args) == 0 or (len(args) == 1 and args[0] =='git'):
raise error.Abort(_('missing git command - '
'usage: hg githelp -- <git command>'))
if args[0] == 'git':
args = args[1:]
cmd = args[0]
if not cmd in gitcommands:
Matt Harbison
githelp: make several strings localizable
r38132 raise error.Abort(_("error: unknown git command %s") % (cmd))
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
ui.pager('githelp')
args = args[1:]
return gitcommands[cmd](ui, repo, *args, **kwargs)
def parseoptions(ui, cmdoptions, args):
cmdoptions = list(cmdoptions)
opts = {}
args = list(args)
while True:
try:
args = fancyopts.fancyopts(list(args), cmdoptions, opts, True)
break
except getopt.GetoptError as ex:
Gregory Szorc
githelp: make argument parsing more compatible with Python 3...
r41459 if r"requires argument" in ex.msg:
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732 raise
Gregory Szorc
githelp: make argument parsing more compatible with Python 3...
r41459 if (r'--' + ex.opt) in ex.msg:
flag = '--' + pycompat.bytestr(ex.opt)
elif (r'-' + ex.opt) in ex.msg:
flag = '-' + pycompat.bytestr(ex.opt)
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732 else:
Gregory Szorc
githelp: make argument parsing more compatible with Python 3...
r41459 raise error.Abort(_("unknown option %s") %
pycompat.bytestr(ex.opt))
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732 try:
args.remove(flag)
except Exception:
Matt Harbison
py3: replace str.format(x) with `str % x` in githelp
r38160 msg = _("unknown option '%s' packed with other options")
hint = _("please try passing the option as its own flag: -%s")
Gregory Szorc
githelp: make argument parsing more compatible with Python 3...
r41459 raise error.Abort(msg % pycompat.bytestr(ex.opt),
hint=hint % pycompat.bytestr(ex.opt))
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
ui.warn(_("ignoring unknown option %s\n") % flag)
args = list([convert(x) for x in args])
opts = dict([(k, convert(v)) if isinstance(v, str) else (k, v)
for k, v in opts.iteritems()])
return args, opts
class Command(object):
def __init__(self, name):
self.name = name
self.args = []
self.opts = {}
Gregory Szorc
githelp: cast commands to bytes...
r36248 def __bytes__(self):
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732 cmd = "hg " + self.name
if self.opts:
for k, values in sorted(self.opts.iteritems()):
for v in values:
if v:
Gregory Szorc
githelp: format with %d if an integer...
r41460 if isinstance(v, int):
fmt = ' %s %d'
else:
fmt = ' %s %s'
cmd += fmt % (k, v)
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732 else:
cmd += " %s" % (k,)
if self.args:
cmd += " "
cmd += " ".join(self.args)
return cmd
Gregory Szorc
githelp: cast commands to bytes...
r36248 __str__ = encoding.strmethod(__bytes__)
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732 def append(self, value):
self.args.append(value)
def extend(self, values):
self.args.extend(values)
def __setitem__(self, key, value):
values = self.opts.setdefault(key, [])
values.append(value)
def __and__(self, other):
return AndCommand(self, other)
class AndCommand(object):
def __init__(self, left, right):
self.left = left
self.right = right
def __str__(self):
return "%s && %s" % (self.left, self.right)
def __and__(self, other):
return AndCommand(self, other)
def add(ui, repo, *args, **kwargs):
cmdoptions = [
('A', 'all', None, ''),
('p', 'patch', None, ''),
]
args, opts = parseoptions(ui, cmdoptions, args)
if (opts.get('patch')):
Gregory Szorc
githelp: improve help for `git add`...
r35733 ui.status(_("note: Mercurial will commit when complete, "
"as there is no staging area in Mercurial\n\n"))
cmd = Command('commit --interactive')
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732 else:
cmd = Command("add")
if not opts.get('all'):
cmd.extend(args)
else:
ui.status(_("note: use hg addremove to remove files that have "
Matt Harbison
githelp: drop the trailing period from single sentence output for consistency...
r38159 "been deleted\n\n"))
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
Gregory Szorc
githelp: cast commands to bytes...
r36248 ui.status((bytes(cmd)), "\n")
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
def am(ui, repo, *args, **kwargs):
cmdoptions=[
]
args, opts = parseoptions(ui, cmdoptions, args)
Gregory Szorc
githelp: recommend `hg import` for `git am`...
r35734 cmd = Command('import')
Gregory Szorc
githelp: cast commands to bytes...
r36248 ui.status(bytes(cmd), "\n")
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
def apply(ui, repo, *args, **kwargs):
cmdoptions = [
('p', 'p', int, ''),
]
args, opts = parseoptions(ui, cmdoptions, args)
cmd = Command('import --no-commit')
if (opts.get('p')):
cmd['-p'] = opts.get('p')
cmd.extend(args)
Gregory Szorc
githelp: cast commands to bytes...
r36248 ui.status((bytes(cmd)), "\n")
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
def bisect(ui, repo, *args, **kwargs):
Matt Harbison
githelp: drop the trailing period from single sentence output for consistency...
r38159 ui.status(_("see 'hg help bisect' for how to use bisect\n\n"))
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
def blame(ui, repo, *args, **kwargs):
cmdoptions = [
]
args, opts = parseoptions(ui, cmdoptions, args)
Gregory Szorc
githelp: remove reference to tweakdefaults...
r35735 cmd = Command('annotate -udl')
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732 cmd.extend([convert(v) for v in args])
Gregory Szorc
githelp: cast commands to bytes...
r36248 ui.status((bytes(cmd)), "\n")
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
def branch(ui, repo, *args, **kwargs):
cmdoptions = [
('', 'set-upstream', None, ''),
('', 'set-upstream-to', '', ''),
('d', 'delete', None, ''),
('D', 'delete', None, ''),
('m', 'move', None, ''),
('M', 'move', None, ''),
]
args, opts = parseoptions(ui, cmdoptions, args)
cmd = Command("bookmark")
if opts.get('set_upstream') or opts.get('set_upstream_to'):
ui.status(_("Mercurial has no concept of upstream branches\n"))
return
elif opts.get('delete'):
cmd = Command("strip")
for branch in args:
cmd['-B'] = branch
else:
cmd['-B'] = None
elif opts.get('move'):
if len(args) > 0:
if len(args) > 1:
old = args.pop(0)
else:
# shell command to output the active bookmark for the active
# revision
old = '`hg log -T"{activebookmark}" -r .`'
Matt Harbison
githelp: fail gracefully in a couple cases where arguments are missing...
r38130 else:
raise error.Abort(_('missing newbranch argument'))
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732 new = args[0]
cmd['-m'] = old
cmd.append(new)
else:
if len(args) > 1:
cmd['-r'] = args[1]
cmd.append(args[0])
elif len(args) == 1:
cmd.append(args[0])
Gregory Szorc
githelp: cast commands to bytes...
r36248 ui.status((bytes(cmd)), "\n")
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
def ispath(repo, string):
"""
The first argument to git checkout can either be a revision or a path. Let's
generally assume it's a revision, unless it's obviously a path. There are
too many ways to spell revisions in git for us to reasonably catch all of
them, so let's be conservative.
"""
Martin von Zweigbergk
githelp: use revsymbol() for looking up symbol...
r37406 if scmutil.isrevsymbol(repo, string):
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732 # if it's definitely a revision let's not even check if a file of the
# same name exists.
return False
cwd = repo.getcwd()
if cwd == '':
repopath = string
else:
repopath = cwd + '/' + string
exists = repo.wvfs.exists(repopath)
if exists:
return True
manifest = repo['.'].manifest()
didexist = (repopath in manifest) or manifest.hasdir(repopath)
return didexist
def checkout(ui, repo, *args, **kwargs):
cmdoptions = [
('b', 'branch', '', ''),
('B', 'branch', '', ''),
('f', 'force', None, ''),
('p', 'patch', None, ''),
]
paths = []
if '--' in args:
sepindex = args.index('--')
paths.extend(args[sepindex + 1:])
args = args[:sepindex]
args, opts = parseoptions(ui, cmdoptions, args)
rev = None
if args and ispath(repo, args[0]):
paths = args + paths
elif args:
rev = args[0]
paths = args[1:] + paths
cmd = Command('update')
if opts.get('force'):
if paths or rev:
cmd['-C'] = None
if opts.get('patch'):
cmd = Command('revert')
cmd['-i'] = None
if opts.get('branch'):
if len(args) == 0:
cmd = Command('bookmark')
cmd.append(opts.get('branch'))
else:
cmd.append(args[0])
bookcmd = Command('bookmark')
bookcmd.append(opts.get('branch'))
cmd = cmd & bookcmd
# if there is any path argument supplied, use revert instead of update
elif len(paths) > 0:
ui.status(_("note: use --no-backup to avoid creating .orig files\n\n"))
cmd = Command('revert')
if opts.get('patch'):
cmd['-i'] = None
if rev:
cmd['-r'] = rev
cmd.extend(paths)
elif rev:
if opts.get('patch'):
cmd['-r'] = rev
else:
cmd.append(rev)
elif opts.get('force'):
cmd = Command('revert')
cmd['--all'] = None
else:
Matt Harbison
githelp: make several strings localizable
r38132 raise error.Abort(_("a commit must be specified"))
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
Gregory Szorc
githelp: cast commands to bytes...
r36248 ui.status((bytes(cmd)), "\n")
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
def cherrypick(ui, repo, *args, **kwargs):
cmdoptions = [
('', 'continue', None, ''),
('', 'abort', None, ''),
('e', 'edit', None, ''),
]
args, opts = parseoptions(ui, cmdoptions, args)
cmd = Command('graft')
if opts.get('edit'):
cmd['--edit'] = None
if opts.get('continue'):
cmd['--continue'] = None
elif opts.get('abort'):
Matt Harbison
githelp: drop the trailing period from single sentence output for consistency...
r38159 ui.status(_("note: hg graft does not have --abort\n\n"))
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732 return
else:
cmd.extend(args)
Gregory Szorc
githelp: cast commands to bytes...
r36248 ui.status((bytes(cmd)), "\n")
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
def clean(ui, repo, *args, **kwargs):
cmdoptions = [
('d', 'd', None, ''),
('f', 'force', None, ''),
('x', 'x', None, ''),
]
args, opts = parseoptions(ui, cmdoptions, args)
cmd = Command('purge')
if opts.get('x'):
cmd['--all'] = None
cmd.extend(args)
Gregory Szorc
githelp: cast commands to bytes...
r36248 ui.status((bytes(cmd)), "\n")
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
def clone(ui, repo, *args, **kwargs):
cmdoptions = [
('', 'bare', None, ''),
('n', 'no-checkout', None, ''),
('b', 'branch', '', ''),
]
args, opts = parseoptions(ui, cmdoptions, args)
if len(args) == 0:
Matt Harbison
githelp: make several strings localizable
r38132 raise error.Abort(_("a repository to clone must be specified"))
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
cmd = Command('clone')
cmd.append(args[0])
if len(args) > 1:
cmd.append(args[1])
if opts.get('bare'):
cmd['-U'] = None
Yuya Nishihara
githelp: do not concatenate i18n messages dynamically so they can be collected
r38143 ui.status(_("note: Mercurial does not have bare clones. "
"-U will clone the repo without checking out a commit\n\n"))
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732 elif opts.get('no_checkout'):
cmd['-U'] = None
if opts.get('branch'):
cocmd = Command("update")
cocmd.append(opts.get('branch'))
cmd = cmd & cocmd
Gregory Szorc
githelp: cast commands to bytes...
r36248 ui.status((bytes(cmd)), "\n")
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
def commit(ui, repo, *args, **kwargs):
cmdoptions = [
('a', 'all', None, ''),
('m', 'message', '', ''),
('p', 'patch', None, ''),
('C', 'reuse-message', '', ''),
('F', 'file', '', ''),
('', 'author', '', ''),
('', 'date', '', ''),
('', 'amend', None, ''),
('', 'no-edit', None, ''),
]
args, opts = parseoptions(ui, cmdoptions, args)
cmd = Command('commit')
if opts.get('patch'):
Gregory Szorc
githelp: replace suggestion of `hg record`...
r35736 cmd = Command('commit --interactive')
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
if opts.get('amend'):
if opts.get('no_edit'):
cmd = Command('amend')
else:
cmd['--amend'] = None
if opts.get('reuse_message'):
cmd['-M'] = opts.get('reuse_message')
if opts.get('message'):
cmd['-m'] = "'%s'" % (opts.get('message'),)
if opts.get('all'):
Yuya Nishihara
githelp: do not concatenate i18n messages dynamically so they can be collected
r38143 ui.status(_("note: Mercurial doesn't have a staging area, "
"so there is no --all. -A will add and remove files "
"for you though.\n\n"))
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
if opts.get('file'):
cmd['-l'] = opts.get('file')
if opts.get('author'):
cmd['-u'] = opts.get('author')
if opts.get('date'):
cmd['-d'] = opts.get('date')
cmd.extend(args)
Gregory Szorc
githelp: cast commands to bytes...
r36248 ui.status((bytes(cmd)), "\n")
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
def deprecated(ui, repo, *args, **kwargs):
Yuya Nishihara
githelp: do not concatenate i18n messages dynamically so they can be collected
r38143 ui.warn(_('this command has been deprecated in the git project, '
Matt Harbison
githelp: drop the trailing period from single sentence output for consistency...
r38159 'thus isn\'t supported by this tool\n\n'))
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
def diff(ui, repo, *args, **kwargs):
cmdoptions = [
('a', 'all', None, ''),
('', 'cached', None, ''),
('R', 'reverse', None, ''),
]
args, opts = parseoptions(ui, cmdoptions, args)
cmd = Command('diff')
if opts.get('cached'):
Yuya Nishihara
githelp: do not concatenate i18n messages dynamically so they can be collected
r38143 ui.status(_('note: Mercurial has no concept of a staging area, '
Matt Harbison
githelp: drop the trailing period from single sentence output for consistency...
r38159 'so --cached does nothing\n\n'))
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
if opts.get('reverse'):
cmd['--reverse'] = None
for a in list(args):
args.remove(a)
try:
repo.revs(a)
cmd['-r'] = a
except Exception:
cmd.append(a)
Gregory Szorc
githelp: cast commands to bytes...
r36248 ui.status((bytes(cmd)), "\n")
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
def difftool(ui, repo, *args, **kwargs):
ui.status(_('Mercurial does not enable external difftool by default. You '
'need to enable the extdiff extension in your .hgrc file by adding\n'
'extdiff =\n'
'to the [extensions] section and then running\n\n'
'hg extdiff -p <program>\n\n'
'See \'hg help extdiff\' and \'hg help -e extdiff\' for more '
'information.\n'))
def fetch(ui, repo, *args, **kwargs):
cmdoptions = [
('', 'all', None, ''),
('f', 'force', None, ''),
]
args, opts = parseoptions(ui, cmdoptions, args)
cmd = Command('pull')
if len(args) > 0:
cmd.append(args[0])
if len(args) > 1:
Yuya Nishihara
githelp: do not concatenate i18n messages dynamically so they can be collected
r38143 ui.status(_("note: Mercurial doesn't have refspecs. "
"-r can be used to specify which commits you want to "
"pull. -B can be used to specify which bookmark you "
"want to pull.\n\n"))
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732 for v in args[1:]:
if v in repo._bookmarks:
cmd['-B'] = v
else:
cmd['-r'] = v
Gregory Szorc
githelp: cast commands to bytes...
r36248 ui.status((bytes(cmd)), "\n")
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
def grep(ui, repo, *args, **kwargs):
cmdoptions = [
]
args, opts = parseoptions(ui, cmdoptions, args)
cmd = Command('grep')
# For basic usage, git grep and hg grep are the same. They both have the
# pattern first, followed by paths.
cmd.extend(args)
Gregory Szorc
githelp: cast commands to bytes...
r36248 ui.status((bytes(cmd)), "\n")
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
def init(ui, repo, *args, **kwargs):
cmdoptions = [
]
args, opts = parseoptions(ui, cmdoptions, args)
cmd = Command('init')
if len(args) > 0:
cmd.append(args[0])
Gregory Szorc
githelp: cast commands to bytes...
r36248 ui.status((bytes(cmd)), "\n")
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
def log(ui, repo, *args, **kwargs):
cmdoptions = [
('', 'follow', None, ''),
('', 'decorate', None, ''),
('n', 'number', '', ''),
('1', '1', None, ''),
('', 'pretty', '', ''),
('', 'format', '', ''),
('', 'oneline', None, ''),
('', 'stat', None, ''),
('', 'graph', None, ''),
('p', 'patch', None, ''),
]
args, opts = parseoptions(ui, cmdoptions, args)
Yuya Nishihara
githelp: do not concatenate i18n messages dynamically so they can be collected
r38143 ui.status(_('note: -v prints the entire commit message like Git does. To '
'print just the first line, drop the -v.\n\n'))
ui.status(_("note: see hg help revset for information on how to filter "
Matt Harbison
githelp: drop the trailing period from single sentence output for consistency...
r38159 "log output\n\n"))
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
cmd = Command('log')
cmd['-v'] = None
if opts.get('number'):
cmd['-l'] = opts.get('number')
if opts.get('1'):
cmd['-l'] = '1'
if opts.get('stat'):
cmd['--stat'] = None
if opts.get('graph'):
cmd['-G'] = None
if opts.get('patch'):
cmd['-p'] = None
if opts.get('pretty') or opts.get('format') or opts.get('oneline'):
format = opts.get('format', '')
if 'format:' in format:
Yuya Nishihara
githelp: do not concatenate i18n messages dynamically so they can be collected
r38143 ui.status(_("note: --format format:??? equates to Mercurial's "
"--template. See hg help templates for more info.\n\n"))
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732 cmd['--template'] = '???'
else:
Yuya Nishihara
githelp: do not concatenate i18n messages dynamically so they can be collected
r38143 ui.status(_("note: --pretty/format/oneline equate to Mercurial's "
"--style or --template. See hg help templates for "
"more info.\n\n"))
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732 cmd['--style'] = '???'
if len(args) > 0:
if '..' in args[0]:
since, until = args[0].split('..')
cmd['-r'] = "'%s::%s'" % (since, until)
del args[0]
cmd.extend(args)
Gregory Szorc
githelp: cast commands to bytes...
r36248 ui.status((bytes(cmd)), "\n")
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
def lsfiles(ui, repo, *args, **kwargs):
cmdoptions = [
('c', 'cached', None, ''),
('d', 'deleted', None, ''),
('m', 'modified', None, ''),
('o', 'others', None, ''),
('i', 'ignored', None, ''),
('s', 'stage', None, ''),
('z', '_zero', None, ''),
]
args, opts = parseoptions(ui, cmdoptions, args)
if (opts.get('modified') or opts.get('deleted')
or opts.get('others') or opts.get('ignored')):
cmd = Command('status')
if opts.get('deleted'):
cmd['-d'] = None
if opts.get('modified'):
cmd['-m'] = None
if opts.get('others'):
cmd['-o'] = None
if opts.get('ignored'):
cmd['-i'] = None
else:
cmd = Command('files')
if opts.get('stage'):
ui.status(_("note: Mercurial doesn't have a staging area, ignoring "
"--stage\n"))
if opts.get('_zero'):
cmd['-0'] = None
cmd.append('.')
for include in args:
Yuya Nishihara
procutil: bulk-replace function calls to point to new module
r37138 cmd['-I'] = procutil.shellquote(include)
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
Gregory Szorc
githelp: cast commands to bytes...
r36248 ui.status((bytes(cmd)), "\n")
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
def merge(ui, repo, *args, **kwargs):
cmdoptions = [
]
args, opts = parseoptions(ui, cmdoptions, args)
cmd = Command('merge')
if len(args) > 0:
cmd.append(args[len(args) - 1])
Gregory Szorc
githelp: cast commands to bytes...
r36248 ui.status((bytes(cmd)), "\n")
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
def mergebase(ui, repo, *args, **kwargs):
cmdoptions = []
args, opts = parseoptions(ui, cmdoptions, args)
if len(args) != 2:
args = ['A', 'B']
cmd = Command("log -T '{node}\\n' -r 'ancestor(%s,%s)'"
% (args[0], args[1]))
Matt Harbison
githelp: drop the trailing period from single sentence output for consistency...
r38159 ui.status(_('note: ancestors() is part of the revset language\n'),
Matt Harbison
githelp: lowercase the start of output messages for consistency...
r38134 _("(learn more about revsets with 'hg help revsets')\n\n"))
Gregory Szorc
githelp: cast commands to bytes...
r36248 ui.status((bytes(cmd)), "\n")
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
def mergetool(ui, repo, *args, **kwargs):
cmdoptions = []
args, opts = parseoptions(ui, cmdoptions, args)
cmd = Command("resolve")
if len(args) == 0:
cmd['--all'] = None
cmd.extend(args)
Gregory Szorc
githelp: cast commands to bytes...
r36248 ui.status((bytes(cmd)), "\n")
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
def mv(ui, repo, *args, **kwargs):
cmdoptions = [
('f', 'force', None, ''),
]
args, opts = parseoptions(ui, cmdoptions, args)
cmd = Command('mv')
cmd.extend(args)
if opts.get('force'):
cmd['-f'] = None
Gregory Szorc
githelp: cast commands to bytes...
r36248 ui.status((bytes(cmd)), "\n")
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
def pull(ui, repo, *args, **kwargs):
cmdoptions = [
('', 'all', None, ''),
('f', 'force', None, ''),
('r', 'rebase', None, ''),
]
args, opts = parseoptions(ui, cmdoptions, args)
cmd = Command('pull')
cmd['--rebase'] = None
if len(args) > 0:
cmd.append(args[0])
if len(args) > 1:
Yuya Nishihara
githelp: do not concatenate i18n messages dynamically so they can be collected
r38143 ui.status(_("note: Mercurial doesn't have refspecs. "
"-r can be used to specify which commits you want to "
"pull. -B can be used to specify which bookmark you "
"want to pull.\n\n"))
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732 for v in args[1:]:
if v in repo._bookmarks:
cmd['-B'] = v
else:
cmd['-r'] = v
Gregory Szorc
githelp: cast commands to bytes...
r36248 ui.status((bytes(cmd)), "\n")
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
def push(ui, repo, *args, **kwargs):
cmdoptions = [
('', 'all', None, ''),
('f', 'force', None, ''),
]
args, opts = parseoptions(ui, cmdoptions, args)
cmd = Command('push')
if len(args) > 0:
cmd.append(args[0])
if len(args) > 1:
Yuya Nishihara
githelp: do not concatenate i18n messages dynamically so they can be collected
r38143 ui.status(_("note: Mercurial doesn't have refspecs. "
"-r can be used to specify which commits you want "
"to push. -B can be used to specify which bookmark "
"you want to push.\n\n"))
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732 for v in args[1:]:
if v in repo._bookmarks:
cmd['-B'] = v
else:
cmd['-r'] = v
if opts.get('force'):
cmd['-f'] = None
Gregory Szorc
githelp: cast commands to bytes...
r36248 ui.status((bytes(cmd)), "\n")
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
def rebase(ui, repo, *args, **kwargs):
cmdoptions = [
('', 'all', None, ''),
('i', 'interactive', None, ''),
('', 'onto', '', ''),
('', 'abort', None, ''),
('', 'continue', None, ''),
('', 'skip', None, ''),
]
args, opts = parseoptions(ui, cmdoptions, args)
if opts.get('interactive'):
Yuya Nishihara
githelp: do not concatenate i18n messages dynamically so they can be collected
r38143 ui.status(_("note: hg histedit does not perform a rebase. "
"It just edits history.\n\n"))
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732 cmd = Command('histedit')
if len(args) > 0:
ui.status(_("also note: 'hg histedit' will automatically detect"
Matt Harbison
githelp: drop the trailing period from single sentence output for consistency...
r38159 " your stack, so no second argument is necessary\n\n"))
Gregory Szorc
githelp: cast commands to bytes...
r36248 ui.status((bytes(cmd)), "\n")
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732 return
if opts.get('skip'):
cmd = Command('revert --all -r .')
Gregory Szorc
githelp: cast commands to bytes...
r36248 ui.status((bytes(cmd)), "\n")
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
cmd = Command('rebase')
if opts.get('continue') or opts.get('skip'):
cmd['--continue'] = None
if opts.get('abort'):
cmd['--abort'] = None
if opts.get('onto'):
Yuya Nishihara
githelp: do not concatenate i18n messages dynamically so they can be collected
r38143 ui.status(_("note: if you're trying to lift a commit off one branch, "
"try hg rebase -d <destination commit> -s <commit to be "
"lifted>\n\n"))
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732 cmd['-d'] = convert(opts.get('onto'))
if len(args) < 2:
Matt Harbison
githelp: lowercase the start of output messages for consistency...
r38134 raise error.Abort(_("expected format: git rebase --onto X Y Z"))
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732 cmd['-s'] = "'::%s - ::%s'" % (convert(args[1]), convert(args[0]))
else:
if len(args) == 1:
cmd['-d'] = convert(args[0])
elif len(args) == 2:
cmd['-d'] = convert(args[0])
cmd['-b'] = convert(args[1])
Gregory Szorc
githelp: cast commands to bytes...
r36248 ui.status((bytes(cmd)), "\n")
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
def reflog(ui, repo, *args, **kwargs):
cmdoptions = [
('', 'all', None, ''),
]
args, opts = parseoptions(ui, cmdoptions, args)
cmd = Command('journal')
if opts.get('all'):
cmd['--all'] = None
if len(args) > 0:
cmd.append(args[0])
Gregory Szorc
githelp: cast commands to bytes...
r36248 ui.status(bytes(cmd), "\n\n")
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732 ui.status(_("note: in hg commits can be deleted from repo but we always"
Matt Harbison
githelp: drop the trailing period from single sentence output for consistency...
r38159 " have backups\n"))
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
def reset(ui, repo, *args, **kwargs):
cmdoptions = [
('', 'soft', None, ''),
('', 'hard', None, ''),
('', 'mixed', None, ''),
]
args, opts = parseoptions(ui, cmdoptions, args)
commit = convert(args[0] if len(args) > 0 else '.')
hard = opts.get('hard')
if opts.get('mixed'):
Matt Harbison
githelp: lowercase the start of output messages for consistency...
r38134 ui.status(_('note: --mixed has no meaning since Mercurial has no '
Gregory Szorc
githelp: improve help for "reset"...
r35738 'staging area\n\n'))
if opts.get('soft'):
Matt Harbison
githelp: lowercase the start of output messages for consistency...
r38134 ui.status(_('note: --soft has no meaning since Mercurial has no '
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732 'staging area\n\n'))
Gregory Szorc
githelp: improve help for "reset"...
r35738 cmd = Command('update')
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732 if hard:
cmd.append('--clean')
Gregory Szorc
githelp: improve help for "reset"...
r35738
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732 cmd.append(commit)
Gregory Szorc
githelp: cast commands to bytes...
r36248 ui.status((bytes(cmd)), "\n")
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
def revert(ui, repo, *args, **kwargs):
cmdoptions = [
]
args, opts = parseoptions(ui, cmdoptions, args)
if len(args) > 1:
Yuya Nishihara
githelp: do not concatenate i18n messages dynamically so they can be collected
r38143 ui.status(_("note: hg backout doesn't support multiple commits at "
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732 "once\n\n"))
cmd = Command('backout')
if args:
cmd.append(args[0])
Gregory Szorc
githelp: cast commands to bytes...
r36248 ui.status((bytes(cmd)), "\n")
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
def revparse(ui, repo, *args, **kwargs):
cmdoptions = [
('', 'show-cdup', None, ''),
('', 'show-toplevel', None, ''),
]
args, opts = parseoptions(ui, cmdoptions, args)
if opts.get('show_cdup') or opts.get('show_toplevel'):
cmd = Command('root')
if opts.get('show_cdup'):
ui.status(_("note: hg root prints the root of the repository\n\n"))
Gregory Szorc
githelp: cast commands to bytes...
r36248 ui.status((bytes(cmd)), "\n")
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732 else:
ui.status(_("note: see hg help revset for how to refer to commits\n"))
def rm(ui, repo, *args, **kwargs):
cmdoptions = [
('f', 'force', None, ''),
('n', 'dry-run', None, ''),
]
args, opts = parseoptions(ui, cmdoptions, args)
cmd = Command('rm')
cmd.extend(args)
if opts.get('force'):
cmd['-f'] = None
if opts.get('dry_run'):
cmd['-n'] = None
Gregory Szorc
githelp: cast commands to bytes...
r36248 ui.status((bytes(cmd)), "\n")
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
def show(ui, repo, *args, **kwargs):
cmdoptions = [
('', 'name-status', None, ''),
('', 'pretty', '', ''),
('U', 'unified', int, ''),
]
args, opts = parseoptions(ui, cmdoptions, args)
if opts.get('name_status'):
if opts.get('pretty') == 'format:':
Gregory Szorc
githelp: don't reference 3rd party commands for `git show`...
r35739 cmd = Command('status')
cmd['--change'] = '.'
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732 else:
cmd = Command('log')
cmd.append('--style status')
Gregory Szorc
githelp: don't reference 3rd party commands for `git show`...
r35739 cmd.append('-r .')
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732 elif len(args) > 0:
if ispath(repo, args[0]):
Gregory Szorc
githelp: don't reference 3rd party commands for `git show`...
r35739 cmd = Command('cat')
else:
cmd = Command('export')
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732 cmd.extend(args)
if opts.get('unified'):
cmd.append('--config diff.unified=%d' % (opts['unified'],))
elif opts.get('unified'):
Gregory Szorc
githelp: don't reference 3rd party commands for `git show`...
r35739 cmd = Command('export')
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732 cmd.append('--config diff.unified=%d' % (opts['unified'],))
Gregory Szorc
githelp: don't reference 3rd party commands for `git show`...
r35739 else:
cmd = Command('export')
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
Gregory Szorc
githelp: cast commands to bytes...
r36248 ui.status((bytes(cmd)), "\n")
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
def stash(ui, repo, *args, **kwargs):
cmdoptions = [
]
args, opts = parseoptions(ui, cmdoptions, args)
cmd = Command('shelve')
action = args[0] if len(args) > 0 else None
if action == 'list':
cmd['-l'] = None
elif action == 'drop':
cmd['-d'] = None
if len(args) > 1:
cmd.append(args[1])
else:
cmd.append('<shelve name>')
elif action == 'pop' or action == 'apply':
cmd = Command('unshelve')
if len(args) > 1:
cmd.append(args[1])
if action == 'apply':
cmd['--keep'] = None
elif (action == 'branch' or action == 'show' or action == 'clear'
or action == 'create'):
Yuya Nishihara
githelp: do not concatenate i18n messages dynamically so they can be collected
r38143 ui.status(_("note: Mercurial doesn't have equivalents to the "
Matt Harbison
githelp: drop the trailing period from single sentence output for consistency...
r38159 "git stash branch, show, clear, or create actions\n\n"))
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732 return
else:
if len(args) > 0:
if args[0] != 'save':
cmd['--name'] = args[0]
elif len(args) > 1:
cmd['--name'] = args[1]
Gregory Szorc
githelp: cast commands to bytes...
r36248 ui.status((bytes(cmd)), "\n")
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
def status(ui, repo, *args, **kwargs):
cmdoptions = [
('', 'ignored', None, ''),
]
args, opts = parseoptions(ui, cmdoptions, args)
cmd = Command('status')
cmd.extend(args)
if opts.get('ignored'):
cmd['-i'] = None
Gregory Szorc
githelp: cast commands to bytes...
r36248 ui.status((bytes(cmd)), "\n")
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
def svn(ui, repo, *args, **kwargs):
Matt Harbison
githelp: fail gracefully in a couple cases where arguments are missing...
r38130 if not args:
raise error.Abort(_('missing svn command'))
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732 svncmd = args[0]
Matt Harbison
githelp: rewrite a Yoda conditional
r38133 if svncmd not in gitsvncommands:
Matt Harbison
githelp: cleanly abort if the `svn` command is unknown...
r38131 raise error.Abort(_('unknown git svn command "%s"') % (svncmd))
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
args = args[1:]
return gitsvncommands[svncmd](ui, repo, *args, **kwargs)
def svndcommit(ui, repo, *args, **kwargs):
cmdoptions = [
]
args, opts = parseoptions(ui, cmdoptions, args)
cmd = Command('push')
Gregory Szorc
githelp: cast commands to bytes...
r36248 ui.status((bytes(cmd)), "\n")
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
def svnfetch(ui, repo, *args, **kwargs):
cmdoptions = [
]
args, opts = parseoptions(ui, cmdoptions, args)
cmd = Command('pull')
cmd.append('default-push')
Gregory Szorc
githelp: cast commands to bytes...
r36248 ui.status((bytes(cmd)), "\n")
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
def svnfindrev(ui, repo, *args, **kwargs):
cmdoptions = [
]
args, opts = parseoptions(ui, cmdoptions, args)
Matt Harbison
githelp: fail gracefully in a couple cases where arguments are missing...
r38130 if not args:
raise error.Abort(_('missing find-rev argument'))
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732 cmd = Command('log')
cmd['-r'] = args[0]
Gregory Szorc
githelp: cast commands to bytes...
r36248 ui.status((bytes(cmd)), "\n")
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
def svnrebase(ui, repo, *args, **kwargs):
cmdoptions = [
('l', 'local', None, ''),
]
args, opts = parseoptions(ui, cmdoptions, args)
pullcmd = Command('pull')
pullcmd.append('default-push')
rebasecmd = Command('rebase')
rebasecmd.append('tip')
cmd = pullcmd & rebasecmd
Gregory Szorc
githelp: cast commands to bytes...
r36248 ui.status((bytes(cmd)), "\n")
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
def tag(ui, repo, *args, **kwargs):
cmdoptions = [
('f', 'force', None, ''),
('l', 'list', None, ''),
('d', 'delete', None, ''),
]
args, opts = parseoptions(ui, cmdoptions, args)
if opts.get('list'):
cmd = Command('tags')
else:
cmd = Command('tag')
Matt Harbison
githelp: fail gracefully in a couple cases where arguments are missing...
r38130
if not args:
raise error.Abort(_('missing tag argument'))
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732 cmd.append(args[0])
if len(args) > 1:
cmd['-r'] = args[1]
if opts.get('delete'):
cmd['--remove'] = None
if opts.get('force'):
cmd['-f'] = None
Gregory Szorc
githelp: cast commands to bytes...
r36248 ui.status((bytes(cmd)), "\n")
Gregory Szorc
githelp: vendor Facebook authored extension...
r35732
gitcommands = {
'add': add,
'am': am,
'apply': apply,
'bisect': bisect,
'blame': blame,
'branch': branch,
'checkout': checkout,
'cherry-pick': cherrypick,
'clean': clean,
'clone': clone,
'commit': commit,
'diff': diff,
'difftool': difftool,
'fetch': fetch,
'grep': grep,
'init': init,
'log': log,
'ls-files': lsfiles,
'merge': merge,
'merge-base': mergebase,
'mergetool': mergetool,
'mv': mv,
'pull': pull,
'push': push,
'rebase': rebase,
'reflog': reflog,
'reset': reset,
'revert': revert,
'rev-parse': revparse,
'rm': rm,
'show': show,
'stash': stash,
'status': status,
'svn': svn,
'tag': tag,
'whatchanged': deprecated,
}
gitsvncommands = {
'dcommit': svndcommit,
'fetch': svnfetch,
'find-rev': svnfindrev,
'rebase': svnrebase,
}