mirror of
https://github.com/facebook/sapling.git
synced 2024-10-09 08:18:15 +03:00
87a6499b5f
Summary: Add a function that returns command and all the default options already initialized. It should be used by commands that call other commands. For example, calling pull inside of update, calling log inside of show etc. getcmdanddefaultopts has important benefits: 1) It returns "wrapped" command i.e. command with all the overrides applied. On the other hand, commands.pull doesn't return it. 2) It correctly initializes options to their default value and correctly changes their name - replace '-' with '_'. Reviewed By: ryanmce Differential Revision: D7193296 fbshipit-source-id: e8673bd4e16aad6156498660f2a7ed788ed2cac3
116 lines
3.6 KiB
Python
116 lines
3.6 KiB
Python
# fbshow.py
|
|
#
|
|
# Copyright 2016 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.
|
|
"""show changesets in detail with full log message, patches etc
|
|
|
|
For example, 'hg show' prints something like
|
|
::
|
|
|
|
$ hg show
|
|
changeset: 1:b73358b94785
|
|
tag: tip
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
files: x
|
|
description:
|
|
longer
|
|
|
|
diff -r 852a8d467a01 -r b73358b94785 x
|
|
--- a/x Thu Jan 01 00:00:00 1970 +0000
|
|
+++ b/x Thu Jan 01 00:00:00 1970 +0000
|
|
@@ -1,1 +1,2 @@
|
|
show
|
|
+more
|
|
|
|
and 'hg show --stat' prints something like:
|
|
|
|
$ hg show --stat
|
|
changeset: 1:b73358b94785
|
|
tag: tip
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
files: x
|
|
description:
|
|
longer
|
|
|
|
x | 1 +
|
|
1 files changed, 1 insertions(+), 0 deletions(-)
|
|
|
|
"""
|
|
|
|
from mercurial.i18n import _
|
|
from mercurial import cmdutil, commands, error, registrar, scmutil
|
|
|
|
cmdtable = {}
|
|
command = registrar.command(cmdtable)
|
|
testedwith = 'ships-with-fb-hgext'
|
|
|
|
def uisetup(ui):
|
|
permitted_opts = [
|
|
('g', 'git', None, _('use git extended diff format')),
|
|
('', 'stat', None, _('output diffstat-style summary of changes')),
|
|
] + commands.templateopts + commands.walkopts
|
|
|
|
local_opts = [
|
|
('', 'nodates', None, _('omit dates from diff headers ' +
|
|
'(but keeps it in commit header)')),
|
|
('', 'noprefix', None, _('omit a/ and b/ prefixes from filenames')),
|
|
('U', 'unified', int, _('number of lines of diff context to show')),
|
|
] + commands.diffwsopts
|
|
|
|
aliases, entry = cmdutil.findcmd('log', commands.table)
|
|
allowed_opts = [opt for opt in entry[1]
|
|
if opt in permitted_opts] + local_opts
|
|
|
|
# manual call of the decorator
|
|
command('^show',
|
|
allowed_opts,
|
|
_('[OPTION]... [REV [FILE]...]'),
|
|
inferrepo=True)(show)
|
|
|
|
def show(ui, repo, *args, **opts):
|
|
"""show revision in detail
|
|
|
|
This behaves similarly to :hg:`log -vp -r REV [OPTION]... [FILE]...`, or
|
|
if called without a REV, :hg:`log -vp -r . [OPTION]...` Use
|
|
:hg:`log` for more powerful operations than supported by hg show
|
|
|
|
See :hg:`help templates` for more about pre-packaged styles and
|
|
specifying custom templates.
|
|
|
|
"""
|
|
ui.pager('show')
|
|
if len(args) == 0:
|
|
opts['rev'] = ['.']
|
|
pats = []
|
|
else:
|
|
opts['rev'] = [args[0]]
|
|
pats = args[1:]
|
|
if not scmutil.revrange(repo, opts['rev']):
|
|
h = _("if %s is a file, try `hg show . %s`") % (args[0], args[0])
|
|
raise error.Abort(_("unknown revision %s") % args[0],
|
|
hint=h)
|
|
|
|
opts['patch'] = not opts['stat']
|
|
opts['verbose'] = True
|
|
|
|
# Copy tracking is slow when doing a git diff. Override hgrc, and rely on
|
|
# opts getting us a git diff if it's been requested. Ideally, we'd find and
|
|
# fix the slowness in copy tracking, but this works for now.
|
|
# On a commit with lots of possible copies, Bryan O'Sullivan found that this
|
|
# reduces "time hg show" from 1.76 seconds to 0.81 seconds.
|
|
overrides = {('diff', 'git'): opts.get('git')
|
|
,('diff', 'unified'): opts.get('unified')
|
|
,('ui', 'verbose'): True}
|
|
overrides.update({('diff', opt): opts.get(opt)
|
|
for opt in commands.diffwsopts})
|
|
|
|
logcmd, defaultlogopts = cmdutil.getcmdanddefaultopts('log', commands.table)
|
|
defaultlogopts.update(opts)
|
|
|
|
with ui.configoverride(overrides, 'show'):
|
|
logcmd(ui, repo, *pats, **defaultlogopts)
|