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