Mercurial > hg
annotate hgext/show.py @ 36523:e7411fb7ba7f
wireprotoserver: ability to run an SSH server until an event is set
It seems useful to be able to start an SSH protocol server that
won't run forever and won't call sys.exit() when it stops. This
could be used to facilitate intra-process testing of the SSH
protocol, for example.
We teach the server function to loop until a threading.Event is set
and invent a new API to run the server until an event is set. It also
won't sys.exit() afterwards.
There aren't many callers of serve_forever(). So we could refactor
them relatively easily. But I was lazy.
threading.Event might be a bit heavyweight. An alternative would be
a list whose only elements is changed. We can't use a simple scalar
value like a bool or int because those types are immutable. Events
are what you use in systems programming for this use case, so the
use of threading.Event seems justified.
Differential Revision: https://phab.mercurial-scm.org/D2461
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Sat, 24 Feb 2018 12:07:21 -0800 |
parents | e3674c2a585c |
children | 317382151ac3 |
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. |
33137
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
13 |
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
14 The following config options can influence operation. |
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
15 |
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
16 ``commands`` |
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
17 ------------ |
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
18 |
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
19 ``show.aliasprefix`` |
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
20 List of strings that will register aliases for views. e.g. ``s`` will |
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
21 effectively set config options ``alias.s<view> = show <view>`` for all |
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
22 views. i.e. `hg swork` would execute `hg show work`. |
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
23 |
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
24 Aliases that would conflict with existing registrations will not be |
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
25 performed. |
31765
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
26 """ |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
27 |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
28 from __future__ import absolute_import |
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 from mercurial.i18n import _ |
35498
dfaf9f10e2e5
show: use revlog function to compute length of the longest shortest node
Yuya Nishihara <yuya@tcha.org>
parents:
35469
diff
changeset
|
31 from mercurial.node import ( |
dfaf9f10e2e5
show: use revlog function to compute length of the longest shortest node
Yuya Nishihara <yuya@tcha.org>
parents:
35469
diff
changeset
|
32 hex, |
dfaf9f10e2e5
show: use revlog function to compute length of the longest shortest node
Yuya Nishihara <yuya@tcha.org>
parents:
35469
diff
changeset
|
33 nullrev, |
dfaf9f10e2e5
show: use revlog function to compute length of the longest shortest node
Yuya Nishihara <yuya@tcha.org>
parents:
35469
diff
changeset
|
34 ) |
31765
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
35 from mercurial import ( |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
36 cmdutil, |
33137
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
37 commands, |
33197
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
38 destutil, |
31765
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
39 error, |
31859
8e282aa3c3ff
show: fix corrupt json output with no bookmarks
Ryan McElroy <rmcelroy@fb.com>
parents:
31858
diff
changeset
|
40 formatter, |
31944
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
41 graphmod, |
35888
c8e2d6ed1f9e
cmdutil: drop aliases for logcmdutil functions (API)
Yuya Nishihara <yuya@tcha.org>
parents:
35498
diff
changeset
|
42 logcmdutil, |
33197
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
43 phases, |
31820
45761ef1bc93
py3: have registrar process docstrings in bytes
Yuya Nishihara <yuya@tcha.org>
parents:
31765
diff
changeset
|
44 pycompat, |
31765
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
45 registrar, |
31944
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
46 revset, |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
47 revsetlang, |
31765
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 |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
50 # 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
|
51 # 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
|
52 # 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
|
53 # leave the attribute unspecified. |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
54 testedwith = 'ships-with-hg-core' |
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 cmdtable = {} |
32337
46ba2cdda476
registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32291
diff
changeset
|
57 command = registrar.command(cmdtable) |
34518
592a3cc1ebc4
configitems: register the 'commands.show.aliasprefix' config
Boris Feld <boris.feld@octobus.net>
parents:
34191
diff
changeset
|
58 |
31944
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
59 revsetpredicate = registrar.revsetpredicate() |
31765
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
60 |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
61 class showcmdfunc(registrar._funcregistrarbase): |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
62 """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
|
63 |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
64 # Used by _formatdoc(). |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
65 _docformat = '%s -- %s' |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
66 |
33046
11f768258dcc
show: construct changeset templater during dispatch
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32837
diff
changeset
|
67 def _extrasetup(self, name, func, fmtopic=None, csettopic=None): |
31765
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
68 """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
|
69 |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
70 ``name`` is the sub-command name. |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
71 |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
72 ``func`` is the function being decorated. |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
73 |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
74 ``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
|
75 this view. |
33046
11f768258dcc
show: construct changeset templater during dispatch
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32837
diff
changeset
|
76 |
11f768258dcc
show: construct changeset templater during dispatch
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32837
diff
changeset
|
77 ``csettopic`` is the topic in the style to be used for a changeset |
11f768258dcc
show: construct changeset templater during dispatch
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32837
diff
changeset
|
78 printer. |
11f768258dcc
show: construct changeset templater during dispatch
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32837
diff
changeset
|
79 |
11f768258dcc
show: construct changeset templater during dispatch
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32837
diff
changeset
|
80 If ``fmtopic`` is specified, the view function will receive a |
11f768258dcc
show: construct changeset templater during dispatch
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32837
diff
changeset
|
81 formatter instance. If ``csettopic`` is specified, the view |
11f768258dcc
show: construct changeset templater during dispatch
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32837
diff
changeset
|
82 function will receive a changeset printer. |
31765
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 func._fmtopic = fmtopic |
33046
11f768258dcc
show: construct changeset templater during dispatch
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32837
diff
changeset
|
85 func._csettopic = csettopic |
31765
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
86 |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
87 showview = showcmdfunc() |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
88 |
31945
02c3b1f396de
show: make template option actually show up in help
Ryan McElroy <rmcelroy@fb.com>
parents:
31944
diff
changeset
|
89 @command('show', [ |
32375
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32337
diff
changeset
|
90 # TODO: Switch this template flag to use cmdutil.formatteropts if |
31945
02c3b1f396de
show: make template option actually show up in help
Ryan McElroy <rmcelroy@fb.com>
parents:
31944
diff
changeset
|
91 # '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
|
92 # 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
|
93 # 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
|
94 # 'hg show' experience is experimental. |
02c3b1f396de
show: make template option actually show up in help
Ryan McElroy <rmcelroy@fb.com>
parents:
31944
diff
changeset
|
95 ('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
|
96 ], _('VIEW')) |
31765
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
97 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
|
98 """show various repository information |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
99 |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
100 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
|
101 |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
102 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
|
103 command aborts. |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
104 |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
105 .. note:: |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
106 |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
107 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
|
108 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
|
109 |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
110 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
|
111 ``-T/--template``. |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
112 |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
113 List of available views: |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
114 """ |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
115 if ui.plain() and not template: |
31858
ad366d57d574
show: tweak plain abort language for clarity
Ryan McElroy <rmcelroy@fb.com>
parents:
31820
diff
changeset
|
116 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
|
117 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
|
118 |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
119 views = showview._table |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
120 |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
121 if not view: |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
122 ui.pager('show') |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
123 # 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
|
124 # rendered to custom format. |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
125 ui.write(_('available views:\n')) |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
126 ui.write('\n') |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
127 |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
128 for name, func in sorted(views.items()): |
36041
e3674c2a585c
py3: convert __doc__ to bytes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35888
diff
changeset
|
129 ui.write(('%s\n') % pycompat.sysbytes(func.__doc__)) |
31765
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
130 |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
131 ui.write('\n') |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
132 raise error.Abort(_('no view requested'), |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
133 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
|
134 |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
135 # 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
|
136 if view not in views: |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
137 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
|
138 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
|
139 |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
140 template = template or 'show' |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
141 |
33046
11f768258dcc
show: construct changeset templater during dispatch
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32837
diff
changeset
|
142 fn = views[view] |
31765
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
143 ui.pager('show') |
33046
11f768258dcc
show: construct changeset templater during dispatch
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32837
diff
changeset
|
144 |
11f768258dcc
show: construct changeset templater during dispatch
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32837
diff
changeset
|
145 if fn._fmtopic: |
11f768258dcc
show: construct changeset templater during dispatch
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32837
diff
changeset
|
146 fmtopic = 'show%s' % fn._fmtopic |
11f768258dcc
show: construct changeset templater during dispatch
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32837
diff
changeset
|
147 with ui.formatter(fmtopic, {'template': template}) as fm: |
11f768258dcc
show: construct changeset templater during dispatch
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32837
diff
changeset
|
148 return fn(ui, repo, fm) |
11f768258dcc
show: construct changeset templater during dispatch
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32837
diff
changeset
|
149 elif fn._csettopic: |
11f768258dcc
show: construct changeset templater during dispatch
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32837
diff
changeset
|
150 ref = 'show%s' % fn._csettopic |
11f768258dcc
show: construct changeset templater during dispatch
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32837
diff
changeset
|
151 spec = formatter.lookuptemplate(ui, ref, template) |
35888
c8e2d6ed1f9e
cmdutil: drop aliases for logcmdutil functions (API)
Yuya Nishihara <yuya@tcha.org>
parents:
35498
diff
changeset
|
152 displayer = logcmdutil.changesettemplater(ui, repo, spec, buffered=True) |
33046
11f768258dcc
show: construct changeset templater during dispatch
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32837
diff
changeset
|
153 return fn(ui, repo, displayer) |
11f768258dcc
show: construct changeset templater during dispatch
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32837
diff
changeset
|
154 else: |
11f768258dcc
show: construct changeset templater during dispatch
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32837
diff
changeset
|
155 return fn(ui, repo) |
31765
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
156 |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
157 @showview('bookmarks', fmtopic='bookmarks') |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
158 def showbookmarks(ui, repo, fm): |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
159 """bookmarks and their associated changeset""" |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
160 marks = repo._bookmarks |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
161 if not len(marks): |
31859
8e282aa3c3ff
show: fix corrupt json output with no bookmarks
Ryan McElroy <rmcelroy@fb.com>
parents:
31858
diff
changeset
|
162 # 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
|
163 # 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
|
164 # waiting for this functionality. |
8e282aa3c3ff
show: fix corrupt json output with no bookmarks
Ryan McElroy <rmcelroy@fb.com>
parents:
31858
diff
changeset
|
165 if not isinstance(fm, formatter.jsonformatter): |
8e282aa3c3ff
show: fix corrupt json output with no bookmarks
Ryan McElroy <rmcelroy@fb.com>
parents:
31858
diff
changeset
|
166 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
|
167 return |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
168 |
34191
e6b5e7329ff2
show: use consistent (and possibly shorter) node lengths
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34190
diff
changeset
|
169 revs = [repo[node].rev() for node in marks.values()] |
31765
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
170 active = repo._activebookmark |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
171 longestname = max(len(b) for b in marks) |
34191
e6b5e7329ff2
show: use consistent (and possibly shorter) node lengths
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34190
diff
changeset
|
172 nodelen = longestshortest(repo, revs) |
31765
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
173 |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
174 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
|
175 fm.startitem() |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
176 fm.context(ctx=repo[node]) |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
177 fm.write('bookmark', '%s', bm) |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
178 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
|
179 fm.data(active=bm == active, |
34190
4441c1113eb2
show: pass the minimum length for nodes as a template keyword
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33211
diff
changeset
|
180 longestbookmarklen=longestname, |
34191
e6b5e7329ff2
show: use consistent (and possibly shorter) node lengths
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34190
diff
changeset
|
181 nodelen=nodelen) |
31765
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
182 |
33197
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
183 @showview('stack', csettopic='stack') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
184 def showstack(ui, repo, displayer): |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
185 """current line of work""" |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
186 wdirctx = repo['.'] |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
187 if wdirctx.rev() == nullrev: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
188 raise error.Abort(_('stack view only available when there is a ' |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
189 'working directory')) |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
190 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
191 if wdirctx.phase() == phases.public: |
33208
9e7efe421395
show: tweak warning message
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33197
diff
changeset
|
192 ui.write(_('(empty stack; working directory parent is a published ' |
33197
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
193 'changeset)\n')) |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
194 return |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
195 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
196 # TODO extract "find stack" into a function to facilitate |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
197 # customization and reuse. |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
198 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
199 baserev = destutil.stackbase(ui, repo) |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
200 basectx = None |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
201 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
202 if baserev is None: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
203 baserev = wdirctx.rev() |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
204 stackrevs = {wdirctx.rev()} |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
205 else: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
206 stackrevs = set(repo.revs('%d::.', baserev)) |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
207 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
208 ctx = repo[baserev] |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
209 if ctx.p1().rev() != nullrev: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
210 basectx = ctx.p1() |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
211 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
212 # And relevant descendants. |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
213 branchpointattip = False |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
214 cl = repo.changelog |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
215 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
216 for rev in cl.descendants([wdirctx.rev()]): |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
217 ctx = repo[rev] |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
218 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
219 # Will only happen if . is public. |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
220 if ctx.phase() == phases.public: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
221 break |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
222 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
223 stackrevs.add(ctx.rev()) |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
224 |
33211
f48422ab81aa
show: document why accidentally quadratic is (probably) acceptable
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33210
diff
changeset
|
225 # ctx.children() within a function iterating on descandants |
f48422ab81aa
show: document why accidentally quadratic is (probably) acceptable
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33210
diff
changeset
|
226 # potentially has severe performance concerns because revlog.children() |
f48422ab81aa
show: document why accidentally quadratic is (probably) acceptable
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33210
diff
changeset
|
227 # iterates over all revisions after ctx's node. However, the number of |
f48422ab81aa
show: document why accidentally quadratic is (probably) acceptable
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33210
diff
changeset
|
228 # draft changesets should be a reasonably small number. So even if |
f48422ab81aa
show: document why accidentally quadratic is (probably) acceptable
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33210
diff
changeset
|
229 # this is quadratic, the perf impact should be minimal. |
33197
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
230 if len(ctx.children()) > 1: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
231 branchpointattip = True |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
232 break |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
233 |
33209
9718725dc02a
show: avoid extra list operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33208
diff
changeset
|
234 stackrevs = list(sorted(stackrevs, reverse=True)) |
33197
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
235 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
236 # Find likely target heads for the current stack. These are likely |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
237 # merge or rebase targets. |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
238 if basectx: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
239 # TODO make this customizable? |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
240 newheads = set(repo.revs('heads(%d::) - %ld - not public()', |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
241 basectx.rev(), stackrevs)) |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
242 else: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
243 newheads = set() |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
244 |
34191
e6b5e7329ff2
show: use consistent (and possibly shorter) node lengths
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34190
diff
changeset
|
245 allrevs = set(stackrevs) | newheads | set([baserev]) |
e6b5e7329ff2
show: use consistent (and possibly shorter) node lengths
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34190
diff
changeset
|
246 nodelen = longestshortest(repo, allrevs) |
e6b5e7329ff2
show: use consistent (and possibly shorter) node lengths
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34190
diff
changeset
|
247 |
33197
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
248 try: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
249 cmdutil.findcmd('rebase', commands.table) |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
250 haverebase = True |
33210
b93df142485e
show: also catch AmbiguousCommand
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33209
diff
changeset
|
251 except (error.AmbiguousCommand, error.UnknownCommand): |
33197
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
252 haverebase = False |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
253 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
254 # TODO use templating. |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
255 # TODO consider using graphmod. But it may not be necessary given |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
256 # our simplicity and the customizations required. |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
257 # TODO use proper graph symbols from graphmod |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
258 |
35469
f1c54d003327
templater: move repo, ui and cache to per-engine resources
Yuya Nishihara <yuya@tcha.org>
parents:
34888
diff
changeset
|
259 tres = formatter.templateresources(ui, repo) |
f1c54d003327
templater: move repo, ui and cache to per-engine resources
Yuya Nishihara <yuya@tcha.org>
parents:
34888
diff
changeset
|
260 shortesttmpl = formatter.maketemplater(ui, '{shortest(node, %d)}' % nodelen, |
f1c54d003327
templater: move repo, ui and cache to per-engine resources
Yuya Nishihara <yuya@tcha.org>
parents:
34888
diff
changeset
|
261 resources=tres) |
33197
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
262 def shortest(ctx): |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
263 return shortesttmpl.render({'ctx': ctx, 'node': ctx.hex()}) |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
264 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
265 # We write out new heads to aid in DAG awareness and to help with decision |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
266 # making on how the stack should be reconciled with commits made since the |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
267 # branch point. |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
268 if newheads: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
269 # Calculate distance from base so we can render the count and so we can |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
270 # sort display order by commit distance. |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
271 revdistance = {} |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
272 for head in newheads: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
273 # There is some redundancy in DAG traversal here and therefore |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
274 # room to optimize. |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
275 ancestors = cl.ancestors([head], stoprev=basectx.rev()) |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
276 revdistance[head] = len(list(ancestors)) |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
277 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
278 sourcectx = repo[stackrevs[-1]] |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
279 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
280 sortedheads = sorted(newheads, key=lambda x: revdistance[x], |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
281 reverse=True) |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
282 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
283 for i, rev in enumerate(sortedheads): |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
284 ctx = repo[rev] |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
285 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
286 if i: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
287 ui.write(': ') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
288 else: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
289 ui.write(' ') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
290 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
291 ui.write(('o ')) |
34191
e6b5e7329ff2
show: use consistent (and possibly shorter) node lengths
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34190
diff
changeset
|
292 displayer.show(ctx, nodelen=nodelen) |
33197
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
293 displayer.flush(ctx) |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
294 ui.write('\n') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
295 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
296 if i: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
297 ui.write(':/') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
298 else: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
299 ui.write(' /') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
300 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
301 ui.write(' (') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
302 ui.write(_('%d commits ahead') % revdistance[rev], |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
303 label='stack.commitdistance') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
304 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
305 if haverebase: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
306 # TODO may be able to omit --source in some scenarios |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
307 ui.write('; ') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
308 ui.write(('hg rebase --source %s --dest %s' % ( |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
309 shortest(sourcectx), shortest(ctx))), |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
310 label='stack.rebasehint') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
311 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
312 ui.write(')\n') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
313 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
314 ui.write(':\n: ') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
315 ui.write(_('(stack head)\n'), label='stack.label') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
316 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
317 if branchpointattip: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
318 ui.write(' \\ / ') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
319 ui.write(_('(multiple children)\n'), label='stack.label') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
320 ui.write(' |\n') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
321 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
322 for rev in stackrevs: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
323 ctx = repo[rev] |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
324 symbol = '@' if rev == wdirctx.rev() else 'o' |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
325 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
326 if newheads: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
327 ui.write(': ') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
328 else: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
329 ui.write(' ') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
330 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
331 ui.write(symbol, ' ') |
34191
e6b5e7329ff2
show: use consistent (and possibly shorter) node lengths
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34190
diff
changeset
|
332 displayer.show(ctx, nodelen=nodelen) |
33197
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
333 displayer.flush(ctx) |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
334 ui.write('\n') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
335 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
336 # TODO display histedit hint? |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
337 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
338 if basectx: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
339 # Vertically and horizontally separate stack base from parent |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
340 # to reinforce stack boundary. |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
341 if newheads: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
342 ui.write(':/ ') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
343 else: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
344 ui.write(' / ') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
345 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
346 ui.write(_('(stack base)'), '\n', label='stack.label') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
347 ui.write(('o ')) |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
348 |
34191
e6b5e7329ff2
show: use consistent (and possibly shorter) node lengths
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34190
diff
changeset
|
349 displayer.show(basectx, nodelen=nodelen) |
33197
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
350 displayer.flush(basectx) |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
351 ui.write('\n') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
352 |
31944
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
353 @revsetpredicate('_underway([commitage[, headage]])') |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
354 def underwayrevset(repo, subset, x): |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
355 args = revset.getargsdict(x, 'underway', 'commitage headage') |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
356 if 'commitage' not in args: |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
357 args['commitage'] = None |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
358 if 'headage' not in args: |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
359 args['headage'] = None |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
360 |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
361 # 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
|
362 # 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
|
363 # since the topographical sort needs to consume all revs. |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
364 # |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
365 # 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
|
366 # a complex revset. This enables faster execution. |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
367 |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
368 # Mutable changesets (non-public) are the most important changesets |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
369 # 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
|
370 # 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
|
371 # why we exclude obsolete changesets from this query. |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
372 rs = 'not public() and not obsolete()' |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
373 rsargs = [] |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
374 if args['commitage']: |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
375 rs += ' and date(%s)' |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
376 rsargs.append(revsetlang.getstring(args['commitage'], |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
377 _('commitage requires a string'))) |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
378 |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
379 mutable = repo.revs(rs, *rsargs) |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
380 relevant = revset.baseset(mutable) |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
381 |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
382 # Add parents of mutable changesets to provide context. |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
383 relevant += repo.revs('parents(%ld)', mutable) |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
384 |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
385 # 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
|
386 # b) are recent. |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
387 rs = 'head() and not closed()' |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
388 rsargs = [] |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
389 if args['headage']: |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
390 rs += ' and date(%s)' |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
391 rsargs.append(revsetlang.getstring(args['headage'], |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
392 _('headage requires a string'))) |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
393 |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
394 relevant += repo.revs(rs, *rsargs) |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
395 |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
396 # Add working directory parent. |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
397 wdirrev = repo['.'].rev() |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
398 if wdirrev != nullrev: |
32291
bd872f64a8ba
cleanup: use set literals
Martin von Zweigbergk <martinvonz@google.com>
parents:
32058
diff
changeset
|
399 relevant += revset.baseset({wdirrev}) |
31944
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
400 |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
401 return subset & relevant |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
402 |
33046
11f768258dcc
show: construct changeset templater during dispatch
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32837
diff
changeset
|
403 @showview('work', csettopic='work') |
11f768258dcc
show: construct changeset templater during dispatch
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32837
diff
changeset
|
404 def showwork(ui, repo, displayer): |
31944
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
405 """changesets that aren't finished""" |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
406 # TODO support date-based limiting when calling revset. |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
407 revs = repo.revs('sort(_underway(), topo)') |
34191
e6b5e7329ff2
show: use consistent (and possibly shorter) node lengths
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34190
diff
changeset
|
408 nodelen = longestshortest(repo, revs) |
31944
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
409 |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
410 revdag = graphmod.dagwalker(repo, revs) |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
411 |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
412 ui.setconfig('experimental', 'graphshorten', True) |
35888
c8e2d6ed1f9e
cmdutil: drop aliases for logcmdutil functions (API)
Yuya Nishihara <yuya@tcha.org>
parents:
35498
diff
changeset
|
413 logcmdutil.displaygraph(ui, repo, revdag, displayer, graphmod.asciiedges, |
c8e2d6ed1f9e
cmdutil: drop aliases for logcmdutil functions (API)
Yuya Nishihara <yuya@tcha.org>
parents:
35498
diff
changeset
|
414 props={'nodelen': nodelen}) |
31944
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
415 |
33137
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
416 def extsetup(ui): |
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
417 # Alias `hg <prefix><view>` to `hg show <view>`. |
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
418 for prefix in ui.configlist('commands', 'show.aliasprefix'): |
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
419 for view in showview._table: |
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
420 name = '%s%s' % (prefix, view) |
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
421 |
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
422 choice, allcommands = cmdutil.findpossible(name, commands.table, |
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
423 strict=True) |
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
424 |
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
425 # This alias is already a command name. Don't set it. |
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
426 if name in choice: |
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
427 continue |
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
428 |
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
429 # Same for aliases. |
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
430 if ui.config('alias', name): |
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
431 continue |
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
432 |
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
433 ui.setconfig('alias', name, 'show %s' % view, source='show') |
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
434 |
34191
e6b5e7329ff2
show: use consistent (and possibly shorter) node lengths
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34190
diff
changeset
|
435 def longestshortest(repo, revs, minlen=4): |
e6b5e7329ff2
show: use consistent (and possibly shorter) node lengths
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34190
diff
changeset
|
436 """Return the length of the longest shortest node to identify revisions. |
e6b5e7329ff2
show: use consistent (and possibly shorter) node lengths
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34190
diff
changeset
|
437 |
e6b5e7329ff2
show: use consistent (and possibly shorter) node lengths
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34190
diff
changeset
|
438 The result of this function can be used with the ``shortest()`` template |
e6b5e7329ff2
show: use consistent (and possibly shorter) node lengths
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34190
diff
changeset
|
439 function to ensure that a value is unique and unambiguous for a given |
e6b5e7329ff2
show: use consistent (and possibly shorter) node lengths
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34190
diff
changeset
|
440 set of nodes. |
e6b5e7329ff2
show: use consistent (and possibly shorter) node lengths
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34190
diff
changeset
|
441 |
e6b5e7329ff2
show: use consistent (and possibly shorter) node lengths
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34190
diff
changeset
|
442 The number of revisions in the repo is taken into account to prevent |
e6b5e7329ff2
show: use consistent (and possibly shorter) node lengths
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34190
diff
changeset
|
443 a numeric node prefix from conflicting with an integer revision number. |
e6b5e7329ff2
show: use consistent (and possibly shorter) node lengths
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34190
diff
changeset
|
444 If we fail to do this, a value of e.g. ``10023`` could mean either |
e6b5e7329ff2
show: use consistent (and possibly shorter) node lengths
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34190
diff
changeset
|
445 revision 10023 or node ``10023abc...``. |
e6b5e7329ff2
show: use consistent (and possibly shorter) node lengths
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34190
diff
changeset
|
446 """ |
35498
dfaf9f10e2e5
show: use revlog function to compute length of the longest shortest node
Yuya Nishihara <yuya@tcha.org>
parents:
35469
diff
changeset
|
447 if not revs: |
dfaf9f10e2e5
show: use revlog function to compute length of the longest shortest node
Yuya Nishihara <yuya@tcha.org>
parents:
35469
diff
changeset
|
448 return minlen |
dfaf9f10e2e5
show: use revlog function to compute length of the longest shortest node
Yuya Nishihara <yuya@tcha.org>
parents:
35469
diff
changeset
|
449 # don't use filtered repo because it's slow. see templater.shortest(). |
dfaf9f10e2e5
show: use revlog function to compute length of the longest shortest node
Yuya Nishihara <yuya@tcha.org>
parents:
35469
diff
changeset
|
450 cl = repo.unfiltered().changelog |
dfaf9f10e2e5
show: use revlog function to compute length of the longest shortest node
Yuya Nishihara <yuya@tcha.org>
parents:
35469
diff
changeset
|
451 return max(len(cl.shortest(hex(cl.node(r)), minlen)) for r in revs) |
34191
e6b5e7329ff2
show: use consistent (and possibly shorter) node lengths
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34190
diff
changeset
|
452 |
31765
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
453 # 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
|
454 # 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
|
455 # 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
|
456 # to do this more robustly. |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
457 # TODO make this more robust. |
31943
3e9f118cc834
show: fix formatting of multiple commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31859
diff
changeset
|
458 def _updatedocstring(): |
3e9f118cc834
show: fix formatting of multiple commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31859
diff
changeset
|
459 longest = max(map(len, showview._table.keys())) |
3e9f118cc834
show: fix formatting of multiple commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31859
diff
changeset
|
460 entries = [] |
3e9f118cc834
show: fix formatting of multiple commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31859
diff
changeset
|
461 for key in sorted(showview._table.keys()): |
3e9f118cc834
show: fix formatting of multiple commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31859
diff
changeset
|
462 entries.append(pycompat.sysstr(' %s %s' % ( |
3e9f118cc834
show: fix formatting of multiple commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31859
diff
changeset
|
463 key.ljust(longest), showview._table[key]._origdoc))) |
3e9f118cc834
show: fix formatting of multiple commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31859
diff
changeset
|
464 |
3e9f118cc834
show: fix formatting of multiple commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31859
diff
changeset
|
465 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
|
466 cmdtable['show'][0].__doc__.rstrip(), |
3e9f118cc834
show: fix formatting of multiple commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31859
diff
changeset
|
467 pycompat.sysstr('\n\n').join(entries)) |
3e9f118cc834
show: fix formatting of multiple commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31859
diff
changeset
|
468 |
3e9f118cc834
show: fix formatting of multiple commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31859
diff
changeset
|
469 _updatedocstring() |