Mercurial > hg
annotate hgext/pager.py @ 38761:d558e53cd6b6 stable
context: safegaurd against 'lx' being passed as file flag in manifest
Subversion can have a file as executable link. When using hgsubversion, we will
have both islink and isexec True. This will lead to _flags being set to `lx`.
However, manifest expects flag to be one-byte so it will crash if 'lx' is
passed. Also it's impossible to have an executable link.
This patch will safegaurd us from having 'lx' being a possible value.
This was authored by Ivan Lezhankin from Yandex.
Differential Revision: https://phab.mercurial-scm.org/D3985
author | Pulkit Goyal <pulkit@yandex-team.ru> |
---|---|
date | Wed, 25 Jul 2018 21:19:06 +0300 |
parents | 03f7db5f8e71 |
children | 2372284d9457 |
rev | line source |
---|---|
6323
6e1308a09ffd
Use the pager given by the environment to display long output
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
1 # pager.py - display output using a pager |
6e1308a09ffd
Use the pager given by the environment to display long output
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
2 # |
6e1308a09ffd
Use the pager given by the environment to display long output
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
3 # Copyright 2008 David Soria Parra <dsp@php.net> |
6e1308a09ffd
Use the pager given by the environment to display long output
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
4 # |
8225
46293a0c7e9f
updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents:
7995
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
10263 | 6 # GNU General Public License version 2 or any later version. |
6323
6e1308a09ffd
Use the pager given by the environment to display long output
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
7 # |
12083
ebfc46929f3e
help: refer to user configuration file more consistently
Brodie Rao <brodie@bitheap.org>
parents:
11414
diff
changeset
|
8 # To load the extension, add it to your configuration file: |
6323
6e1308a09ffd
Use the pager given by the environment to display long output
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
9 # |
6e1308a09ffd
Use the pager given by the environment to display long output
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
10 # [extension] |
10112
703db37d186b
hgext: enable extensions without "hgext." prefix in help texts
Martin Geisler <mg@lazybytes.net>
parents:
9841
diff
changeset
|
11 # pager = |
6323
6e1308a09ffd
Use the pager given by the environment to display long output
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
12 # |
29967
bd55d98027ee
pager: use single quotes in use warning
timeless <timeless@mozdev.org>
parents:
29841
diff
changeset
|
13 # Run 'hg help pager' to get info on configuration. |
6462
6c4e12682fb9
pager: make config info accessible with "hg help pager"
Christian Ebert <blacktrash@gmx.net>
parents:
6457
diff
changeset
|
14 |
31061
900996da577a
pager: move most help to a new help topic and deprecate extension
Augie Fackler <augie@google.com>
parents:
31033
diff
changeset
|
15 '''browse command output with an external pager (DEPRECATED) |
6462
6c4e12682fb9
pager: make config info accessible with "hg help pager"
Christian Ebert <blacktrash@gmx.net>
parents:
6457
diff
changeset
|
16 |
31061
900996da577a
pager: move most help to a new help topic and deprecate extension
Augie Fackler <augie@google.com>
parents:
31033
diff
changeset
|
17 Forcibly enable paging for individual commands that don't typically |
900996da577a
pager: move most help to a new help topic and deprecate extension
Augie Fackler <augie@google.com>
parents:
31033
diff
changeset
|
18 request pagination with the attend-<command> option. This setting |
900996da577a
pager: move most help to a new help topic and deprecate extension
Augie Fackler <augie@google.com>
parents:
31033
diff
changeset
|
19 takes precedence over ignore options and defaults:: |
21281
bcddddcf0b54
pager: add attend-<command> option
Matt Mackall <mpm@selenic.com>
parents:
21280
diff
changeset
|
20 |
bcddddcf0b54
pager: add attend-<command> option
Matt Mackall <mpm@selenic.com>
parents:
21280
diff
changeset
|
21 [pager] |
bcddddcf0b54
pager: add attend-<command> option
Matt Mackall <mpm@selenic.com>
parents:
21280
diff
changeset
|
22 attend-cat = false |
6462
6c4e12682fb9
pager: make config info accessible with "hg help pager"
Christian Ebert <blacktrash@gmx.net>
parents:
6457
diff
changeset
|
23 ''' |
28320
63c2864af25f
pager: use absolute_import
Augie Fackler <augie@google.com>
parents:
27128
diff
changeset
|
24 from __future__ import absolute_import |
6323
6e1308a09ffd
Use the pager given by the environment to display long output
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
25 |
28320
63c2864af25f
pager: use absolute_import
Augie Fackler <augie@google.com>
parents:
27128
diff
changeset
|
26 from mercurial import ( |
63c2864af25f
pager: use absolute_import
Augie Fackler <augie@google.com>
parents:
27128
diff
changeset
|
27 cmdutil, |
63c2864af25f
pager: use absolute_import
Augie Fackler <augie@google.com>
parents:
27128
diff
changeset
|
28 commands, |
63c2864af25f
pager: use absolute_import
Augie Fackler <augie@google.com>
parents:
27128
diff
changeset
|
29 dispatch, |
63c2864af25f
pager: use absolute_import
Augie Fackler <augie@google.com>
parents:
27128
diff
changeset
|
30 extensions, |
34495
6d1b0970f80c
configitems: register the 'pager.attend' config
Boris Feld <boris.feld@octobus.net>
parents:
31406
diff
changeset
|
31 registrar, |
28320
63c2864af25f
pager: use absolute_import
Augie Fackler <augie@google.com>
parents:
27128
diff
changeset
|
32 ) |
6323
6e1308a09ffd
Use the pager given by the environment to display long output
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
33 |
29841
d5883fd055c6
extensions: change magic "shipped with hg" string
Augie Fackler <augie@google.com>
parents:
29205
diff
changeset
|
34 # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for |
25186
80c5b2666a96
extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents:
24067
diff
changeset
|
35 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should |
80c5b2666a96
extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents:
24067
diff
changeset
|
36 # be specifying the version(s) of Mercurial they are tested with, or |
80c5b2666a96
extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents:
24067
diff
changeset
|
37 # leave the attribute unspecified. |
29841
d5883fd055c6
extensions: change magic "shipped with hg" string
Augie Fackler <augie@google.com>
parents:
29205
diff
changeset
|
38 testedwith = 'ships-with-hg-core' |
16743
38caf405d010
hgext: mark all first-party extensions as such
Augie Fackler <raf@durin42.com>
parents:
16652
diff
changeset
|
39 |
34495
6d1b0970f80c
configitems: register the 'pager.attend' config
Boris Feld <boris.feld@octobus.net>
parents:
31406
diff
changeset
|
40 configtable = {} |
6d1b0970f80c
configitems: register the 'pager.attend' config
Boris Feld <boris.feld@octobus.net>
parents:
31406
diff
changeset
|
41 configitem = registrar.configitem(configtable) |
6d1b0970f80c
configitems: register the 'pager.attend' config
Boris Feld <boris.feld@octobus.net>
parents:
31406
diff
changeset
|
42 |
6d1b0970f80c
configitems: register the 'pager.attend' config
Boris Feld <boris.feld@octobus.net>
parents:
31406
diff
changeset
|
43 configitem('pager', 'attend', |
6d1b0970f80c
configitems: register the 'pager.attend' config
Boris Feld <boris.feld@octobus.net>
parents:
31406
diff
changeset
|
44 default=lambda: attended, |
6d1b0970f80c
configitems: register the 'pager.attend' config
Boris Feld <boris.feld@octobus.net>
parents:
31406
diff
changeset
|
45 ) |
6d1b0970f80c
configitems: register the 'pager.attend' config
Boris Feld <boris.feld@octobus.net>
parents:
31406
diff
changeset
|
46 |
6323
6e1308a09ffd
Use the pager given by the environment to display long output
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
47 def uisetup(ui): |
30722 | 48 |
7216
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
6548
diff
changeset
|
49 def pagecmd(orig, ui, options, cmd, cmdfunc): |
21279
19b8cfe4396f
pager: break auto out of command check loop
Matt Mackall <mpm@selenic.com>
parents:
21278
diff
changeset
|
50 auto = options['pager'] == 'auto' |
30993
9c2977ceaa46
pager: move more behavior into core
Augie Fackler <augie@google.com>
parents:
30992
diff
changeset
|
51 if auto and not ui.pageractive: |
21279
19b8cfe4396f
pager: break auto out of command check loop
Matt Mackall <mpm@selenic.com>
parents:
21278
diff
changeset
|
52 usepager = False |
34495
6d1b0970f80c
configitems: register the 'pager.attend' config
Boris Feld <boris.feld@octobus.net>
parents:
31406
diff
changeset
|
53 attend = ui.configlist('pager', 'attend') |
21280 | 54 ignore = ui.configlist('pager', 'ignore') |
19940
7d99bff0f77c
pager: honour internal aliases
David Soria Parra <dsp@experimentalworks.net>
parents:
18923
diff
changeset
|
55 cmds, _ = cmdutil.findcmd(cmd, commands.table) |
7d99bff0f77c
pager: honour internal aliases
David Soria Parra <dsp@experimentalworks.net>
parents:
18923
diff
changeset
|
56 |
7d99bff0f77c
pager: honour internal aliases
David Soria Parra <dsp@experimentalworks.net>
parents:
18923
diff
changeset
|
57 for cmd in cmds: |
21281
bcddddcf0b54
pager: add attend-<command> option
Matt Mackall <mpm@selenic.com>
parents:
21280
diff
changeset
|
58 var = 'attend-%s' % cmd |
34669
03f7db5f8e71
configitems: register the 'pager.attend-.*' options
Boris Feld <boris.feld@octobus.net>
parents:
34495
diff
changeset
|
59 if ui.config('pager', var, None): |
03f7db5f8e71
configitems: register the 'pager.attend-.*' options
Boris Feld <boris.feld@octobus.net>
parents:
34495
diff
changeset
|
60 usepager = ui.configbool('pager', var, True) |
21281
bcddddcf0b54
pager: add attend-<command> option
Matt Mackall <mpm@selenic.com>
parents:
21280
diff
changeset
|
61 break |
21279
19b8cfe4396f
pager: break auto out of command check loop
Matt Mackall <mpm@selenic.com>
parents:
21278
diff
changeset
|
62 if (cmd in attend or |
19b8cfe4396f
pager: break auto out of command check loop
Matt Mackall <mpm@selenic.com>
parents:
21278
diff
changeset
|
63 (cmd not in ignore and not attend)): |
21277
2bc778e2f9b3
pager: break pager invocation out of command check loop
Matt Mackall <mpm@selenic.com>
parents:
20790
diff
changeset
|
64 usepager = True |
19940
7d99bff0f77c
pager: honour internal aliases
David Soria Parra <dsp@experimentalworks.net>
parents:
18923
diff
changeset
|
65 break |
21277
2bc778e2f9b3
pager: break pager invocation out of command check loop
Matt Mackall <mpm@selenic.com>
parents:
20790
diff
changeset
|
66 |
30993
9c2977ceaa46
pager: move more behavior into core
Augie Fackler <augie@google.com>
parents:
30992
diff
changeset
|
67 if usepager: |
30995
5e85bab867a7
ui: add ignore-single-command functionality
Augie Fackler <augie@google.com>
parents:
30993
diff
changeset
|
68 # Slight hack: the attend list is supposed to override |
5e85bab867a7
ui: add ignore-single-command functionality
Augie Fackler <augie@google.com>
parents:
30993
diff
changeset
|
69 # the ignore list for the pager extension, but the |
5e85bab867a7
ui: add ignore-single-command functionality
Augie Fackler <augie@google.com>
parents:
30993
diff
changeset
|
70 # core code doesn't know about attend, so we have to |
5e85bab867a7
ui: add ignore-single-command functionality
Augie Fackler <augie@google.com>
parents:
30993
diff
changeset
|
71 # lobotomize the ignore list so that the extension's |
5e85bab867a7
ui: add ignore-single-command functionality
Augie Fackler <augie@google.com>
parents:
30993
diff
changeset
|
72 # behavior is preserved. |
5e85bab867a7
ui: add ignore-single-command functionality
Augie Fackler <augie@google.com>
parents:
30993
diff
changeset
|
73 ui.setconfig('pager', 'ignore', '', 'pager') |
30993
9c2977ceaa46
pager: move more behavior into core
Augie Fackler <augie@google.com>
parents:
30992
diff
changeset
|
74 ui.pager('extension-via-attend-' + cmd) |
31406
e83302d43748
pager: if old pager extensions is enabled, respect pager.attend
Martin von Zweigbergk <martinvonz@google.com>
parents:
31122
diff
changeset
|
75 else: |
e83302d43748
pager: if old pager extensions is enabled, respect pager.attend
Martin von Zweigbergk <martinvonz@google.com>
parents:
31122
diff
changeset
|
76 ui.disablepager() |
7216
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
6548
diff
changeset
|
77 return orig(ui, options, cmd, cmdfunc) |
6417
13fafd8cc4a1
pager: Add a configuration to enable/disable the pager for certain commands
David Soria Parra <dsp <at> php.net>
parents:
6324
diff
changeset
|
78 |
31122
53a60e95f154
pager: drop the 'color' dependant code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31061
diff
changeset
|
79 extensions.wrapfunction(dispatch, '_runcommand', pagecmd) |
9841
7cd6dee6fe37
pager: provide a default attend list
Brodie Rao <me+hg@dackz.net>
parents:
9267
diff
changeset
|
80 |
31406
e83302d43748
pager: if old pager extensions is enabled, respect pager.attend
Martin von Zweigbergk <martinvonz@google.com>
parents:
31122
diff
changeset
|
81 attended = ['annotate', 'cat', 'diff', 'export', 'glog', 'log', 'qdiff'] |