annotate hgext/show.py @ 32337:46ba2cdda476

registrar: move cmdutil.command to registrar module (API) cmdutil.command wasn't a member of the registrar framework only for a historical reason. Let's make that happen. This patch keeps cmdutil.command as an alias for extension compatibility.
author Yuya Nishihara <yuya@tcha.org>
date Sat, 09 Jan 2016 23:07:20 +0900
parents bd872f64a8ba
children 04baab18d60a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
31765
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
1 # show.py - Extension implementing `hg show`
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
2 #
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
3 # Copyright 2017 Gregory Szorc <gregory.szorc@gmail.com>
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
4 #
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
5 # This software may be used and distributed according to the terms of the
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
6 # GNU General Public License version 2 or any later version.
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
7
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
8 """unified command to show various repository information (EXPERIMENTAL)
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
9
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
10 This extension provides the :hg:`show` command, which provides a central
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
11 command for displaying commonly-accessed repository data and views of that
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
12 data.
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
13 """
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
14
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
15 from __future__ import absolute_import
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
16
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
17 from mercurial.i18n import _
31944
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
18 from mercurial.node import nullrev
31765
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
19 from mercurial import (
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
20 cmdutil,
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
21 error,
31859
8e282aa3c3ff show: fix corrupt json output with no bookmarks
Ryan McElroy <rmcelroy@fb.com>
parents: 31858
diff changeset
22 formatter,
31944
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
23 graphmod,
31820
45761ef1bc93 py3: have registrar process docstrings in bytes
Yuya Nishihara <yuya@tcha.org>
parents: 31765
diff changeset
24 pycompat,
31765
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
25 registrar,
31944
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
26 revset,
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
27 revsetlang,
31765
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
28 )
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
29
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
30 # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
31 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
32 # be specifying the version(s) of Mercurial they are tested with, or
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
33 # leave the attribute unspecified.
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
34 testedwith = 'ships-with-hg-core'
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
35
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
36 cmdtable = {}
32337
46ba2cdda476 registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32291
diff changeset
37 command = registrar.command(cmdtable)
31944
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
38 revsetpredicate = registrar.revsetpredicate()
31765
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
39
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
40 class showcmdfunc(registrar._funcregistrarbase):
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
41 """Register a function to be invoked for an `hg show <thing>`."""
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
42
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
43 # Used by _formatdoc().
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
44 _docformat = '%s -- %s'
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
45
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
46 def _extrasetup(self, name, func, fmtopic=None):
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
47 """Called with decorator arguments to register a show view.
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
48
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
49 ``name`` is the sub-command name.
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
50
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
51 ``func`` is the function being decorated.
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
52
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
53 ``fmtopic`` is the topic in the style that will be rendered for
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
54 this view.
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
55 """
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
56 func._fmtopic = fmtopic
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
57
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
58 showview = showcmdfunc()
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
59
31945
02c3b1f396de show: make template option actually show up in help
Ryan McElroy <rmcelroy@fb.com>
parents: 31944
diff changeset
60 @command('show', [
02c3b1f396de show: make template option actually show up in help
Ryan McElroy <rmcelroy@fb.com>
parents: 31944
diff changeset
61 # TODO: Switch this template flag to use commands.formatteropts if
02c3b1f396de show: make template option actually show up in help
Ryan McElroy <rmcelroy@fb.com>
parents: 31944
diff changeset
62 # 'hg show' becomes stable before --template/-T is stable. For now,
02c3b1f396de show: make template option actually show up in help
Ryan McElroy <rmcelroy@fb.com>
parents: 31944
diff changeset
63 # we are putting it here without the '(EXPERIMENTAL)' flag because it
02c3b1f396de show: make template option actually show up in help
Ryan McElroy <rmcelroy@fb.com>
parents: 31944
diff changeset
64 # is an important part of the 'hg show' user experience and the entire
02c3b1f396de show: make template option actually show up in help
Ryan McElroy <rmcelroy@fb.com>
parents: 31944
diff changeset
65 # 'hg show' experience is experimental.
02c3b1f396de show: make template option actually show up in help
Ryan McElroy <rmcelroy@fb.com>
parents: 31944
diff changeset
66 ('T', 'template', '', ('display with template'), _('TEMPLATE')),
02c3b1f396de show: make template option actually show up in help
Ryan McElroy <rmcelroy@fb.com>
parents: 31944
diff changeset
67 ], _('VIEW'))
31765
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
68 def show(ui, repo, view=None, template=None):
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
69 """show various repository information
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
70
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
71 A requested view of repository data is displayed.
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
72
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
73 If no view is requested, the list of available views is shown and the
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
74 command aborts.
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
75
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
76 .. note::
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
77
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
78 There are no backwards compatibility guarantees for the output of this
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
79 command. Output may change in any future Mercurial release.
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
80
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
81 Consumers wanting stable command output should specify a template via
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
82 ``-T/--template``.
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
83
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
84 List of available views:
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
85 """
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
86 if ui.plain() and not template:
31858
ad366d57d574 show: tweak plain abort language for clarity
Ryan McElroy <rmcelroy@fb.com>
parents: 31820
diff changeset
87 hint = _('invoke with -T/--template to control output format')
ad366d57d574 show: tweak plain abort language for clarity
Ryan McElroy <rmcelroy@fb.com>
parents: 31820
diff changeset
88 raise error.Abort(_('must specify a template in plain mode'), hint=hint)
31765
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
89
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
90 views = showview._table
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
91
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
92 if not view:
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
93 ui.pager('show')
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
94 # TODO consider using formatter here so available views can be
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
95 # rendered to custom format.
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
96 ui.write(_('available views:\n'))
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
97 ui.write('\n')
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
98
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
99 for name, func in sorted(views.items()):
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
100 ui.write(('%s\n') % func.__doc__)
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
101
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
102 ui.write('\n')
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
103 raise error.Abort(_('no view requested'),
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
104 hint=_('use "hg show VIEW" to choose a view'))
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
105
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
106 # TODO use same logic as dispatch to perform prefix matching.
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
107 if view not in views:
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
108 raise error.Abort(_('unknown view: %s') % view,
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
109 hint=_('run "hg show" to see available views'))
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
110
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
111 template = template or 'show'
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
112 fmtopic = 'show%s' % views[view]._fmtopic
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
113
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
114 ui.pager('show')
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
115 with ui.formatter(fmtopic, {'template': template}) as fm:
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
116 return views[view](ui, repo, fm)
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
117
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
118 @showview('bookmarks', fmtopic='bookmarks')
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
119 def showbookmarks(ui, repo, fm):
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
120 """bookmarks and their associated changeset"""
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
121 marks = repo._bookmarks
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
122 if not len(marks):
31859
8e282aa3c3ff show: fix corrupt json output with no bookmarks
Ryan McElroy <rmcelroy@fb.com>
parents: 31858
diff changeset
123 # This is a bit hacky. Ideally, templates would have a way to
8e282aa3c3ff show: fix corrupt json output with no bookmarks
Ryan McElroy <rmcelroy@fb.com>
parents: 31858
diff changeset
124 # specify an empty output, but we shouldn't corrupt JSON while
8e282aa3c3ff show: fix corrupt json output with no bookmarks
Ryan McElroy <rmcelroy@fb.com>
parents: 31858
diff changeset
125 # waiting for this functionality.
8e282aa3c3ff show: fix corrupt json output with no bookmarks
Ryan McElroy <rmcelroy@fb.com>
parents: 31858
diff changeset
126 if not isinstance(fm, formatter.jsonformatter):
8e282aa3c3ff show: fix corrupt json output with no bookmarks
Ryan McElroy <rmcelroy@fb.com>
parents: 31858
diff changeset
127 ui.write(_('(no bookmarks set)\n'))
31765
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
128 return
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
129
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
130 active = repo._activebookmark
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
131 longestname = max(len(b) for b in marks)
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
132 # TODO consider exposing longest shortest(node).
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
133
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
134 for bm, node in sorted(marks.items()):
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
135 fm.startitem()
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
136 fm.context(ctx=repo[node])
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
137 fm.write('bookmark', '%s', bm)
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
138 fm.write('node', fm.hexfunc(node), fm.hexfunc(node))
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
139 fm.data(active=bm == active,
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
140 longestbookmarklen=longestname)
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
141
31944
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
142 @revsetpredicate('_underway([commitage[, headage]])')
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
143 def underwayrevset(repo, subset, x):
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
144 args = revset.getargsdict(x, 'underway', 'commitage headage')
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
145 if 'commitage' not in args:
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
146 args['commitage'] = None
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
147 if 'headage' not in args:
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
148 args['headage'] = None
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
149
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
150 # We assume callers of this revset add a topographical sort on the
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
151 # result. This means there is no benefit to making the revset lazy
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
152 # since the topographical sort needs to consume all revs.
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
153 #
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
154 # With this in mind, we build up the set manually instead of constructing
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
155 # a complex revset. This enables faster execution.
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
156
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
157 # Mutable changesets (non-public) are the most important changesets
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
158 # to return. ``not public()`` will also pull in obsolete changesets if
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
159 # there is a non-obsolete changeset with obsolete ancestors. This is
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
160 # why we exclude obsolete changesets from this query.
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
161 rs = 'not public() and not obsolete()'
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
162 rsargs = []
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
163 if args['commitage']:
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
164 rs += ' and date(%s)'
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
165 rsargs.append(revsetlang.getstring(args['commitage'],
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
166 _('commitage requires a string')))
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
167
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
168 mutable = repo.revs(rs, *rsargs)
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
169 relevant = revset.baseset(mutable)
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
170
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
171 # Add parents of mutable changesets to provide context.
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
172 relevant += repo.revs('parents(%ld)', mutable)
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
173
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
174 # We also pull in (public) heads if they a) aren't closing a branch
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
175 # b) are recent.
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
176 rs = 'head() and not closed()'
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
177 rsargs = []
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
178 if args['headage']:
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
179 rs += ' and date(%s)'
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
180 rsargs.append(revsetlang.getstring(args['headage'],
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
181 _('headage requires a string')))
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
182
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
183 relevant += repo.revs(rs, *rsargs)
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
184
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
185 # Add working directory parent.
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
186 wdirrev = repo['.'].rev()
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
187 if wdirrev != nullrev:
32291
bd872f64a8ba cleanup: use set literals
Martin von Zweigbergk <martinvonz@google.com>
parents: 32058
diff changeset
188 relevant += revset.baseset({wdirrev})
31944
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
189
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
190 return subset & relevant
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
191
32058
0bb157bebb43 show: rename "underway" to "work"
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31945
diff changeset
192 @showview('work', fmtopic='work')
0bb157bebb43 show: rename "underway" to "work"
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31945
diff changeset
193 def showwork(ui, repo, fm):
31944
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
194 """changesets that aren't finished"""
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
195 # TODO support date-based limiting when calling revset.
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
196 revs = repo.revs('sort(_underway(), topo)')
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
197
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
198 revdag = graphmod.dagwalker(repo, revs)
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
199 displayer = cmdutil.changeset_templater(ui, repo, None, None,
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
200 tmpl=fm._t.load(fm._topic),
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
201 mapfile=None, buffered=True)
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
202
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
203 ui.setconfig('experimental', 'graphshorten', True)
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
204 cmdutil.displaygraph(ui, repo, revdag, displayer, graphmod.asciiedges)
99bc93147d87 show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31943
diff changeset
205
31765
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
206 # Adjust the docstring of the show command so it shows all registered views.
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
207 # This is a bit hacky because it runs at the end of module load. When moved
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
208 # into core or when another extension wants to provide a view, we'll need
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
209 # to do this more robustly.
264baeef3588 show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
210 # TODO make this more robust.
31943
3e9f118cc834 show: fix formatting of multiple commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31859
diff changeset
211 def _updatedocstring():
3e9f118cc834 show: fix formatting of multiple commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31859
diff changeset
212 longest = max(map(len, showview._table.keys()))
3e9f118cc834 show: fix formatting of multiple commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31859
diff changeset
213 entries = []
3e9f118cc834 show: fix formatting of multiple commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31859
diff changeset
214 for key in sorted(showview._table.keys()):
3e9f118cc834 show: fix formatting of multiple commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31859
diff changeset
215 entries.append(pycompat.sysstr(' %s %s' % (
3e9f118cc834 show: fix formatting of multiple commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31859
diff changeset
216 key.ljust(longest), showview._table[key]._origdoc)))
3e9f118cc834 show: fix formatting of multiple commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31859
diff changeset
217
3e9f118cc834 show: fix formatting of multiple commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31859
diff changeset
218 cmdtable['show'][0].__doc__ = pycompat.sysstr('%s\n\n%s\n ') % (
3e9f118cc834 show: fix formatting of multiple commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31859
diff changeset
219 cmdtable['show'][0].__doc__.rstrip(),
3e9f118cc834 show: fix formatting of multiple commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31859
diff changeset
220 pycompat.sysstr('\n\n').join(entries))
3e9f118cc834 show: fix formatting of multiple commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31859
diff changeset
221
3e9f118cc834 show: fix formatting of multiple commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31859
diff changeset
222 _updatedocstring()