Mercurial > hg
annotate hgext/show.py @ 40431:8ebb05f747e5 stable
fix: disable use of thread-based worker
getfixes() accesses to repo, changectx, filectx, etc., so I believe there
are code paths triggering data race. Mercurial API isn't thread safe in
general.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Wed, 31 Oct 2018 21:16:54 +0900 |
parents | c303d65d2e34 |
children | 566daffc607d |
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 nullrev, |
dfaf9f10e2e5
show: use revlog function to compute length of the longest shortest node
Yuya Nishihara <yuya@tcha.org>
parents:
35469
diff
changeset
|
33 ) |
31765
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
34 from mercurial import ( |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
35 cmdutil, |
33137
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
36 commands, |
33197
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
37 destutil, |
31765
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
38 error, |
31859
8e282aa3c3ff
show: fix corrupt json output with no bookmarks
Ryan McElroy <rmcelroy@fb.com>
parents:
31858
diff
changeset
|
39 formatter, |
31944
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
40 graphmod, |
35888
c8e2d6ed1f9e
cmdutil: drop aliases for logcmdutil functions (API)
Yuya Nishihara <yuya@tcha.org>
parents:
35498
diff
changeset
|
41 logcmdutil, |
33197
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
42 phases, |
31820
45761ef1bc93
py3: have registrar process docstrings in bytes
Yuya Nishihara <yuya@tcha.org>
parents:
31765
diff
changeset
|
43 pycompat, |
31765
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
44 registrar, |
31944
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
45 revset, |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
46 revsetlang, |
37680
e743b8524d60
scmutil: introduce shortesthexnodeidprefix()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37134
diff
changeset
|
47 scmutil, |
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')), |
40293
c303d65d2e34
help: assigning categories to existing commands
rdamazio@google.com
parents:
37709
diff
changeset
|
96 ], _('VIEW'), |
c303d65d2e34
help: assigning categories to existing commands
rdamazio@google.com
parents:
37709
diff
changeset
|
97 helpcategory=command.CATEGORY_CHANGE_NAVIGATION) |
31765
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
98 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
|
99 """show various repository information |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
100 |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
101 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
|
102 |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
103 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
|
104 command aborts. |
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 .. note:: |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
107 |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
108 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
|
109 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
|
110 |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
111 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
|
112 ``-T/--template``. |
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 List of available views: |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
115 """ |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
116 if ui.plain() and not template: |
31858
ad366d57d574
show: tweak plain abort language for clarity
Ryan McElroy <rmcelroy@fb.com>
parents:
31820
diff
changeset
|
117 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
|
118 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
|
119 |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
120 views = showview._table |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
121 |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
122 if not view: |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
123 ui.pager('show') |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
124 # 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
|
125 # rendered to custom format. |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
126 ui.write(_('available views:\n')) |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
127 ui.write('\n') |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
128 |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
129 for name, func in sorted(views.items()): |
36041
e3674c2a585c
py3: convert __doc__ to bytes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35888
diff
changeset
|
130 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
|
131 |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
132 ui.write('\n') |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
133 raise error.Abort(_('no view requested'), |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
134 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
|
135 |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
136 # 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
|
137 if view not in views: |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
138 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
|
139 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
|
140 |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
141 template = template or 'show' |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
142 |
33046
11f768258dcc
show: construct changeset templater during dispatch
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32837
diff
changeset
|
143 fn = views[view] |
31765
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
144 ui.pager('show') |
33046
11f768258dcc
show: construct changeset templater during dispatch
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32837
diff
changeset
|
145 |
11f768258dcc
show: construct changeset templater during dispatch
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32837
diff
changeset
|
146 if fn._fmtopic: |
11f768258dcc
show: construct changeset templater during dispatch
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32837
diff
changeset
|
147 fmtopic = 'show%s' % fn._fmtopic |
11f768258dcc
show: construct changeset templater during dispatch
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32837
diff
changeset
|
148 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
|
149 return fn(ui, repo, fm) |
11f768258dcc
show: construct changeset templater during dispatch
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32837
diff
changeset
|
150 elif fn._csettopic: |
11f768258dcc
show: construct changeset templater during dispatch
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32837
diff
changeset
|
151 ref = 'show%s' % fn._csettopic |
11f768258dcc
show: construct changeset templater during dispatch
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32837
diff
changeset
|
152 spec = formatter.lookuptemplate(ui, ref, template) |
35888
c8e2d6ed1f9e
cmdutil: drop aliases for logcmdutil functions (API)
Yuya Nishihara <yuya@tcha.org>
parents:
35498
diff
changeset
|
153 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
|
154 return fn(ui, repo, displayer) |
11f768258dcc
show: construct changeset templater during dispatch
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32837
diff
changeset
|
155 else: |
11f768258dcc
show: construct changeset templater during dispatch
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32837
diff
changeset
|
156 return fn(ui, repo) |
31765
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
157 |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
158 @showview('bookmarks', fmtopic='bookmarks') |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
159 def showbookmarks(ui, repo, fm): |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
160 """bookmarks and their associated changeset""" |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
161 marks = repo._bookmarks |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
162 if not len(marks): |
31859
8e282aa3c3ff
show: fix corrupt json output with no bookmarks
Ryan McElroy <rmcelroy@fb.com>
parents:
31858
diff
changeset
|
163 # 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
|
164 # 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
|
165 # waiting for this functionality. |
8e282aa3c3ff
show: fix corrupt json output with no bookmarks
Ryan McElroy <rmcelroy@fb.com>
parents:
31858
diff
changeset
|
166 if not isinstance(fm, formatter.jsonformatter): |
8e282aa3c3ff
show: fix corrupt json output with no bookmarks
Ryan McElroy <rmcelroy@fb.com>
parents:
31858
diff
changeset
|
167 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
|
168 return |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
169 |
34191
e6b5e7329ff2
show: use consistent (and possibly shorter) node lengths
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34190
diff
changeset
|
170 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
|
171 active = repo._activebookmark |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
172 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
|
173 nodelen = longestshortest(repo, revs) |
31765
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
174 |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
175 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
|
176 fm.startitem() |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
177 fm.context(ctx=repo[node]) |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
178 fm.write('bookmark', '%s', bm) |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
179 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
|
180 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
|
181 longestbookmarklen=longestname, |
34191
e6b5e7329ff2
show: use consistent (and possibly shorter) node lengths
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34190
diff
changeset
|
182 nodelen=nodelen) |
31765
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
183 |
33197
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
184 @showview('stack', csettopic='stack') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
185 def showstack(ui, repo, displayer): |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
186 """current line of work""" |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
187 wdirctx = repo['.'] |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
188 if wdirctx.rev() == nullrev: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
189 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
|
190 'working directory')) |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
191 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
192 if wdirctx.phase() == phases.public: |
33208
9e7efe421395
show: tweak warning message
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33197
diff
changeset
|
193 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
|
194 'changeset)\n')) |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
195 return |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
196 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
197 # TODO extract "find stack" into a function to facilitate |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
198 # customization and reuse. |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
199 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
200 baserev = destutil.stackbase(ui, repo) |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
201 basectx = None |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
202 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
203 if baserev is None: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
204 baserev = wdirctx.rev() |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
205 stackrevs = {wdirctx.rev()} |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
206 else: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
207 stackrevs = set(repo.revs('%d::.', baserev)) |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
208 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
209 ctx = repo[baserev] |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
210 if ctx.p1().rev() != nullrev: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
211 basectx = ctx.p1() |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
212 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
213 # And relevant descendants. |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
214 branchpointattip = False |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
215 cl = repo.changelog |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
216 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
217 for rev in cl.descendants([wdirctx.rev()]): |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
218 ctx = repo[rev] |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
219 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
220 # Will only happen if . is public. |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
221 if ctx.phase() == phases.public: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
222 break |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
223 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
224 stackrevs.add(ctx.rev()) |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
225 |
33211
f48422ab81aa
show: document why accidentally quadratic is (probably) acceptable
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33210
diff
changeset
|
226 # 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
|
227 # 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
|
228 # 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
|
229 # 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
|
230 # 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
|
231 if len(ctx.children()) > 1: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
232 branchpointattip = True |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
233 break |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
234 |
33209
9718725dc02a
show: avoid extra list operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33208
diff
changeset
|
235 stackrevs = list(sorted(stackrevs, reverse=True)) |
33197
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
236 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
237 # 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
|
238 # merge or rebase targets. |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
239 if basectx: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
240 # TODO make this customizable? |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
241 newheads = set(repo.revs('heads(%d::) - %ld - not public()', |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
242 basectx.rev(), stackrevs)) |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
243 else: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
244 newheads = set() |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
245 |
34191
e6b5e7329ff2
show: use consistent (and possibly shorter) node lengths
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34190
diff
changeset
|
246 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
|
247 nodelen = longestshortest(repo, allrevs) |
e6b5e7329ff2
show: use consistent (and possibly shorter) node lengths
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34190
diff
changeset
|
248 |
33197
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
249 try: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
250 cmdutil.findcmd('rebase', commands.table) |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
251 haverebase = True |
33210
b93df142485e
show: also catch AmbiguousCommand
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33209
diff
changeset
|
252 except (error.AmbiguousCommand, error.UnknownCommand): |
33197
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
253 haverebase = False |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
254 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
255 # TODO use templating. |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
256 # 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
|
257 # our simplicity and the customizations required. |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
258 # TODO use proper graph symbols from graphmod |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
259 |
35469
f1c54d003327
templater: move repo, ui and cache to per-engine resources
Yuya Nishihara <yuya@tcha.org>
parents:
34888
diff
changeset
|
260 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
|
261 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
|
262 resources=tres) |
33197
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
263 def shortest(ctx): |
36988
317382151ac3
templater: rename .render(mapping) to .renderdefault(mapping) (API)
Yuya Nishihara <yuya@tcha.org>
parents:
36041
diff
changeset
|
264 return shortesttmpl.renderdefault({'ctx': ctx, 'node': ctx.hex()}) |
33197
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
265 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
266 # 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
|
267 # 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
|
268 # branch point. |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
269 if newheads: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
270 # 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
|
271 # sort display order by commit distance. |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
272 revdistance = {} |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
273 for head in newheads: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
274 # 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
|
275 # room to optimize. |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
276 ancestors = cl.ancestors([head], stoprev=basectx.rev()) |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
277 revdistance[head] = len(list(ancestors)) |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
278 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
279 sourcectx = repo[stackrevs[-1]] |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
280 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
281 sortedheads = sorted(newheads, key=lambda x: revdistance[x], |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
282 reverse=True) |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
283 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
284 for i, rev in enumerate(sortedheads): |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
285 ctx = repo[rev] |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
286 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
287 if i: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
288 ui.write(': ') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
289 else: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
290 ui.write(' ') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
291 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
292 ui.write(('o ')) |
34191
e6b5e7329ff2
show: use consistent (and possibly shorter) node lengths
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34190
diff
changeset
|
293 displayer.show(ctx, nodelen=nodelen) |
33197
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
294 displayer.flush(ctx) |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
295 ui.write('\n') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
296 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
297 if i: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
298 ui.write(':/') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
299 else: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
300 ui.write(' /') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
301 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
302 ui.write(' (') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
303 ui.write(_('%d commits ahead') % revdistance[rev], |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
304 label='stack.commitdistance') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
305 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
306 if haverebase: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
307 # 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
|
308 ui.write('; ') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
309 ui.write(('hg rebase --source %s --dest %s' % ( |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
310 shortest(sourcectx), shortest(ctx))), |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
311 label='stack.rebasehint') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
312 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
313 ui.write(')\n') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
314 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
315 ui.write(':\n: ') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
316 ui.write(_('(stack head)\n'), label='stack.label') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
317 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
318 if branchpointattip: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
319 ui.write(' \\ / ') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
320 ui.write(_('(multiple children)\n'), label='stack.label') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
321 ui.write(' |\n') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
322 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
323 for rev in stackrevs: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
324 ctx = repo[rev] |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
325 symbol = '@' if rev == wdirctx.rev() else 'o' |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
326 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
327 if newheads: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
328 ui.write(': ') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
329 else: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
330 ui.write(' ') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
331 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
332 ui.write(symbol, ' ') |
34191
e6b5e7329ff2
show: use consistent (and possibly shorter) node lengths
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34190
diff
changeset
|
333 displayer.show(ctx, nodelen=nodelen) |
33197
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
334 displayer.flush(ctx) |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
335 ui.write('\n') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
336 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
337 # TODO display histedit hint? |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
338 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
339 if basectx: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
340 # Vertically and horizontally separate stack base from parent |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
341 # to reinforce stack boundary. |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
342 if newheads: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
343 ui.write(':/ ') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
344 else: |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
345 ui.write(' / ') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
346 |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
347 ui.write(_('(stack base)'), '\n', label='stack.label') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
348 ui.write(('o ')) |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
349 |
34191
e6b5e7329ff2
show: use consistent (and possibly shorter) node lengths
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34190
diff
changeset
|
350 displayer.show(basectx, nodelen=nodelen) |
33197
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
351 displayer.flush(basectx) |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
352 ui.write('\n') |
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33137
diff
changeset
|
353 |
31944
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
354 @revsetpredicate('_underway([commitage[, headage]])') |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
355 def underwayrevset(repo, subset, x): |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
356 args = revset.getargsdict(x, 'underway', 'commitage headage') |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
357 if 'commitage' not in args: |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
358 args['commitage'] = None |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
359 if 'headage' not in args: |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
360 args['headage'] = None |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
361 |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
362 # 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
|
363 # 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
|
364 # since the topographical sort needs to consume all revs. |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
365 # |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
366 # 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
|
367 # a complex revset. This enables faster execution. |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
368 |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
369 # Mutable changesets (non-public) are the most important changesets |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
370 # 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
|
371 # 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
|
372 # why we exclude obsolete changesets from this query. |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
373 rs = 'not public() and not obsolete()' |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
374 rsargs = [] |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
375 if args['commitage']: |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
376 rs += ' and date(%s)' |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
377 rsargs.append(revsetlang.getstring(args['commitage'], |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
378 _('commitage requires a string'))) |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
379 |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
380 mutable = repo.revs(rs, *rsargs) |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
381 relevant = revset.baseset(mutable) |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
382 |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
383 # Add parents of mutable changesets to provide context. |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
384 relevant += repo.revs('parents(%ld)', mutable) |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
385 |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
386 # 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
|
387 # b) are recent. |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
388 rs = 'head() and not closed()' |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
389 rsargs = [] |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
390 if args['headage']: |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
391 rs += ' and date(%s)' |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
392 rsargs.append(revsetlang.getstring(args['headage'], |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
393 _('headage requires a string'))) |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
394 |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
395 relevant += repo.revs(rs, *rsargs) |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
396 |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
397 # Add working directory parent. |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
398 wdirrev = repo['.'].rev() |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
399 if wdirrev != nullrev: |
32291
bd872f64a8ba
cleanup: use set literals
Martin von Zweigbergk <martinvonz@google.com>
parents:
32058
diff
changeset
|
400 relevant += revset.baseset({wdirrev}) |
31944
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
401 |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
402 return subset & relevant |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
403 |
33046
11f768258dcc
show: construct changeset templater during dispatch
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32837
diff
changeset
|
404 @showview('work', csettopic='work') |
11f768258dcc
show: construct changeset templater during dispatch
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32837
diff
changeset
|
405 def showwork(ui, repo, displayer): |
31944
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
406 """changesets that aren't finished""" |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
407 # TODO support date-based limiting when calling revset. |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
408 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
|
409 nodelen = longestshortest(repo, revs) |
31944
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
410 |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
411 revdag = graphmod.dagwalker(repo, revs) |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
412 |
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
413 ui.setconfig('experimental', 'graphshorten', True) |
35888
c8e2d6ed1f9e
cmdutil: drop aliases for logcmdutil functions (API)
Yuya Nishihara <yuya@tcha.org>
parents:
35498
diff
changeset
|
414 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
|
415 props={'nodelen': nodelen}) |
31944
99bc93147d87
show: implement underway view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31943
diff
changeset
|
416 |
33137
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
417 def extsetup(ui): |
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
418 # 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
|
419 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
|
420 for view in showview._table: |
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
421 name = '%s%s' % (prefix, view) |
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
422 |
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
423 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
|
424 strict=True) |
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
425 |
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
426 # 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
|
427 if name in choice: |
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
428 continue |
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
429 |
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
430 # Same for aliases. |
37134
6890b7e991a4
help: supporting both help and doc for aliases
Rodrigo Damazio <rdamazio@google.com>
parents:
36988
diff
changeset
|
431 if ui.config('alias', name, None): |
33137
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
432 continue |
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
433 |
99ce2f586cd4
show: config option to register aliases for views
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33046
diff
changeset
|
434 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
|
435 |
34191
e6b5e7329ff2
show: use consistent (and possibly shorter) node lengths
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34190
diff
changeset
|
436 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
|
437 """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
|
438 |
e6b5e7329ff2
show: use consistent (and possibly shorter) node lengths
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34190
diff
changeset
|
439 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
|
440 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
|
441 set of nodes. |
e6b5e7329ff2
show: use consistent (and possibly shorter) node lengths
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34190
diff
changeset
|
442 |
e6b5e7329ff2
show: use consistent (and possibly shorter) node lengths
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34190
diff
changeset
|
443 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
|
444 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
|
445 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
|
446 revision 10023 or node ``10023abc...``. |
e6b5e7329ff2
show: use consistent (and possibly shorter) node lengths
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34190
diff
changeset
|
447 """ |
35498
dfaf9f10e2e5
show: use revlog function to compute length of the longest shortest node
Yuya Nishihara <yuya@tcha.org>
parents:
35469
diff
changeset
|
448 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
|
449 return minlen |
37680
e743b8524d60
scmutil: introduce shortesthexnodeidprefix()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37134
diff
changeset
|
450 cl = repo.changelog |
37709
7b2955624777
scmutil: make shortesthexnodeidprefix() take a full binary nodeid
Martin von Zweigbergk <martinvonz@google.com>
parents:
37708
diff
changeset
|
451 return max(len(scmutil.shortesthexnodeidprefix(repo, cl.node(r), minlen)) |
7b2955624777
scmutil: make shortesthexnodeidprefix() take a full binary nodeid
Martin von Zweigbergk <martinvonz@google.com>
parents:
37708
diff
changeset
|
452 for r in revs) |
34191
e6b5e7329ff2
show: use consistent (and possibly shorter) node lengths
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34190
diff
changeset
|
453 |
31765
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
454 # 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
|
455 # 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
|
456 # 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
|
457 # to do this more robustly. |
264baeef3588
show: new extension for displaying various repository data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
458 # TODO make this more robust. |
31943
3e9f118cc834
show: fix formatting of multiple commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31859
diff
changeset
|
459 def _updatedocstring(): |
3e9f118cc834
show: fix formatting of multiple commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31859
diff
changeset
|
460 longest = max(map(len, showview._table.keys())) |
3e9f118cc834
show: fix formatting of multiple commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31859
diff
changeset
|
461 entries = [] |
3e9f118cc834
show: fix formatting of multiple commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31859
diff
changeset
|
462 for key in sorted(showview._table.keys()): |
3e9f118cc834
show: fix formatting of multiple commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31859
diff
changeset
|
463 entries.append(pycompat.sysstr(' %s %s' % ( |
3e9f118cc834
show: fix formatting of multiple commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31859
diff
changeset
|
464 key.ljust(longest), showview._table[key]._origdoc))) |
3e9f118cc834
show: fix formatting of multiple commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31859
diff
changeset
|
465 |
3e9f118cc834
show: fix formatting of multiple commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31859
diff
changeset
|
466 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
|
467 cmdtable['show'][0].__doc__.rstrip(), |
3e9f118cc834
show: fix formatting of multiple commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31859
diff
changeset
|
468 pycompat.sysstr('\n\n').join(entries)) |
3e9f118cc834
show: fix formatting of multiple commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31859
diff
changeset
|
469 |
3e9f118cc834
show: fix formatting of multiple commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31859
diff
changeset
|
470 _updatedocstring() |