Mercurial > hg
annotate mercurial/ui.py @ 52307:22d24f6d6411
rust-lib: remove exports for not too common pattern-related types
This only muddies the lib and makes the imports more confusing.
author | Raphaël Gomès <rgomes@octobus.net> |
---|---|
date | Mon, 04 Nov 2024 11:26:41 +0100 |
parents | f4733654f144 |
children |
rev | line source |
---|---|
207 | 1 # ui.py - user interface bits for mercurial |
2 # | |
46819
d4ba4d51f85f
contributor: change mentions of mpm to olivia
Raphaël Gomès <rgomes@octobus.net>
parents:
46721
diff
changeset
|
3 # Copyright 2005-2007 Olivia Mackall <olivia@selenic.com> |
207 | 4 # |
8225
46293a0c7e9f
updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents:
8222
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. |
207 | 7 |
51863
f4733654f144
typing: add `from __future__ import annotations` to most files
Matt Harbison <matt_harbison@yahoo.com>
parents:
51285
diff
changeset
|
8 from __future__ import annotations |
25989
2cc4e8385661
ui: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
9 |
30976
e92daf156d5c
ui: provide a mechanism to track and log blocked time
Simon Farnsworth <simonfar@fb.com>
parents:
30945
diff
changeset
|
10 import collections |
30480
b0a8337ba9af
ui: add configoverride context manager
Kostia Balytskyi <ikostia@fb.com>
parents:
30473
diff
changeset
|
11 import contextlib |
45025
24b1a8eb73aa
ui: add option to timestamp status and diagnostic messages
Joerg Sonnenberger <joerg@bec.de>
parents:
44992
diff
changeset
|
12 import datetime |
25989
2cc4e8385661
ui: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
13 import errno |
25629
52e5f68d8363
devel-warn: move the develwarn function as a method of the ui object
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25568
diff
changeset
|
14 import inspect |
25989
2cc4e8385661
ui: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
15 import os |
27392
00aa37c65e0a
ui: try to handle $$ more robustly in prompts (issue4970)
Matt Mackall <mpm@selenic.com>
parents:
26820
diff
changeset
|
16 import re |
30992
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
17 import signal |
25989
2cc4e8385661
ui: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
18 import socket |
30992
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
19 import subprocess |
25989
2cc4e8385661
ui: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
20 import sys |
2cc4e8385661
ui: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
21 import traceback |
51285
9d3721552b6c
pytype: import typing directly
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50998
diff
changeset
|
22 import typing |
25989
2cc4e8385661
ui: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
23 |
49794
25fe689a4a64
typing: add type hints related to progress bars in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49793
diff
changeset
|
24 from typing import ( |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
25 Any, |
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
26 Callable, |
49795
f1e820cda2f5
typing: add type hints related to message output in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49794
diff
changeset
|
27 Dict, |
f1e820cda2f5
typing: add type hints related to message output in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49794
diff
changeset
|
28 List, |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
29 NoReturn, |
49794
25fe689a4a64
typing: add type hints related to progress bars in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49793
diff
changeset
|
30 Optional, |
49795
f1e820cda2f5
typing: add type hints related to message output in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49794
diff
changeset
|
31 Tuple, |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
32 Type, |
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
33 TypeVar, |
49795
f1e820cda2f5
typing: add type hints related to message output in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49794
diff
changeset
|
34 Union, |
f1e820cda2f5
typing: add type hints related to message output in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49794
diff
changeset
|
35 cast, |
49799
de284a0b5614
typing: add type hints to the prompt methods in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49798
diff
changeset
|
36 overload, |
49794
25fe689a4a64
typing: add type hints related to progress bars in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49793
diff
changeset
|
37 ) |
25fe689a4a64
typing: add type hints related to progress bars in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49793
diff
changeset
|
38 |
25989
2cc4e8385661
ui: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
39 from .i18n import _ |
2cc4e8385661
ui: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
40 from .node import hex |
43087
66f2cc210a29
py3: manually import pycompat.setattr where it is needed
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43085
diff
changeset
|
41 from .pycompat import ( |
66f2cc210a29
py3: manually import pycompat.setattr where it is needed
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43085
diff
changeset
|
42 open, |
66f2cc210a29
py3: manually import pycompat.setattr where it is needed
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43085
diff
changeset
|
43 ) |
25989
2cc4e8385661
ui: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
44 |
2cc4e8385661
ui: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
45 from . import ( |
31087
894bdcdc75df
color: move the 'colorlabel' call to the core 'ui' class
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31083
diff
changeset
|
46 color, |
25989
2cc4e8385661
ui: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
47 config, |
32984
6d983e8af49c
configitems: introduce a central registry for config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32967
diff
changeset
|
48 configitems, |
30277
e9fca89c6d58
py3: use encoding.environ in ui.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29978
diff
changeset
|
49 encoding, |
25989
2cc4e8385661
ui: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
50 error, |
50765
7f8f6fe13fa9
configitems: move blackbox's config items to the new configitems.toml
Raphaël Gomès <rgomes@octobus.net>
parents:
50453
diff
changeset
|
51 extensions, |
25989
2cc4e8385661
ui: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
52 formatter, |
40994
ab92e2111408
ui: install logger that sends debug.extensions messages to stderr
Yuya Nishihara <yuya@tcha.org>
parents:
40761
diff
changeset
|
53 loggingutil, |
25989
2cc4e8385661
ui: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
54 progress, |
30519
20a42325fdef
py3: use pycompat.getcwd() instead of os.getcwd()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30480
diff
changeset
|
55 pycompat, |
31679
0f8ba0bc1154
rcutil: move scmutil.*rcpath to rcutil (API)
Jun Wu <quark@fb.com>
parents:
31624
diff
changeset
|
56 rcutil, |
25989
2cc4e8385661
ui: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
57 scmutil, |
2cc4e8385661
ui: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
58 util, |
2cc4e8385661
ui: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
59 ) |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36910
diff
changeset
|
60 from .utils import ( |
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36910
diff
changeset
|
61 dateutil, |
37119
d4a2e0d5d042
procutil: bulk-replace util.std* to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
37084
diff
changeset
|
62 procutil, |
44030
5ac0e6f19eb4
ui: refactor `readconfig()` into a form that can consume resources
Matt Harbison <matt_harbison@yahoo.com>
parents:
44021
diff
changeset
|
63 resourceutil, |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36910
diff
changeset
|
64 stringutil, |
46906
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46828
diff
changeset
|
65 urlutil, |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36910
diff
changeset
|
66 ) |
207 | 67 |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
68 _ConfigItems = Dict[Tuple[bytes, bytes], object] # {(section, name) : value} |
49795
f1e820cda2f5
typing: add type hints related to message output in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49794
diff
changeset
|
69 # The **opts args of the various write() methods can be basically anything, but |
f1e820cda2f5
typing: add type hints related to message output in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49794
diff
changeset
|
70 # there's no way to express it as "anything but str". So type it to be the |
f1e820cda2f5
typing: add type hints related to message output in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49794
diff
changeset
|
71 # handful of known types that are used. |
f1e820cda2f5
typing: add type hints related to message output in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49794
diff
changeset
|
72 _MsgOpts = Union[bytes, bool, List["_PromptChoice"]] |
f1e820cda2f5
typing: add type hints related to message output in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49794
diff
changeset
|
73 _PromptChoice = Tuple[bytes, bytes] |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
74 _Tui = TypeVar('_Tui', bound="ui") |
49795
f1e820cda2f5
typing: add type hints related to message output in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49794
diff
changeset
|
75 |
29378
fea71f66ebff
url: remember http password database in ui object
liscju <piotr.listkiewicz@gmail.com>
parents:
29366
diff
changeset
|
76 urlreq = util.urlreq |
fea71f66ebff
url: remember http password database in ui object
liscju <piotr.listkiewicz@gmail.com>
parents:
29366
diff
changeset
|
77 |
30979
fd598149112b
ui: time calls to ui.system
Simon Farnsworth <simonfar@fb.com>
parents:
30978
diff
changeset
|
78 # for use with str.translate(None, _keepalnum), to keep just alphanumerics |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
79 _keepalnum: bytes = b''.join( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
80 c for c in map(pycompat.bytechr, range(256)) if not c.isalnum() |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
81 ) |
30979
fd598149112b
ui: time calls to ui.system
Simon Farnsworth <simonfar@fb.com>
parents:
30978
diff
changeset
|
82 |
32872
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
83 # The config knobs that will be altered (if unset) by ui.tweakdefaults. |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
84 tweakrc: bytes = b""" |
32872
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
85 [ui] |
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
86 # The rollback command is dangerous. As a rule, don't use it. |
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
87 rollback = False |
35067
929858db4d22
tweakdefaults: turn on ui.statuscopies
Martin von Zweigbergk <martinvonz@google.com>
parents:
34957
diff
changeset
|
88 # Make `hg status` report copy information |
929858db4d22
tweakdefaults: turn on ui.statuscopies
Martin von Zweigbergk <martinvonz@google.com>
parents:
34957
diff
changeset
|
89 statuscopies = yes |
35306
03a83ace9816
ui: add curses interface to tweakdefaults
Augie Fackler <augie@google.com>
parents:
35186
diff
changeset
|
90 # Prefer curses UIs when available. Revert to plain-text with `text`. |
03a83ace9816
ui: add curses interface to tweakdefaults
Augie Fackler <augie@google.com>
parents:
35186
diff
changeset
|
91 interface = curses |
41493
97ab4cbb342e
tweakdefaults: set ui.relative-paths instead of command.status.relative
Martin von Zweigbergk <martinvonz@google.com>
parents:
41484
diff
changeset
|
92 # Make compatible commands emit cwd-relative paths by default. |
97ab4cbb342e
tweakdefaults: set ui.relative-paths instead of command.status.relative
Martin von Zweigbergk <martinvonz@google.com>
parents:
41484
diff
changeset
|
93 relative-paths = yes |
32872
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
94 |
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
95 [commands] |
38652
bfcd5c7cbf9a
grep: restore pre-9ef10437bb88 behavior, enable wdir search by tweakdefaults
Yuya Nishihara <yuya@tcha.org>
parents:
38623
diff
changeset
|
96 # Grep working directory by default. |
bfcd5c7cbf9a
grep: restore pre-9ef10437bb88 behavior, enable wdir search by tweakdefaults
Yuya Nishihara <yuya@tcha.org>
parents:
38623
diff
changeset
|
97 grep.all-files = True |
34707
6cd8d8203204
tweakdefaults: make commands.update.check be `noconflict`
Augie Fackler <augie@google.com>
parents:
34645
diff
changeset
|
98 # Refuse to perform an `hg update` that would cause a file content merge |
6cd8d8203204
tweakdefaults: make commands.update.check be `noconflict`
Augie Fackler <augie@google.com>
parents:
34645
diff
changeset
|
99 update.check = noconflict |
36910
98487ad0cf8b
tweakdefaults: add commands.status.verbose to tweakefaults
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36834
diff
changeset
|
100 # Show conflicts information in `hg status` |
98487ad0cf8b
tweakdefaults: add commands.status.verbose to tweakefaults
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36834
diff
changeset
|
101 status.verbose = True |
42561
44e99811bea7
tweakdefaults: make hg resolve require --re-merge flag to re-merge
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42541
diff
changeset
|
102 # Make `hg resolve` with no action (like `-m`) fail instead of re-merging. |
44e99811bea7
tweakdefaults: make hg resolve require --re-merge flag to re-merge
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42541
diff
changeset
|
103 resolve.explicit-re-merge = True |
32872
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
104 |
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
105 [diff] |
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
106 git = 1 |
35307
4caafe280488
ui: add diff.showfunc to tweakdefaults
Augie Fackler <augie@google.com>
parents:
35306
diff
changeset
|
107 showfunc = 1 |
38623
92c845c097aa
tweakdefaults: enable word-diff by default
Augie Fackler <augie@google.com>
parents:
38575
diff
changeset
|
108 word-diff = 1 |
32872
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
109 """ |
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
110 |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
111 samplehgrcs: Dict[bytes, bytes] = { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
112 b'user': b"""# example user config (see 'hg help config' for more info) |
22419
fdfc9faca273
ui: move samplehgrcs from config
Matt Mackall <mpm@selenic.com>
parents:
22291
diff
changeset
|
113 [ui] |
fdfc9faca273
ui: move samplehgrcs from config
Matt Mackall <mpm@selenic.com>
parents:
22291
diff
changeset
|
114 # name and email, e.g. |
fdfc9faca273
ui: move samplehgrcs from config
Matt Mackall <mpm@selenic.com>
parents:
22291
diff
changeset
|
115 # username = Jane Doe <jdoe@example.com> |
fdfc9faca273
ui: move samplehgrcs from config
Matt Mackall <mpm@selenic.com>
parents:
22291
diff
changeset
|
116 username = |
fdfc9faca273
ui: move samplehgrcs from config
Matt Mackall <mpm@selenic.com>
parents:
22291
diff
changeset
|
117 |
34568
63c19b7fa100
ui: recommend tweakdefaults in the default hgrc template
Augie Fackler <augie@google.com>
parents:
34482
diff
changeset
|
118 # We recommend enabling tweakdefaults to get slight improvements to |
63c19b7fa100
ui: recommend tweakdefaults in the default hgrc template
Augie Fackler <augie@google.com>
parents:
34482
diff
changeset
|
119 # the UI over time. Make sure to set HGPLAIN in the environment when |
63c19b7fa100
ui: recommend tweakdefaults in the default hgrc template
Augie Fackler <augie@google.com>
parents:
34482
diff
changeset
|
120 # writing scripts! |
63c19b7fa100
ui: recommend tweakdefaults in the default hgrc template
Augie Fackler <augie@google.com>
parents:
34482
diff
changeset
|
121 # tweakdefaults = True |
63c19b7fa100
ui: recommend tweakdefaults in the default hgrc template
Augie Fackler <augie@google.com>
parents:
34482
diff
changeset
|
122 |
32093
4d438efb825a
color: reflect the new default in the example hgrc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32078
diff
changeset
|
123 # uncomment to disable color in command output |
32094
2de67783dd31
color: point to the global help in the example hgrc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32093
diff
changeset
|
124 # (see 'hg help color' for details) |
32093
4d438efb825a
color: reflect the new default in the example hgrc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32078
diff
changeset
|
125 # color = never |
31124
791ea883fc44
config: suggest the 'ui.color' instead of the 'color' extension
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31119
diff
changeset
|
126 |
32100
21eb863187ea
pager: advertise the config option in the default hgrc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32097
diff
changeset
|
127 # uncomment to disable command output pagination |
21eb863187ea
pager: advertise the config option in the default hgrc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32097
diff
changeset
|
128 # (see 'hg help pager' for details) |
32104
f06d23af6cdf
pager: rename 'pager.enable' to 'ui.paginate'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32100
diff
changeset
|
129 # paginate = never |
32100
21eb863187ea
pager: advertise the config option in the default hgrc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32097
diff
changeset
|
130 |
22419
fdfc9faca273
ui: move samplehgrcs from config
Matt Mackall <mpm@selenic.com>
parents:
22291
diff
changeset
|
131 [extensions] |
41998
018acb7a3490
samplehgrcs: clarify which lines should be uncommented
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
41829
diff
changeset
|
132 # uncomment the lines below to enable some popular extensions |
29978
3d2ea1403c62
samplehgrcs: use single quotes in use warning
timeless <timeless@mozdev.org>
parents:
29762
diff
changeset
|
133 # (see 'hg help extensions' for more info) |
22419
fdfc9faca273
ui: move samplehgrcs from config
Matt Mackall <mpm@selenic.com>
parents:
22291
diff
changeset
|
134 # |
41999
ba064f95175e
samplehgrcs: update the list of suggested extensions
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
41998
diff
changeset
|
135 # histedit = |
ba064f95175e
samplehgrcs: update the list of suggested extensions
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
41998
diff
changeset
|
136 # rebase = |
ba064f95175e
samplehgrcs: update the list of suggested extensions
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
41998
diff
changeset
|
137 # uncommit = |
32097
601bfcddccdc
config: drop pager from the recommended extension
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32096
diff
changeset
|
138 """, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
139 b'cloned': b"""# example repository config (see 'hg help config' for more info) |
22837
2be7d5ebd4d0
config: use the same hgrc for a cloned repo as for an uninitted repo
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
22836
diff
changeset
|
140 [paths] |
2be7d5ebd4d0
config: use the same hgrc for a cloned repo as for an uninitted repo
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
22836
diff
changeset
|
141 default = %s |
2be7d5ebd4d0
config: use the same hgrc for a cloned repo as for an uninitted repo
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
22836
diff
changeset
|
142 |
2be7d5ebd4d0
config: use the same hgrc for a cloned repo as for an uninitted repo
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
22836
diff
changeset
|
143 # path aliases to other clones of this repo in URLs or filesystem paths |
29978
3d2ea1403c62
samplehgrcs: use single quotes in use warning
timeless <timeless@mozdev.org>
parents:
29762
diff
changeset
|
144 # (see 'hg help config.paths' for more info) |
22837
2be7d5ebd4d0
config: use the same hgrc for a cloned repo as for an uninitted repo
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
22836
diff
changeset
|
145 # |
31064
4431add9aef9
ui: replace obsolete default-push with default:pushurl (issue5485)
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
30848
diff
changeset
|
146 # default:pushurl = ssh://jdoe@example.net/hg/jdoes-fork |
4431add9aef9
ui: replace obsolete default-push with default:pushurl (issue5485)
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
30848
diff
changeset
|
147 # my-fork = ssh://jdoe@example.net/hg/jdoes-fork |
4431add9aef9
ui: replace obsolete default-push with default:pushurl (issue5485)
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
30848
diff
changeset
|
148 # my-clone = /home/jdoe/jdoes-clone |
22837
2be7d5ebd4d0
config: use the same hgrc for a cloned repo as for an uninitted repo
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
22836
diff
changeset
|
149 |
2be7d5ebd4d0
config: use the same hgrc for a cloned repo as for an uninitted repo
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
22836
diff
changeset
|
150 [ui] |
2be7d5ebd4d0
config: use the same hgrc for a cloned repo as for an uninitted repo
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
22836
diff
changeset
|
151 # name and email (local to this repository, optional), e.g. |
2be7d5ebd4d0
config: use the same hgrc for a cloned repo as for an uninitted repo
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
22836
diff
changeset
|
152 # username = Jane Doe <jdoe@example.com> |
2be7d5ebd4d0
config: use the same hgrc for a cloned repo as for an uninitted repo
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
22836
diff
changeset
|
153 """, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
154 b'local': b"""# example repository config (see 'hg help config' for more info) |
22836
5a831e4e6d7a
config: give a more detailed sample repo config
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
22783
diff
changeset
|
155 [paths] |
5a831e4e6d7a
config: give a more detailed sample repo config
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
22783
diff
changeset
|
156 # path aliases to other clones of this repo in URLs or filesystem paths |
29978
3d2ea1403c62
samplehgrcs: use single quotes in use warning
timeless <timeless@mozdev.org>
parents:
29762
diff
changeset
|
157 # (see 'hg help config.paths' for more info) |
22836
5a831e4e6d7a
config: give a more detailed sample repo config
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
22783
diff
changeset
|
158 # |
31064
4431add9aef9
ui: replace obsolete default-push with default:pushurl (issue5485)
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
30848
diff
changeset
|
159 # default = http://example.com/hg/example-repo |
4431add9aef9
ui: replace obsolete default-push with default:pushurl (issue5485)
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
30848
diff
changeset
|
160 # default:pushurl = ssh://jdoe@example.net/hg/jdoes-fork |
4431add9aef9
ui: replace obsolete default-push with default:pushurl (issue5485)
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
30848
diff
changeset
|
161 # my-fork = ssh://jdoe@example.net/hg/jdoes-fork |
4431add9aef9
ui: replace obsolete default-push with default:pushurl (issue5485)
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
30848
diff
changeset
|
162 # my-clone = /home/jdoe/jdoes-clone |
22836
5a831e4e6d7a
config: give a more detailed sample repo config
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
22783
diff
changeset
|
163 |
5a831e4e6d7a
config: give a more detailed sample repo config
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
22783
diff
changeset
|
164 [ui] |
5a831e4e6d7a
config: give a more detailed sample repo config
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
22783
diff
changeset
|
165 # name and email (local to this repository, optional), e.g. |
5a831e4e6d7a
config: give a more detailed sample repo config
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
22783
diff
changeset
|
166 # username = Jane Doe <jdoe@example.com> |
22419
fdfc9faca273
ui: move samplehgrcs from config
Matt Mackall <mpm@selenic.com>
parents:
22291
diff
changeset
|
167 """, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
168 b'global': b"""# example system-wide hg config (see 'hg help config' for more info) |
22419
fdfc9faca273
ui: move samplehgrcs from config
Matt Mackall <mpm@selenic.com>
parents:
22291
diff
changeset
|
169 |
31124
791ea883fc44
config: suggest the 'ui.color' instead of the 'color' extension
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31119
diff
changeset
|
170 [ui] |
32093
4d438efb825a
color: reflect the new default in the example hgrc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32078
diff
changeset
|
171 # uncomment to disable color in command output |
32094
2de67783dd31
color: point to the global help in the example hgrc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32093
diff
changeset
|
172 # (see 'hg help color' for details) |
32093
4d438efb825a
color: reflect the new default in the example hgrc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32078
diff
changeset
|
173 # color = never |
31124
791ea883fc44
config: suggest the 'ui.color' instead of the 'color' extension
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31119
diff
changeset
|
174 |
32100
21eb863187ea
pager: advertise the config option in the default hgrc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32097
diff
changeset
|
175 # uncomment to disable command output pagination |
21eb863187ea
pager: advertise the config option in the default hgrc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32097
diff
changeset
|
176 # (see 'hg help pager' for details) |
32104
f06d23af6cdf
pager: rename 'pager.enable' to 'ui.paginate'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32100
diff
changeset
|
177 # paginate = never |
32100
21eb863187ea
pager: advertise the config option in the default hgrc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32097
diff
changeset
|
178 |
22419
fdfc9faca273
ui: move samplehgrcs from config
Matt Mackall <mpm@selenic.com>
parents:
22291
diff
changeset
|
179 [extensions] |
41998
018acb7a3490
samplehgrcs: clarify which lines should be uncommented
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
41829
diff
changeset
|
180 # uncomment the lines below to enable some popular extensions |
29978
3d2ea1403c62
samplehgrcs: use single quotes in use warning
timeless <timeless@mozdev.org>
parents:
29762
diff
changeset
|
181 # (see 'hg help extensions' for more info) |
22419
fdfc9faca273
ui: move samplehgrcs from config
Matt Mackall <mpm@selenic.com>
parents:
22291
diff
changeset
|
182 # |
fdfc9faca273
ui: move samplehgrcs from config
Matt Mackall <mpm@selenic.com>
parents:
22291
diff
changeset
|
183 # blackbox = |
32096
726121fa86e1
config: use "churn" as an example extension
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32094
diff
changeset
|
184 # churn = |
32097
601bfcddccdc
config: drop pager from the recommended extension
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32096
diff
changeset
|
185 """, |
22419
fdfc9faca273
ui: move samplehgrcs from config
Matt Mackall <mpm@selenic.com>
parents:
22291
diff
changeset
|
186 } |
fdfc9faca273
ui: move samplehgrcs from config
Matt Mackall <mpm@selenic.com>
parents:
22291
diff
changeset
|
187 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
188 |
34482
75de5d456b60
ui: convert to/from Optional[bytes] to Optional[str] in password manager
Augie Fackler <augie@google.com>
parents:
34426
diff
changeset
|
189 def _maybestrurl(maybebytes): |
38575
152f4822d210
pycompat: move rapply() from util
Yuya Nishihara <yuya@tcha.org>
parents:
38526
diff
changeset
|
190 return pycompat.rapply(pycompat.strurl, maybebytes) |
34482
75de5d456b60
ui: convert to/from Optional[bytes] to Optional[str] in password manager
Augie Fackler <augie@google.com>
parents:
34426
diff
changeset
|
191 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
192 |
34482
75de5d456b60
ui: convert to/from Optional[bytes] to Optional[str] in password manager
Augie Fackler <augie@google.com>
parents:
34426
diff
changeset
|
193 def _maybebytesurl(maybestr): |
38575
152f4822d210
pycompat: move rapply() from util
Yuya Nishihara <yuya@tcha.org>
parents:
38526
diff
changeset
|
194 return pycompat.rapply(pycompat.bytesurl, maybestr) |
30945
8b83b626fb1e
ui: remove urllib2 from being imported early
Kyle Lippincott <spectral@google.com>
parents:
30932
diff
changeset
|
195 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
196 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48935
diff
changeset
|
197 class httppasswordmgrdbproxy: |
30945
8b83b626fb1e
ui: remove urllib2 from being imported early
Kyle Lippincott <spectral@google.com>
parents:
30932
diff
changeset
|
198 """Delays loading urllib2 until it's needed.""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
199 |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
200 def __init__(self) -> None: |
30945
8b83b626fb1e
ui: remove urllib2 from being imported early
Kyle Lippincott <spectral@google.com>
parents:
30932
diff
changeset
|
201 self._mgr = None |
8b83b626fb1e
ui: remove urllib2 from being imported early
Kyle Lippincott <spectral@google.com>
parents:
30932
diff
changeset
|
202 |
8b83b626fb1e
ui: remove urllib2 from being imported early
Kyle Lippincott <spectral@google.com>
parents:
30932
diff
changeset
|
203 def _get_mgr(self): |
8b83b626fb1e
ui: remove urllib2 from being imported early
Kyle Lippincott <spectral@google.com>
parents:
30932
diff
changeset
|
204 if self._mgr is None: |
8b83b626fb1e
ui: remove urllib2 from being imported early
Kyle Lippincott <spectral@google.com>
parents:
30932
diff
changeset
|
205 self._mgr = urlreq.httppasswordmgrwithdefaultrealm() |
8b83b626fb1e
ui: remove urllib2 from being imported early
Kyle Lippincott <spectral@google.com>
parents:
30932
diff
changeset
|
206 return self._mgr |
8b83b626fb1e
ui: remove urllib2 from being imported early
Kyle Lippincott <spectral@google.com>
parents:
30932
diff
changeset
|
207 |
34426
ae2fcf7af409
httppasswordmgrdbproxy: specify exact arguments
Augie Fackler <augie@google.com>
parents:
34367
diff
changeset
|
208 def add_password(self, realm, uris, user, passwd): |
34482
75de5d456b60
ui: convert to/from Optional[bytes] to Optional[str] in password manager
Augie Fackler <augie@google.com>
parents:
34426
diff
changeset
|
209 return self._get_mgr().add_password( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
210 _maybestrurl(realm), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
211 _maybestrurl(uris), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
212 _maybestrurl(user), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
213 _maybestrurl(passwd), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
214 ) |
30945
8b83b626fb1e
ui: remove urllib2 from being imported early
Kyle Lippincott <spectral@google.com>
parents:
30932
diff
changeset
|
215 |
34426
ae2fcf7af409
httppasswordmgrdbproxy: specify exact arguments
Augie Fackler <augie@google.com>
parents:
34367
diff
changeset
|
216 def find_user_password(self, realm, uri): |
35900
72de5c504833
py3: factor out helpers to apply string conversion recursively
Yuya Nishihara <yuya@tcha.org>
parents:
35897
diff
changeset
|
217 mgr = self._get_mgr() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
218 return _maybebytesurl( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
219 mgr.find_user_password(_maybestrurl(realm), _maybestrurl(uri)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
220 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
221 |
30945
8b83b626fb1e
ui: remove urllib2 from being imported early
Kyle Lippincott <spectral@google.com>
parents:
30932
diff
changeset
|
222 |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
223 def _catchterm(*args) -> NoReturn: |
30992
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
224 raise error.SignalInterrupt |
30945
8b83b626fb1e
ui: remove urllib2 from being imported early
Kyle Lippincott <spectral@google.com>
parents:
30932
diff
changeset
|
225 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
226 |
32958
4a3f1d362e5f
config: explicitly track the use of the standard default value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32872
diff
changeset
|
227 # unique object used to detect no default value has been provided when |
4a3f1d362e5f
config: explicitly track the use of the standard default value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32872
diff
changeset
|
228 # retrieving configuration value. |
4a3f1d362e5f
config: explicitly track the use of the standard default value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32872
diff
changeset
|
229 _unset = object() |
4a3f1d362e5f
config: explicitly track the use of the standard default value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32872
diff
changeset
|
230 |
34882
e9f320a40b44
ui: move request exit handlers to global state
Saurabh Singh <singhsrb@fb.com>
parents:
34858
diff
changeset
|
231 # _reqexithandlers: callbacks run at the end of a request |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
232 _reqexithandlers: List = [] |
34882
e9f320a40b44
ui: move request exit handlers to global state
Saurabh Singh <singhsrb@fb.com>
parents:
34858
diff
changeset
|
233 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
234 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48935
diff
changeset
|
235 class ui: |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
236 def __init__(self, src: Optional["ui"] = None) -> None: |
30559
d83ca854fa21
ui: factor out ui.load() to create a ui without loading configs (API)
Yuya Nishihara <yuya@tcha.org>
parents:
30537
diff
changeset
|
237 """Create a fresh new ui object if no src given |
d83ca854fa21
ui: factor out ui.load() to create a ui without loading configs (API)
Yuya Nishihara <yuya@tcha.org>
parents:
30537
diff
changeset
|
238 |
d83ca854fa21
ui: factor out ui.load() to create a ui without loading configs (API)
Yuya Nishihara <yuya@tcha.org>
parents:
30537
diff
changeset
|
239 Use uimod.ui.load() to create a ui which knows global and user configs. |
d83ca854fa21
ui: factor out ui.load() to create a ui without loading configs (API)
Yuya Nishihara <yuya@tcha.org>
parents:
30537
diff
changeset
|
240 In most cases, you should use ui.copy() to create a copy of an existing |
d83ca854fa21
ui: factor out ui.load() to create a ui without loading configs (API)
Yuya Nishihara <yuya@tcha.org>
parents:
30537
diff
changeset
|
241 ui object. |
d83ca854fa21
ui: factor out ui.load() to create a ui without loading configs (API)
Yuya Nishihara <yuya@tcha.org>
parents:
30537
diff
changeset
|
242 """ |
21132
350dc24a553d
ui: pushbuffer can now also capture stderr
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20788
diff
changeset
|
243 # _buffers: used for temporary capture of output |
8202 | 244 self._buffers = [] |
27106
6ef17697b03d
ui: track label expansion when creating buffers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27068
diff
changeset
|
245 # 3-tuple describing how each buffer in the stack behaves. |
6ef17697b03d
ui: track label expansion when creating buffers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27068
diff
changeset
|
246 # Values are (capture stderr, capture subprocesses, apply labels). |
21132
350dc24a553d
ui: pushbuffer can now also capture stderr
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20788
diff
changeset
|
247 self._bufferstates = [] |
27106
6ef17697b03d
ui: track label expansion when creating buffers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27068
diff
changeset
|
248 # When a buffer is active, defines whether we are expanding labels. |
6ef17697b03d
ui: track label expansion when creating buffers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27068
diff
changeset
|
249 # This exists to prevent an extra list lookup. |
6ef17697b03d
ui: track label expansion when creating buffers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27068
diff
changeset
|
250 self._bufferapplylabels = None |
9851
9e7b2c49d25d
Make it possible to debug failed hook imports via use of --traceback
Bryan O'Sullivan <bos@serpentine.com>
parents:
9786
diff
changeset
|
251 self.quiet = self.verbose = self.debugflag = self.tracebackflag = False |
8208
32a2a1e244f1
ui: make interactive a method
Matt Mackall <mpm@selenic.com>
parents:
8206
diff
changeset
|
252 self._reportuntrusted = True |
32984
6d983e8af49c
configitems: introduce a central registry for config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32967
diff
changeset
|
253 self._knownconfig = configitems.coreitems |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
254 self._ocfg = config.config() # overlay |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
255 self._tcfg = config.config() # trusted |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
256 self._ucfg = config.config() # untrusted |
8478
d728f126c1b7
ui: use set instead of dict
Martin Geisler <mg@lazybytes.net>
parents:
8409
diff
changeset
|
257 self._trustusers = set() |
d728f126c1b7
ui: use set instead of dict
Martin Geisler <mg@lazybytes.net>
parents:
8409
diff
changeset
|
258 self._trustgroups = set() |
17048
15d4d475de9e
ui: add a variable to control whether hooks should be called
Idan Kamara <idankk86@gmail.com>
parents:
16383
diff
changeset
|
259 self.callhooks = True |
47272
a671832a8e41
urlutil: move url "fixing" at the time of `ui.paths` initialization
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47233
diff
changeset
|
260 # hold the root to use for each [paths] entry |
a671832a8e41
urlutil: move url "fixing" at the time of `ui.paths` initialization
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47233
diff
changeset
|
261 self._path_to_root = {} |
29109
e9ce33c642e8
ui: add an instance flag to hold --insecure bit
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29096
diff
changeset
|
262 # Insecure server connections requested. |
e9ce33c642e8
ui: add an instance flag to hold --insecure bit
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29096
diff
changeset
|
263 self.insecureconnections = False |
30976
e92daf156d5c
ui: provide a mechanism to track and log blocked time
Simon Farnsworth <simonfar@fb.com>
parents:
30945
diff
changeset
|
264 # Blocked time |
e92daf156d5c
ui: provide a mechanism to track and log blocked time
Simon Farnsworth <simonfar@fb.com>
parents:
30945
diff
changeset
|
265 self.logblockedtimes = False |
31106
a185b903bda3
color: have the 'ui' object carry the '_colormode' directly
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31094
diff
changeset
|
266 # color mode: see mercurial/color.py for possible value |
a185b903bda3
color: have the 'ui' object carry the '_colormode' directly
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31094
diff
changeset
|
267 self._colormode = None |
31113
268caf97c38f
color: move the dict with terminfo parameters on the ui object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31108
diff
changeset
|
268 self._terminfoparams = {} |
31115
f5131d4f512a
color: move 'styles' definition on the 'ui' object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31114
diff
changeset
|
269 self._styles = {} |
38526
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
38345
diff
changeset
|
270 self._uninterruptible = False |
45025
24b1a8eb73aa
ui: add option to timestamp status and diagnostic messages
Joerg Sonnenberger <joerg@bec.de>
parents:
44992
diff
changeset
|
271 self.showtimestamp = False |
8136
6b5522cb2ad2
ui: refactor option setting
Matt Mackall <mpm@selenic.com>
parents:
8135
diff
changeset
|
272 |
8190
9b8ac5fb7760
ui: kill most users of parentui name and arg, replace with .copy()
Matt Mackall <mpm@selenic.com>
parents:
8189
diff
changeset
|
273 if src: |
40543
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
274 self._fout = src._fout |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
275 self._ferr = src._ferr |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
276 self._fin = src._fin |
40587
5542bc9125c9
dispatch: pass around ui.fmsg channel
Yuya Nishihara <yuya@tcha.org>
parents:
40578
diff
changeset
|
277 self._fmsg = src._fmsg |
40547
840cd57cde32
ui: add config knob to redirect status messages to stderr (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40543
diff
changeset
|
278 self._fmsgout = src._fmsgout |
840cd57cde32
ui: add config knob to redirect status messages to stderr (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40543
diff
changeset
|
279 self._fmsgerr = src._fmsgerr |
39809
23a00bc90a3c
chgserver: do not send system() back to client if stdio redirected (issue5992)
Yuya Nishihara <yuya@tcha.org>
parents:
38762
diff
changeset
|
280 self._finoutredirected = src._finoutredirected |
40730
55b053af7196
ui: manage logger instances and event filtering by core ui
Yuya Nishihara <yuya@tcha.org>
parents:
40678
diff
changeset
|
281 self._loggers = src._loggers.copy() |
30992
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
282 self.pageractive = src.pageractive |
31026
9c827087df38
ui: rename neverpager to disablepager
Augie Fackler <augie@google.com>
parents:
31014
diff
changeset
|
283 self._disablepager = src._disablepager |
32872
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
284 self._tweaked = src._tweaked |
14612 | 285 |
8203 | 286 self._tcfg = src._tcfg.copy() |
287 self._ucfg = src._ucfg.copy() | |
288 self._ocfg = src._ocfg.copy() | |
8201
7cf2b987acd3
ui: trusted_users -> _trustusers, trusted_groups -> _trustgroups
Matt Mackall <mpm@selenic.com>
parents:
8200
diff
changeset
|
289 self._trustusers = src._trustusers.copy() |
7cf2b987acd3
ui: trusted_users -> _trustusers, trusted_groups -> _trustgroups
Matt Mackall <mpm@selenic.com>
parents:
8200
diff
changeset
|
290 self._trustgroups = src._trustgroups.copy() |
9887
38170eeed18c
ui: add environ property to access os.environ or wsgirequest.environ
Sune Foldager <cryo@cyanite.org>
parents:
9851
diff
changeset
|
291 self.environ = src.environ |
17048
15d4d475de9e
ui: add a variable to control whether hooks should be called
Idan Kamara <idankk86@gmail.com>
parents:
16383
diff
changeset
|
292 self.callhooks = src.callhooks |
47272
a671832a8e41
urlutil: move url "fixing" at the time of `ui.paths` initialization
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47233
diff
changeset
|
293 self._path_to_root = src._path_to_root |
29109
e9ce33c642e8
ui: add an instance flag to hold --insecure bit
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29096
diff
changeset
|
294 self.insecureconnections = src.insecureconnections |
31106
a185b903bda3
color: have the 'ui' object carry the '_colormode' directly
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31094
diff
changeset
|
295 self._colormode = src._colormode |
31113
268caf97c38f
color: move the dict with terminfo parameters on the ui object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31108
diff
changeset
|
296 self._terminfoparams = src._terminfoparams.copy() |
31115
f5131d4f512a
color: move 'styles' definition on the 'ui' object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31114
diff
changeset
|
297 self._styles = src._styles.copy() |
31106
a185b903bda3
color: have the 'ui' object carry the '_colormode' directly
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31094
diff
changeset
|
298 |
8143
507c49e297e1
ui: simplify init, kill dupconfig
Matt Mackall <mpm@selenic.com>
parents:
8142
diff
changeset
|
299 self.fixconfig() |
29378
fea71f66ebff
url: remember http password database in ui object
liscju <piotr.listkiewicz@gmail.com>
parents:
29366
diff
changeset
|
300 |
fea71f66ebff
url: remember http password database in ui object
liscju <piotr.listkiewicz@gmail.com>
parents:
29366
diff
changeset
|
301 self.httppasswordmgrdb = src.httppasswordmgrdb |
30976
e92daf156d5c
ui: provide a mechanism to track and log blocked time
Simon Farnsworth <simonfar@fb.com>
parents:
30945
diff
changeset
|
302 self._blockedtimes = src._blockedtimes |
8143
507c49e297e1
ui: simplify init, kill dupconfig
Matt Mackall <mpm@selenic.com>
parents:
8142
diff
changeset
|
303 else: |
40543
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
304 self._fout = procutil.stdout |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
305 self._ferr = procutil.stderr |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
306 self._fin = procutil.stdin |
40587
5542bc9125c9
dispatch: pass around ui.fmsg channel
Yuya Nishihara <yuya@tcha.org>
parents:
40578
diff
changeset
|
307 self._fmsg = None |
40547
840cd57cde32
ui: add config knob to redirect status messages to stderr (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40543
diff
changeset
|
308 self._fmsgout = self.fout # configurable |
840cd57cde32
ui: add config knob to redirect status messages to stderr (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40543
diff
changeset
|
309 self._fmsgerr = self.ferr # configurable |
39809
23a00bc90a3c
chgserver: do not send system() back to client if stdio redirected (issue5992)
Yuya Nishihara <yuya@tcha.org>
parents:
38762
diff
changeset
|
310 self._finoutredirected = False |
40730
55b053af7196
ui: manage logger instances and event filtering by core ui
Yuya Nishihara <yuya@tcha.org>
parents:
40678
diff
changeset
|
311 self._loggers = {} |
30992
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
312 self.pageractive = False |
31026
9c827087df38
ui: rename neverpager to disablepager
Augie Fackler <augie@google.com>
parents:
31014
diff
changeset
|
313 self._disablepager = False |
32872
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
314 self._tweaked = False |
14612 | 315 |
9887
38170eeed18c
ui: add environ property to access os.environ or wsgirequest.environ
Sune Foldager <cryo@cyanite.org>
parents:
9851
diff
changeset
|
316 # shared read-only environment |
30637
344e68882cd3
py3: replace os.environ with encoding.environ (part 4 of 5)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30618
diff
changeset
|
317 self.environ = encoding.environ |
8222
d30a21594812
more whitespace cleanup and some other style nits
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8220
diff
changeset
|
318 |
30945
8b83b626fb1e
ui: remove urllib2 from being imported early
Kyle Lippincott <spectral@google.com>
parents:
30932
diff
changeset
|
319 self.httppasswordmgrdb = httppasswordmgrdbproxy() |
30976
e92daf156d5c
ui: provide a mechanism to track and log blocked time
Simon Farnsworth <simonfar@fb.com>
parents:
30945
diff
changeset
|
320 self._blockedtimes = collections.defaultdict(int) |
29378
fea71f66ebff
url: remember http password database in ui object
liscju <piotr.listkiewicz@gmail.com>
parents:
29366
diff
changeset
|
321 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
322 allowed = self.configlist(b'experimental', b'exportableenviron') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
323 if b'*' in allowed: |
30832
da5fa0f13a41
ui: introduce an experimental dict of exportable environment variables
Matt Harbison <matt_harbison@yahoo.com>
parents:
30814
diff
changeset
|
324 self._exportableenviron = self.environ |
da5fa0f13a41
ui: introduce an experimental dict of exportable environment variables
Matt Harbison <matt_harbison@yahoo.com>
parents:
30814
diff
changeset
|
325 else: |
da5fa0f13a41
ui: introduce an experimental dict of exportable environment variables
Matt Harbison <matt_harbison@yahoo.com>
parents:
30814
diff
changeset
|
326 self._exportableenviron = {} |
da5fa0f13a41
ui: introduce an experimental dict of exportable environment variables
Matt Harbison <matt_harbison@yahoo.com>
parents:
30814
diff
changeset
|
327 for k in allowed: |
da5fa0f13a41
ui: introduce an experimental dict of exportable environment variables
Matt Harbison <matt_harbison@yahoo.com>
parents:
30814
diff
changeset
|
328 if k in self.environ: |
da5fa0f13a41
ui: introduce an experimental dict of exportable environment variables
Matt Harbison <matt_harbison@yahoo.com>
parents:
30814
diff
changeset
|
329 self._exportableenviron[k] = self.environ[k] |
da5fa0f13a41
ui: introduce an experimental dict of exportable environment variables
Matt Harbison <matt_harbison@yahoo.com>
parents:
30814
diff
changeset
|
330 |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
331 def _new_source(self) -> None: |
46622
a3dced4b7b04
config: track the "level" of a value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46620
diff
changeset
|
332 self._ocfg.new_source() |
a3dced4b7b04
config: track the "level" of a value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46620
diff
changeset
|
333 self._tcfg.new_source() |
a3dced4b7b04
config: track the "level" of a value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46620
diff
changeset
|
334 self._ucfg.new_source() |
a3dced4b7b04
config: track the "level" of a value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46620
diff
changeset
|
335 |
30559
d83ca854fa21
ui: factor out ui.load() to create a ui without loading configs (API)
Yuya Nishihara <yuya@tcha.org>
parents:
30537
diff
changeset
|
336 @classmethod |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
337 def load(cls: Type[_Tui]) -> _Tui: |
30559
d83ca854fa21
ui: factor out ui.load() to create a ui without loading configs (API)
Yuya Nishihara <yuya@tcha.org>
parents:
30537
diff
changeset
|
338 """Create a ui and load global and user configs""" |
d83ca854fa21
ui: factor out ui.load() to create a ui without loading configs (API)
Yuya Nishihara <yuya@tcha.org>
parents:
30537
diff
changeset
|
339 u = cls() |
31685
d83e51654c8a
rcutil: let environ override system configs (BC)
Jun Wu <quark@fb.com>
parents:
31683
diff
changeset
|
340 # we always trust global config files and environment variables |
31683
00e569a2da97
rcutil: let rccomponents return different types of configs (API)
Jun Wu <quark@fb.com>
parents:
31682
diff
changeset
|
341 for t, f in rcutil.rccomponents(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
342 if t == b'path': |
31683
00e569a2da97
rcutil: let rccomponents return different types of configs (API)
Jun Wu <quark@fb.com>
parents:
31682
diff
changeset
|
343 u.readconfig(f, trust=True) |
44031
1864efbe90d9
ui: add the ability to apply `defaultrc` configs from resources
Matt Harbison <matt_harbison@yahoo.com>
parents:
44030
diff
changeset
|
344 elif t == b'resource': |
1864efbe90d9
ui: add the ability to apply `defaultrc` configs from resources
Matt Harbison <matt_harbison@yahoo.com>
parents:
44030
diff
changeset
|
345 u.read_resource_config(f, trust=True) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
346 elif t == b'items': |
46622
a3dced4b7b04
config: track the "level" of a value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46620
diff
changeset
|
347 u._new_source() |
31685
d83e51654c8a
rcutil: let environ override system configs (BC)
Jun Wu <quark@fb.com>
parents:
31683
diff
changeset
|
348 sections = set() |
d83e51654c8a
rcutil: let environ override system configs (BC)
Jun Wu <quark@fb.com>
parents:
31683
diff
changeset
|
349 for section, name, value, source in f: |
d83e51654c8a
rcutil: let environ override system configs (BC)
Jun Wu <quark@fb.com>
parents:
31683
diff
changeset
|
350 # do not set u._ocfg |
d83e51654c8a
rcutil: let environ override system configs (BC)
Jun Wu <quark@fb.com>
parents:
31683
diff
changeset
|
351 # XXX clean this up once immutable config object is a thing |
d83e51654c8a
rcutil: let environ override system configs (BC)
Jun Wu <quark@fb.com>
parents:
31683
diff
changeset
|
352 u._tcfg.set(section, name, value, source) |
d83e51654c8a
rcutil: let environ override system configs (BC)
Jun Wu <quark@fb.com>
parents:
31683
diff
changeset
|
353 u._ucfg.set(section, name, value, source) |
d83e51654c8a
rcutil: let environ override system configs (BC)
Jun Wu <quark@fb.com>
parents:
31683
diff
changeset
|
354 sections.add(section) |
d83e51654c8a
rcutil: let environ override system configs (BC)
Jun Wu <quark@fb.com>
parents:
31683
diff
changeset
|
355 for section in sections: |
d83e51654c8a
rcutil: let environ override system configs (BC)
Jun Wu <quark@fb.com>
parents:
31683
diff
changeset
|
356 u.fixconfig(section=section) |
31683
00e569a2da97
rcutil: let rccomponents return different types of configs (API)
Jun Wu <quark@fb.com>
parents:
31682
diff
changeset
|
357 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
358 raise error.ProgrammingError(b'unknown rctype: %s' % t) |
32872
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
359 u._maybetweakdefaults() |
46622
a3dced4b7b04
config: track the "level" of a value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46620
diff
changeset
|
360 u._new_source() # anything after that is a different level |
30559
d83ca854fa21
ui: factor out ui.load() to create a ui without loading configs (API)
Yuya Nishihara <yuya@tcha.org>
parents:
30537
diff
changeset
|
361 return u |
d83ca854fa21
ui: factor out ui.load() to create a ui without loading configs (API)
Yuya Nishihara <yuya@tcha.org>
parents:
30537
diff
changeset
|
362 |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
363 def _maybetweakdefaults(self) -> None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
364 if not self.configbool(b'ui', b'tweakdefaults'): |
32872
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
365 return |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
366 if self._tweaked or self.plain(b'tweakdefaults'): |
32872
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
367 return |
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
368 |
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
369 # Note: it is SUPER IMPORTANT that you set self._tweaked to |
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
370 # True *before* any calls to setconfig(), otherwise you'll get |
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
371 # infinite recursion between setconfig and this method. |
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
372 # |
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
373 # TODO: We should extract an inner method in setconfig() to |
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
374 # avoid this weirdness. |
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
375 self._tweaked = True |
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
376 tmpcfg = config.config() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
377 tmpcfg.parse(b'<tweakdefaults>', tweakrc) |
32872
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
378 for section in tmpcfg: |
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
379 for name, value in tmpcfg.items(section): |
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
380 if not self.hasconfig(section, name): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
381 self.setconfig(section, name, value, b"<tweakdefaults>") |
32872
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
382 |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
383 def copy(self: _Tui) -> _Tui: |
8220
6e6ebeb52899
ui: ui.copy() now takes the ui class into account
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
8208
diff
changeset
|
384 return self.__class__(self) |
1839
876e4e6ad82b
Create local ui object per repository, so .hg/hgrc don't get mixed.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1637
diff
changeset
|
385 |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
386 def resetstate(self) -> None: |
29366
d269e7db2f55
ui: provide official way to reset internal state per command
Yuya Nishihara <yuya@tcha.org>
parents:
29109
diff
changeset
|
387 """Clear internal state that shouldn't persist across commands""" |
d269e7db2f55
ui: provide official way to reset internal state per command
Yuya Nishihara <yuya@tcha.org>
parents:
29109
diff
changeset
|
388 if self._progbar: |
d269e7db2f55
ui: provide official way to reset internal state per command
Yuya Nishihara <yuya@tcha.org>
parents:
29109
diff
changeset
|
389 self._progbar.resetstate() # reset last-print time of progress bar |
30945
8b83b626fb1e
ui: remove urllib2 from being imported early
Kyle Lippincott <spectral@google.com>
parents:
30932
diff
changeset
|
390 self.httppasswordmgrdb = httppasswordmgrdbproxy() |
29366
d269e7db2f55
ui: provide official way to reset internal state per command
Yuya Nishihara <yuya@tcha.org>
parents:
29109
diff
changeset
|
391 |
30976
e92daf156d5c
ui: provide a mechanism to track and log blocked time
Simon Farnsworth <simonfar@fb.com>
parents:
30945
diff
changeset
|
392 @contextlib.contextmanager |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
393 def timeblockedsection(self, key: bytes): |
30978
fdecd24ca4dc
ui: log time spent blocked on stdio
Simon Farnsworth <simonfar@fb.com>
parents:
30976
diff
changeset
|
394 # this is open-coded below - search for timeblockedsection to find them |
30976
e92daf156d5c
ui: provide a mechanism to track and log blocked time
Simon Farnsworth <simonfar@fb.com>
parents:
30945
diff
changeset
|
395 starttime = util.timer() |
e92daf156d5c
ui: provide a mechanism to track and log blocked time
Simon Farnsworth <simonfar@fb.com>
parents:
30945
diff
changeset
|
396 try: |
e92daf156d5c
ui: provide a mechanism to track and log blocked time
Simon Farnsworth <simonfar@fb.com>
parents:
30945
diff
changeset
|
397 yield |
e92daf156d5c
ui: provide a mechanism to track and log blocked time
Simon Farnsworth <simonfar@fb.com>
parents:
30945
diff
changeset
|
398 finally: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
399 self._blockedtimes[key + b'_blocked'] += ( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
400 util.timer() - starttime |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
401 ) * 1000 |
29366
d269e7db2f55
ui: provide official way to reset internal state per command
Yuya Nishihara <yuya@tcha.org>
parents:
29109
diff
changeset
|
402 |
38526
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
38345
diff
changeset
|
403 @contextlib.contextmanager |
41076
8ecb17b7f432
procutil: correct spelling of uninterruptable -> uninterruptible
Kyle Lippincott <spectral@google.com>
parents:
41063
diff
changeset
|
404 def uninterruptible(self): |
38526
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
38345
diff
changeset
|
405 """Mark an operation as unsafe. |
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
38345
diff
changeset
|
406 |
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
38345
diff
changeset
|
407 Most operations on a repository are safe to interrupt, but a |
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
38345
diff
changeset
|
408 few are risky (for example repair.strip). This context manager |
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
38345
diff
changeset
|
409 lets you advise Mercurial that something risky is happening so |
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
38345
diff
changeset
|
410 that control-C etc can be blocked if desired. |
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
38345
diff
changeset
|
411 """ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
412 enabled = self.configbool(b'experimental', b'nointerrupt') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
413 if enabled and self.configbool( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
414 b'experimental', b'nointerrupt-interactiveonly' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
415 ): |
38526
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
38345
diff
changeset
|
416 enabled = self.interactive() |
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
38345
diff
changeset
|
417 if self._uninterruptible or not enabled: |
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
38345
diff
changeset
|
418 # if nointerrupt support is turned off, the process isn't |
41076
8ecb17b7f432
procutil: correct spelling of uninterruptable -> uninterruptible
Kyle Lippincott <spectral@google.com>
parents:
41063
diff
changeset
|
419 # interactive, or we're already in an uninterruptible |
38526
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
38345
diff
changeset
|
420 # block, do nothing. |
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
38345
diff
changeset
|
421 yield |
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
38345
diff
changeset
|
422 return |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
423 |
38526
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
38345
diff
changeset
|
424 def warn(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
425 self.warn(_(b"shutting down cleanly\n")) |
38526
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
38345
diff
changeset
|
426 self.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
427 _(b"press ^C again to terminate immediately (dangerous)\n") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
428 ) |
38526
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
38345
diff
changeset
|
429 return True |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
430 |
41076
8ecb17b7f432
procutil: correct spelling of uninterruptable -> uninterruptible
Kyle Lippincott <spectral@google.com>
parents:
41063
diff
changeset
|
431 with procutil.uninterruptible(warn): |
38526
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
38345
diff
changeset
|
432 try: |
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
38345
diff
changeset
|
433 self._uninterruptible = True |
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
38345
diff
changeset
|
434 yield |
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
38345
diff
changeset
|
435 finally: |
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
38345
diff
changeset
|
436 self._uninterruptible = False |
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
38345
diff
changeset
|
437 |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
438 def formatter(self, topic: bytes, opts): |
32579
012e0da5b759
formatter: add option to redirect output to file object
Yuya Nishihara <yuya@tcha.org>
parents:
32462
diff
changeset
|
439 return formatter.formatter(self, self, topic, opts) |
16135 | 440 |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
441 def _trusted(self, fp, f: bytes) -> bool: |
3677
1a0fa3914c46
Avoid looking up usernames if the current user owns the .hgrc file
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3676
diff
changeset
|
442 st = util.fstat(fp) |
8657
3fa92c618624
posix: do not use fstat in isowner
Martin Geisler <mg@lazybytes.net>
parents:
8656
diff
changeset
|
443 if util.isowner(st): |
3677
1a0fa3914c46
Avoid looking up usernames if the current user owns the .hgrc file
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3676
diff
changeset
|
444 return True |
8141
e40b629bedd1
ui: cleanup _is_trusted a bit
Matt Mackall <mpm@selenic.com>
parents:
8140
diff
changeset
|
445 |
8201
7cf2b987acd3
ui: trusted_users -> _trustusers, trusted_groups -> _trustgroups
Matt Mackall <mpm@selenic.com>
parents:
8200
diff
changeset
|
446 tusers, tgroups = self._trustusers, self._trustgroups |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
447 if b'*' in tusers or b'*' in tgroups: |
8141
e40b629bedd1
ui: cleanup _is_trusted a bit
Matt Mackall <mpm@selenic.com>
parents:
8140
diff
changeset
|
448 return True |
e40b629bedd1
ui: cleanup _is_trusted a bit
Matt Mackall <mpm@selenic.com>
parents:
8140
diff
changeset
|
449 |
e40b629bedd1
ui: cleanup _is_trusted a bit
Matt Mackall <mpm@selenic.com>
parents:
8140
diff
changeset
|
450 user = util.username(st.st_uid) |
e40b629bedd1
ui: cleanup _is_trusted a bit
Matt Mackall <mpm@selenic.com>
parents:
8140
diff
changeset
|
451 group = util.groupname(st.st_gid) |
e40b629bedd1
ui: cleanup _is_trusted a bit
Matt Mackall <mpm@selenic.com>
parents:
8140
diff
changeset
|
452 if user in tusers or group in tgroups or user == util.username(): |
e40b629bedd1
ui: cleanup _is_trusted a bit
Matt Mackall <mpm@selenic.com>
parents:
8140
diff
changeset
|
453 return True |
e40b629bedd1
ui: cleanup _is_trusted a bit
Matt Mackall <mpm@selenic.com>
parents:
8140
diff
changeset
|
454 |
8204 | 455 if self._reportuntrusted: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
456 self.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
457 _( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
458 b'not trusting file %s from untrusted ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
459 b'user %s, group %s\n' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
460 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
461 % (f, user, group) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
462 ) |
8141
e40b629bedd1
ui: cleanup _is_trusted a bit
Matt Mackall <mpm@selenic.com>
parents:
8140
diff
changeset
|
463 return False |
3551
3b07e223534b
Only read .hg/hgrc files from trusted users/groups
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3489
diff
changeset
|
464 |
44030
5ac0e6f19eb4
ui: refactor `readconfig()` into a form that can consume resources
Matt Harbison <matt_harbison@yahoo.com>
parents:
44021
diff
changeset
|
465 def read_resource_config( |
5ac0e6f19eb4
ui: refactor `readconfig()` into a form that can consume resources
Matt Harbison <matt_harbison@yahoo.com>
parents:
44021
diff
changeset
|
466 self, name, root=None, trust=False, sections=None, remap=None |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
467 ) -> None: |
44030
5ac0e6f19eb4
ui: refactor `readconfig()` into a form that can consume resources
Matt Harbison <matt_harbison@yahoo.com>
parents:
44021
diff
changeset
|
468 try: |
5ac0e6f19eb4
ui: refactor `readconfig()` into a form that can consume resources
Matt Harbison <matt_harbison@yahoo.com>
parents:
44021
diff
changeset
|
469 fp = resourceutil.open_resource(name[0], name[1]) |
5ac0e6f19eb4
ui: refactor `readconfig()` into a form that can consume resources
Matt Harbison <matt_harbison@yahoo.com>
parents:
44021
diff
changeset
|
470 except IOError: |
5ac0e6f19eb4
ui: refactor `readconfig()` into a form that can consume resources
Matt Harbison <matt_harbison@yahoo.com>
parents:
44021
diff
changeset
|
471 if not sections: # ignore unless we were looking for something |
5ac0e6f19eb4
ui: refactor `readconfig()` into a form that can consume resources
Matt Harbison <matt_harbison@yahoo.com>
parents:
44021
diff
changeset
|
472 return |
5ac0e6f19eb4
ui: refactor `readconfig()` into a form that can consume resources
Matt Harbison <matt_harbison@yahoo.com>
parents:
44021
diff
changeset
|
473 raise |
5ac0e6f19eb4
ui: refactor `readconfig()` into a form that can consume resources
Matt Harbison <matt_harbison@yahoo.com>
parents:
44021
diff
changeset
|
474 |
5ac0e6f19eb4
ui: refactor `readconfig()` into a form that can consume resources
Matt Harbison <matt_harbison@yahoo.com>
parents:
44021
diff
changeset
|
475 self._readconfig( |
5ac0e6f19eb4
ui: refactor `readconfig()` into a form that can consume resources
Matt Harbison <matt_harbison@yahoo.com>
parents:
44021
diff
changeset
|
476 b'resource:%s.%s' % name, fp, root, trust, sections, remap |
5ac0e6f19eb4
ui: refactor `readconfig()` into a form that can consume resources
Matt Harbison <matt_harbison@yahoo.com>
parents:
44021
diff
changeset
|
477 ) |
5ac0e6f19eb4
ui: refactor `readconfig()` into a form that can consume resources
Matt Harbison <matt_harbison@yahoo.com>
parents:
44021
diff
changeset
|
478 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
479 def readconfig( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
480 self, filename, root=None, trust=False, sections=None, remap=None |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
481 ) -> None: |
8142
912bfef12ba6
ui: fold readsections into readconfig
Matt Mackall <mpm@selenic.com>
parents:
8141
diff
changeset
|
482 try: |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43377
diff
changeset
|
483 fp = open(filename, 'rb') |
8142
912bfef12ba6
ui: fold readsections into readconfig
Matt Mackall <mpm@selenic.com>
parents:
8141
diff
changeset
|
484 except IOError: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
485 if not sections: # ignore unless we were looking for something |
8142
912bfef12ba6
ui: fold readsections into readconfig
Matt Mackall <mpm@selenic.com>
parents:
8141
diff
changeset
|
486 return |
912bfef12ba6
ui: fold readsections into readconfig
Matt Mackall <mpm@selenic.com>
parents:
8141
diff
changeset
|
487 raise |
8139 | 488 |
44030
5ac0e6f19eb4
ui: refactor `readconfig()` into a form that can consume resources
Matt Harbison <matt_harbison@yahoo.com>
parents:
44021
diff
changeset
|
489 self._readconfig(filename, fp, root, trust, sections, remap) |
5ac0e6f19eb4
ui: refactor `readconfig()` into a form that can consume resources
Matt Harbison <matt_harbison@yahoo.com>
parents:
44021
diff
changeset
|
490 |
5ac0e6f19eb4
ui: refactor `readconfig()` into a form that can consume resources
Matt Harbison <matt_harbison@yahoo.com>
parents:
44021
diff
changeset
|
491 def _readconfig( |
5ac0e6f19eb4
ui: refactor `readconfig()` into a form that can consume resources
Matt Harbison <matt_harbison@yahoo.com>
parents:
44021
diff
changeset
|
492 self, filename, fp, root=None, trust=False, sections=None, remap=None |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
493 ) -> None: |
43910
c41ed5d4f770
config: close file even if we fail to read it
Martin von Zweigbergk <martinvonz@google.com>
parents:
43909
diff
changeset
|
494 with fp: |
c41ed5d4f770
config: close file even if we fail to read it
Martin von Zweigbergk <martinvonz@google.com>
parents:
43909
diff
changeset
|
495 cfg = config.config() |
c41ed5d4f770
config: close file even if we fail to read it
Martin von Zweigbergk <martinvonz@google.com>
parents:
43909
diff
changeset
|
496 trusted = sections or trust or self._trusted(fp, filename) |
3552
9b52239dc740
save settings from untrusted config files in a separate configparser
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3551
diff
changeset
|
497 |
43910
c41ed5d4f770
config: close file even if we fail to read it
Martin von Zweigbergk <martinvonz@google.com>
parents:
43909
diff
changeset
|
498 try: |
c41ed5d4f770
config: close file even if we fail to read it
Martin von Zweigbergk <martinvonz@google.com>
parents:
43909
diff
changeset
|
499 cfg.read(filename, fp, sections=sections, remap=remap) |
45894
9dc1351d0b5f
errors: raise ConfigError on failure to parse config file
Martin von Zweigbergk <martinvonz@google.com>
parents:
45889
diff
changeset
|
500 except error.ConfigError as inst: |
43910
c41ed5d4f770
config: close file even if we fail to read it
Martin von Zweigbergk <martinvonz@google.com>
parents:
43909
diff
changeset
|
501 if trusted: |
c41ed5d4f770
config: close file even if we fail to read it
Martin von Zweigbergk <martinvonz@google.com>
parents:
43909
diff
changeset
|
502 raise |
45889
e5a0efd26f7a
config: clean up message about ignored untrusted config
Martin von Zweigbergk <martinvonz@google.com>
parents:
45877
diff
changeset
|
503 self.warn( |
e5a0efd26f7a
config: clean up message about ignored untrusted config
Martin von Zweigbergk <martinvonz@google.com>
parents:
45877
diff
changeset
|
504 _(b'ignored %s: %s\n') % (inst.location, inst.message) |
e5a0efd26f7a
config: clean up message about ignored untrusted config
Martin von Zweigbergk <martinvonz@google.com>
parents:
45877
diff
changeset
|
505 ) |
3552
9b52239dc740
save settings from untrusted config files in a separate configparser
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3551
diff
changeset
|
506 |
44126
e2278581b1c6
config: add a function to insert non-file based, but overridable settings
Matt Harbison <matt_harbison@yahoo.com>
parents:
44031
diff
changeset
|
507 self._applyconfig(cfg, trusted, root) |
e2278581b1c6
config: add a function to insert non-file based, but overridable settings
Matt Harbison <matt_harbison@yahoo.com>
parents:
44031
diff
changeset
|
508 |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
509 def applyconfig( |
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
510 self, configitems: _ConfigItems, source=b"", root=None |
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
511 ) -> None: |
44126
e2278581b1c6
config: add a function to insert non-file based, but overridable settings
Matt Harbison <matt_harbison@yahoo.com>
parents:
44031
diff
changeset
|
512 """Add configitems from a non-file source. Unlike with ``setconfig()``, |
e2278581b1c6
config: add a function to insert non-file based, but overridable settings
Matt Harbison <matt_harbison@yahoo.com>
parents:
44031
diff
changeset
|
513 they can be overridden by subsequent config file reads. The items are |
e2278581b1c6
config: add a function to insert non-file based, but overridable settings
Matt Harbison <matt_harbison@yahoo.com>
parents:
44031
diff
changeset
|
514 in the same format as ``configoverride()``, namely a dict of the |
e2278581b1c6
config: add a function to insert non-file based, but overridable settings
Matt Harbison <matt_harbison@yahoo.com>
parents:
44031
diff
changeset
|
515 following structures: {(section, name) : value} |
e2278581b1c6
config: add a function to insert non-file based, but overridable settings
Matt Harbison <matt_harbison@yahoo.com>
parents:
44031
diff
changeset
|
516 |
e2278581b1c6
config: add a function to insert non-file based, but overridable settings
Matt Harbison <matt_harbison@yahoo.com>
parents:
44031
diff
changeset
|
517 Typically this is used by extensions that inject themselves into the |
e2278581b1c6
config: add a function to insert non-file based, but overridable settings
Matt Harbison <matt_harbison@yahoo.com>
parents:
44031
diff
changeset
|
518 config file load procedure by monkeypatching ``localrepo.loadhgrc()``. |
e2278581b1c6
config: add a function to insert non-file based, but overridable settings
Matt Harbison <matt_harbison@yahoo.com>
parents:
44031
diff
changeset
|
519 """ |
e2278581b1c6
config: add a function to insert non-file based, but overridable settings
Matt Harbison <matt_harbison@yahoo.com>
parents:
44031
diff
changeset
|
520 cfg = config.config() |
e2278581b1c6
config: add a function to insert non-file based, but overridable settings
Matt Harbison <matt_harbison@yahoo.com>
parents:
44031
diff
changeset
|
521 |
e2278581b1c6
config: add a function to insert non-file based, but overridable settings
Matt Harbison <matt_harbison@yahoo.com>
parents:
44031
diff
changeset
|
522 for (section, name), value in configitems.items(): |
e2278581b1c6
config: add a function to insert non-file based, but overridable settings
Matt Harbison <matt_harbison@yahoo.com>
parents:
44031
diff
changeset
|
523 cfg.set(section, name, value, source) |
e2278581b1c6
config: add a function to insert non-file based, but overridable settings
Matt Harbison <matt_harbison@yahoo.com>
parents:
44031
diff
changeset
|
524 |
e2278581b1c6
config: add a function to insert non-file based, but overridable settings
Matt Harbison <matt_harbison@yahoo.com>
parents:
44031
diff
changeset
|
525 self._applyconfig(cfg, True, root) |
e2278581b1c6
config: add a function to insert non-file based, but overridable settings
Matt Harbison <matt_harbison@yahoo.com>
parents:
44031
diff
changeset
|
526 |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
527 def _applyconfig(self, cfg, trusted, root) -> None: |
10455
40dfd46d098f
ui: add HGPLAIN environment variable for easier scripting
Brodie Rao <me+hg@dackz.net>
parents:
10426
diff
changeset
|
528 if self.plain(): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
529 for k in ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
530 b'debug', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
531 b'fallbackencoding', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
532 b'quiet', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
533 b'slash', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
534 b'logtemplate', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
535 b'message-output', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
536 b'statuscopies', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
537 b'style', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
538 b'traceback', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
539 b'verbose', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
540 ): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
541 if k in cfg[b'ui']: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
542 del cfg[b'ui'][k] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
543 for k, v in cfg.items(b'defaults'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
544 del cfg[b'defaults'][k] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
545 for k, v in cfg.items(b'commands'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
546 del cfg[b'commands'][k] |
45765
ed84a4d48910
config: add a new [command-templates] section for templates defined by hg
Martin von Zweigbergk <martinvonz@google.com>
parents:
45061
diff
changeset
|
547 for k, v in cfg.items(b'command-templates'): |
ed84a4d48910
config: add a new [command-templates] section for templates defined by hg
Martin von Zweigbergk <martinvonz@google.com>
parents:
45061
diff
changeset
|
548 del cfg[b'command-templates'][k] |
14373
a599431b0ab6
ui: enable alias exception when reading config in plain mode
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
14372
diff
changeset
|
549 # Don't remove aliases from the configuration if in the exceptionlist |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
550 if self.plain(b'alias'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
551 for k, v in cfg.items(b'alias'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
552 del cfg[b'alias'][k] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
553 if self.plain(b'revsetalias'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
554 for k, v in cfg.items(b'revsetalias'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
555 del cfg[b'revsetalias'][k] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
556 if self.plain(b'templatealias'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
557 for k, v in cfg.items(b'templatealias'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
558 del cfg[b'templatealias'][k] |
10455
40dfd46d098f
ui: add HGPLAIN environment variable for easier scripting
Brodie Rao <me+hg@dackz.net>
parents:
10426
diff
changeset
|
559 |
8142
912bfef12ba6
ui: fold readsections into readconfig
Matt Mackall <mpm@selenic.com>
parents:
8141
diff
changeset
|
560 if trusted: |
8203 | 561 self._tcfg.update(cfg) |
562 self._tcfg.update(self._ocfg) | |
563 self._ucfg.update(cfg) | |
564 self._ucfg.update(self._ocfg) | |
8139 | 565 |
3347
bce7c1b4c1c8
ui.py: normalize settings every time the configuration changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3346
diff
changeset
|
566 if root is None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
567 root = os.path.expanduser(b'~') |
3347
bce7c1b4c1c8
ui.py: normalize settings every time the configuration changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3346
diff
changeset
|
568 self.fixconfig(root=root) |
3014
01454af644b8
load extensions only after the ui object has been completely initialized
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3013
diff
changeset
|
569 |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
570 def fixconfig(self, root=None, section=None) -> None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
571 if section in (None, b'paths'): |
12764
ad2506f097d3
ui: only fix config if the relevant section has changed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12689
diff
changeset
|
572 # expand vars and ~ |
ad2506f097d3
ui: only fix config if the relevant section has changed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12689
diff
changeset
|
573 # translate paths relative to root (or home) into absolute paths |
39818
24e493ec2229
py3: rename pycompat.getcwd() to encoding.getcwd() (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
39662
diff
changeset
|
574 root = root or encoding.getcwd() |
12764
ad2506f097d3
ui: only fix config if the relevant section has changed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12689
diff
changeset
|
575 for c in self._tcfg, self._ucfg, self._ocfg: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
576 for n, p in c.items(b'paths'): |
47272
a671832a8e41
urlutil: move url "fixing" at the time of `ui.paths` initialization
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47233
diff
changeset
|
577 old_p = p |
a671832a8e41
urlutil: move url "fixing" at the time of `ui.paths` initialization
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47233
diff
changeset
|
578 s = self.configsource(b'paths', n) or b'none' |
a671832a8e41
urlutil: move url "fixing" at the time of `ui.paths` initialization
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47233
diff
changeset
|
579 root_key = (n, p, s) |
a671832a8e41
urlutil: move url "fixing" at the time of `ui.paths` initialization
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47233
diff
changeset
|
580 if root_key not in self._path_to_root: |
a671832a8e41
urlutil: move url "fixing" at the time of `ui.paths` initialization
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47233
diff
changeset
|
581 self._path_to_root[root_key] = root |
29412
b62bce819d0c
ui: don't fixup [paths] sub-options
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29378
diff
changeset
|
582 # Ignore sub-options. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
583 if b':' in n: |
29412
b62bce819d0c
ui: don't fixup [paths] sub-options
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29378
diff
changeset
|
584 continue |
12764
ad2506f097d3
ui: only fix config if the relevant section has changed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12689
diff
changeset
|
585 if not p: |
ad2506f097d3
ui: only fix config if the relevant section has changed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12689
diff
changeset
|
586 continue |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
587 if b'%%' in p: |
47272
a671832a8e41
urlutil: move url "fixing" at the time of `ui.paths` initialization
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47233
diff
changeset
|
588 if s is None: |
a671832a8e41
urlutil: move url "fixing" at the time of `ui.paths` initialization
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47233
diff
changeset
|
589 s = 'none' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
590 self.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
591 _(b"(deprecated '%%' in path %s=%s from %s)\n") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
592 % (n, p, s) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
593 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
594 p = p.replace(b'%%', b'%') |
47272
a671832a8e41
urlutil: move url "fixing" at the time of `ui.paths` initialization
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47233
diff
changeset
|
595 if p != old_p: |
a671832a8e41
urlutil: move url "fixing" at the time of `ui.paths` initialization
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47233
diff
changeset
|
596 c.alter(b"paths", n, p) |
3347
bce7c1b4c1c8
ui.py: normalize settings every time the configuration changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3346
diff
changeset
|
597 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
598 if section in (None, b'ui'): |
12764
ad2506f097d3
ui: only fix config if the relevant section has changed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12689
diff
changeset
|
599 # update ui options |
40547
840cd57cde32
ui: add config knob to redirect status messages to stderr (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40543
diff
changeset
|
600 self._fmsgout, self._fmsgerr = _selectmsgdests(self) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
601 self.debugflag = self.configbool(b'ui', b'debug') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
602 self.verbose = self.debugflag or self.configbool(b'ui', b'verbose') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
603 self.quiet = not self.debugflag and self.configbool(b'ui', b'quiet') |
12764
ad2506f097d3
ui: only fix config if the relevant section has changed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12689
diff
changeset
|
604 if self.verbose and self.quiet: |
ad2506f097d3
ui: only fix config if the relevant section has changed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12689
diff
changeset
|
605 self.quiet = self.verbose = False |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
606 self._reportuntrusted = self.debugflag or self.configbool( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
607 b"ui", b"report_untrusted" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
608 ) |
45025
24b1a8eb73aa
ui: add option to timestamp status and diagnostic messages
Joerg Sonnenberger <joerg@bec.de>
parents:
44992
diff
changeset
|
609 self.showtimestamp = self.configbool(b'ui', b'timestamp-output') |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
610 self.tracebackflag = self.configbool(b'ui', b'traceback') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
611 self.logblockedtimes = self.configbool(b'ui', b'logblockedtimes') |
3350
ab900698b832
update ui.quiet/verbose/debug/interactive every time the config changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3349
diff
changeset
|
612 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
613 if section in (None, b'trusted'): |
12764
ad2506f097d3
ui: only fix config if the relevant section has changed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12689
diff
changeset
|
614 # update trust information |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
615 self._trustusers.update(self.configlist(b'trusted', b'users')) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
616 self._trustgroups.update(self.configlist(b'trusted', b'groups')) |
3551
3b07e223534b
Only read .hg/hgrc files from trusted users/groups
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3489
diff
changeset
|
617 |
40994
ab92e2111408
ui: install logger that sends debug.extensions messages to stderr
Yuya Nishihara <yuya@tcha.org>
parents:
40761
diff
changeset
|
618 if section in (None, b'devel', b'ui') and self.debugflag: |
ab92e2111408
ui: install logger that sends debug.extensions messages to stderr
Yuya Nishihara <yuya@tcha.org>
parents:
40761
diff
changeset
|
619 tracked = set() |
ab92e2111408
ui: install logger that sends debug.extensions messages to stderr
Yuya Nishihara <yuya@tcha.org>
parents:
40761
diff
changeset
|
620 if self.configbool(b'devel', b'debug.extensions'): |
ab92e2111408
ui: install logger that sends debug.extensions messages to stderr
Yuya Nishihara <yuya@tcha.org>
parents:
40761
diff
changeset
|
621 tracked.add(b'extension') |
ab92e2111408
ui: install logger that sends debug.extensions messages to stderr
Yuya Nishihara <yuya@tcha.org>
parents:
40761
diff
changeset
|
622 if tracked: |
ab92e2111408
ui: install logger that sends debug.extensions messages to stderr
Yuya Nishihara <yuya@tcha.org>
parents:
40761
diff
changeset
|
623 logger = loggingutil.fileobjectlogger(self._ferr, tracked) |
ab92e2111408
ui: install logger that sends debug.extensions messages to stderr
Yuya Nishihara <yuya@tcha.org>
parents:
40761
diff
changeset
|
624 self.setlogger(b'debug', logger) |
ab92e2111408
ui: install logger that sends debug.extensions messages to stderr
Yuya Nishihara <yuya@tcha.org>
parents:
40761
diff
changeset
|
625 |
15919
69e792cf7851
config: have a way to backup and restore value in config
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15407
diff
changeset
|
626 def backupconfig(self, section, item): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
627 return ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
628 self._ocfg.backup(section, item), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
629 self._tcfg.backup(section, item), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
630 self._ucfg.backup(section, item), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
631 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
632 |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
633 def restoreconfig(self, data) -> None: |
15919
69e792cf7851
config: have a way to backup and restore value in config
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15407
diff
changeset
|
634 self._ocfg.restore(data[0]) |
69e792cf7851
config: have a way to backup and restore value in config
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15407
diff
changeset
|
635 self._tcfg.restore(data[1]) |
69e792cf7851
config: have a way to backup and restore value in config
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15407
diff
changeset
|
636 self._ucfg.restore(data[2]) |
69e792cf7851
config: have a way to backup and restore value in config
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15407
diff
changeset
|
637 |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
638 def setconfig(self, section, name, value, source=b'') -> None: |
20787
be179da10d5f
config: backout 77f1f206e135 - 743daa601445 removed the only use of overlay
Mads Kiilerich <madski@unity3d.com>
parents:
20606
diff
changeset
|
639 for cfg in (self._ocfg, self._tcfg, self._ucfg): |
20788
f144928dd058
config: give a useful hint of source for the most common command line settings
Mads Kiilerich <madski@unity3d.com>
parents:
20787
diff
changeset
|
640 cfg.set(section, name, value, source) |
12764
ad2506f097d3
ui: only fix config if the relevant section has changed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12689
diff
changeset
|
641 self.fixconfig(section=section) |
32872
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
642 self._maybetweakdefaults() |
960 | 643 |
8199 | 644 def _data(self, untrusted): |
8203 | 645 return untrusted and self._ucfg or self._tcfg |
3552
9b52239dc740
save settings from untrusted config files in a separate configparser
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3551
diff
changeset
|
646 |
8182
b97abc7c1135
showconfig: show source file and line with --debug
Matt Mackall <mpm@selenic.com>
parents:
8175
diff
changeset
|
647 def configsource(self, section, name, untrusted=False): |
30618
201b44c8875c
ui: do not translate empty configsource() to 'none' (API)
Yuya Nishihara <yuya@tcha.org>
parents:
30569
diff
changeset
|
648 return self._data(untrusted).source(section, name) |
8182
b97abc7c1135
showconfig: show source file and line with --debug
Matt Mackall <mpm@selenic.com>
parents:
8175
diff
changeset
|
649 |
32958
4a3f1d362e5f
config: explicitly track the use of the standard default value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32872
diff
changeset
|
650 def config(self, section, name, default=_unset, untrusted=False): |
33058
1aa05203f7f6
config: extract the core config logic into a private method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32989
diff
changeset
|
651 """return the plain string version of a config""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
652 value = self._config( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
653 section, name, default=default, untrusted=untrusted |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
654 ) |
33058
1aa05203f7f6
config: extract the core config logic into a private method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32989
diff
changeset
|
655 if value is _unset: |
1aa05203f7f6
config: extract the core config logic into a private method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32989
diff
changeset
|
656 return None |
1aa05203f7f6
config: extract the core config logic into a private method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32989
diff
changeset
|
657 return value |
1aa05203f7f6
config: extract the core config logic into a private method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32989
diff
changeset
|
658 |
1aa05203f7f6
config: extract the core config logic into a private method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32989
diff
changeset
|
659 def _config(self, section, name, default=_unset, untrusted=False): |
34947
ff2110eadbfa
configitems: relax warning about unwanted default value
Yuya Nishihara <yuya@tcha.org>
parents:
34882
diff
changeset
|
660 value = itemdefault = default |
33329
e714159860fd
configitems: add alias support in config
David Demelier <demelier.david@gmail.com>
parents:
33150
diff
changeset
|
661 item = self._knownconfig.get(section, {}).get(name) |
e714159860fd
configitems: add alias support in config
David Demelier <demelier.david@gmail.com>
parents:
33150
diff
changeset
|
662 alternates = [(section, name)] |
e714159860fd
configitems: add alias support in config
David Demelier <demelier.david@gmail.com>
parents:
33150
diff
changeset
|
663 |
50765
7f8f6fe13fa9
configitems: move blackbox's config items to the new configitems.toml
Raphaël Gomès <rgomes@octobus.net>
parents:
50453
diff
changeset
|
664 if item is not None and item.in_core_extension is not None: |
7f8f6fe13fa9
configitems: move blackbox's config items to the new configitems.toml
Raphaël Gomès <rgomes@octobus.net>
parents:
50453
diff
changeset
|
665 # Only return the default for an in-core extension item if said |
7f8f6fe13fa9
configitems: move blackbox's config items to the new configitems.toml
Raphaël Gomès <rgomes@octobus.net>
parents:
50453
diff
changeset
|
666 # extension is enabled |
7f8f6fe13fa9
configitems: move blackbox's config items to the new configitems.toml
Raphaël Gomès <rgomes@octobus.net>
parents:
50453
diff
changeset
|
667 if item.in_core_extension in extensions.extensions(self): |
7f8f6fe13fa9
configitems: move blackbox's config items to the new configitems.toml
Raphaël Gomès <rgomes@octobus.net>
parents:
50453
diff
changeset
|
668 item = None |
7f8f6fe13fa9
configitems: move blackbox's config items to the new configitems.toml
Raphaël Gomès <rgomes@octobus.net>
parents:
50453
diff
changeset
|
669 |
33329
e714159860fd
configitems: add alias support in config
David Demelier <demelier.david@gmail.com>
parents:
33150
diff
changeset
|
670 if item is not None: |
e714159860fd
configitems: add alias support in config
David Demelier <demelier.david@gmail.com>
parents:
33150
diff
changeset
|
671 alternates.extend(item.alias) |
34947
ff2110eadbfa
configitems: relax warning about unwanted default value
Yuya Nishihara <yuya@tcha.org>
parents:
34882
diff
changeset
|
672 if callable(item.default): |
ff2110eadbfa
configitems: relax warning about unwanted default value
Yuya Nishihara <yuya@tcha.org>
parents:
34882
diff
changeset
|
673 itemdefault = item.default() |
ff2110eadbfa
configitems: relax warning about unwanted default value
Yuya Nishihara <yuya@tcha.org>
parents:
34882
diff
changeset
|
674 else: |
ff2110eadbfa
configitems: relax warning about unwanted default value
Yuya Nishihara <yuya@tcha.org>
parents:
34882
diff
changeset
|
675 itemdefault = item.default |
34858
85a2db47ad50
configitems: adds a developer warning when accessing undeclared configuration
Boris Feld <boris.feld@octobus.net>
parents:
34849
diff
changeset
|
676 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
677 msg = b"accessing unregistered config item: '%s.%s'" |
34858
85a2db47ad50
configitems: adds a developer warning when accessing undeclared configuration
Boris Feld <boris.feld@octobus.net>
parents:
34849
diff
changeset
|
678 msg %= (section, name) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
679 self.develwarn(msg, 2, b'warn-config-unknown') |
33329
e714159860fd
configitems: add alias support in config
David Demelier <demelier.david@gmail.com>
parents:
33150
diff
changeset
|
680 |
e714159860fd
configitems: add alias support in config
David Demelier <demelier.david@gmail.com>
parents:
33150
diff
changeset
|
681 if default is _unset: |
e714159860fd
configitems: add alias support in config
David Demelier <demelier.david@gmail.com>
parents:
33150
diff
changeset
|
682 if item is None: |
e714159860fd
configitems: add alias support in config
David Demelier <demelier.david@gmail.com>
parents:
33150
diff
changeset
|
683 value = default |
33471
d74141ccfd8b
configitems: handle case were the default value is not static
Boris Feld <boris.feld@octobus.net>
parents:
33329
diff
changeset
|
684 elif item.default is configitems.dynamicdefault: |
d74141ccfd8b
configitems: handle case were the default value is not static
Boris Feld <boris.feld@octobus.net>
parents:
33329
diff
changeset
|
685 value = None |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
686 msg = b"config item requires an explicit default value: '%s.%s'" |
33471
d74141ccfd8b
configitems: handle case were the default value is not static
Boris Feld <boris.feld@octobus.net>
parents:
33329
diff
changeset
|
687 msg %= (section, name) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
688 self.develwarn(msg, 2, b'warn-config-default') |
33329
e714159860fd
configitems: add alias support in config
David Demelier <demelier.david@gmail.com>
parents:
33150
diff
changeset
|
689 else: |
34947
ff2110eadbfa
configitems: relax warning about unwanted default value
Yuya Nishihara <yuya@tcha.org>
parents:
34882
diff
changeset
|
690 value = itemdefault |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
691 elif ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
692 item is not None |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
693 and item.default is not configitems.dynamicdefault |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
694 and default != itemdefault |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
695 ): |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
696 msg = ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
697 b"specifying a mismatched default value for a registered " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
698 b"config item: '%s.%s' '%s'" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
699 ) |
36126
8f5c7f906f9b
ui: use pycompat.bytestr() to get a bytes-repr of config default
Augie Fackler <augie@google.com>
parents:
35961
diff
changeset
|
700 msg %= (section, name, pycompat.bytestr(default)) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
701 self.develwarn(msg, 2, b'warn-config-default') |
32989
149b68224b08
configitems: issue a devel warning when overriding default config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32985
diff
changeset
|
702 |
46623
b91a695b3b08
config: use level to properly deal with value priority
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46622
diff
changeset
|
703 candidates = [] |
b91a695b3b08
config: use level to properly deal with value priority
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46622
diff
changeset
|
704 config = self._data(untrusted) |
33329
e714159860fd
configitems: add alias support in config
David Demelier <demelier.david@gmail.com>
parents:
33150
diff
changeset
|
705 for s, n in alternates: |
46623
b91a695b3b08
config: use level to properly deal with value priority
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46622
diff
changeset
|
706 candidate = config.get(s, n, None) |
33058
1aa05203f7f6
config: extract the core config logic into a private method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32989
diff
changeset
|
707 if candidate is not None: |
46623
b91a695b3b08
config: use level to properly deal with value priority
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46622
diff
changeset
|
708 candidates.append((s, n, candidate)) |
b91a695b3b08
config: use level to properly deal with value priority
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46622
diff
changeset
|
709 if candidates: |
b91a695b3b08
config: use level to properly deal with value priority
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46622
diff
changeset
|
710 |
b91a695b3b08
config: use level to properly deal with value priority
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46622
diff
changeset
|
711 def level(x): |
b91a695b3b08
config: use level to properly deal with value priority
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46622
diff
changeset
|
712 return config.level(x[0], x[1]) |
b91a695b3b08
config: use level to properly deal with value priority
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46622
diff
changeset
|
713 |
b91a695b3b08
config: use level to properly deal with value priority
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46622
diff
changeset
|
714 value = max(candidates, key=level)[2] |
15035
cc669e4fec95
ui: allow alternatives for config options
Matt Mackall <mpm@selenic.com>
parents:
15002
diff
changeset
|
715 |
8204 | 716 if self.debugflag and not untrusted and self._reportuntrusted: |
33329
e714159860fd
configitems: add alias support in config
David Demelier <demelier.david@gmail.com>
parents:
33150
diff
changeset
|
717 for s, n in alternates: |
e714159860fd
configitems: add alias support in config
David Demelier <demelier.david@gmail.com>
parents:
33150
diff
changeset
|
718 uvalue = self._ucfg.get(s, n) |
19536
ab3cf67740d6
ui.config: fix bug in config alternatives from cc669e4fec95
Augie Fackler <durin42@gmail.com>
parents:
19226
diff
changeset
|
719 if uvalue is not None and uvalue != value: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
720 self.debug( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
721 b"ignoring untrusted configuration option " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
722 b"%s.%s = %s\n" % (s, n, uvalue) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
723 ) |
3552
9b52239dc740
save settings from untrusted config files in a separate configparser
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3551
diff
changeset
|
724 return value |
3341
a7cec14c9b40
ui.py: move common code out of config and configbool
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3340
diff
changeset
|
725 |
46267
b9b37418ac7e
ui: add a "config_default" method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46030
diff
changeset
|
726 def config_default(self, section, name): |
b9b37418ac7e
ui: add a "config_default" method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46030
diff
changeset
|
727 """return the default value for a config option |
b9b37418ac7e
ui: add a "config_default" method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46030
diff
changeset
|
728 |
b9b37418ac7e
ui: add a "config_default" method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46030
diff
changeset
|
729 The default is returned "raw", for example if it is a callable, the |
b9b37418ac7e
ui: add a "config_default" method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46030
diff
changeset
|
730 callable was not called. |
b9b37418ac7e
ui: add a "config_default" method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46030
diff
changeset
|
731 """ |
b9b37418ac7e
ui: add a "config_default" method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46030
diff
changeset
|
732 item = self._knownconfig.get(section, {}).get(name) |
b9b37418ac7e
ui: add a "config_default" method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46030
diff
changeset
|
733 |
b9b37418ac7e
ui: add a "config_default" method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46030
diff
changeset
|
734 if item is None: |
b9b37418ac7e
ui: add a "config_default" method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46030
diff
changeset
|
735 raise KeyError((section, name)) |
b9b37418ac7e
ui: add a "config_default" method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46030
diff
changeset
|
736 return item.default |
b9b37418ac7e
ui: add a "config_default" method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46030
diff
changeset
|
737 |
32967
cd2fd1765654
config: use the new '_unset' value for 'configsuboptions'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32966
diff
changeset
|
738 def configsuboptions(self, section, name, default=_unset, untrusted=False): |
27252
dccbebcff075
ui: add method to return option and all sub-options
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27153
diff
changeset
|
739 """Get a config option and all sub-options. |
dccbebcff075
ui: add method to return option and all sub-options
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27153
diff
changeset
|
740 |
dccbebcff075
ui: add method to return option and all sub-options
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27153
diff
changeset
|
741 Some config options have sub-options that are declared with the |
dccbebcff075
ui: add method to return option and all sub-options
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27153
diff
changeset
|
742 format "key:opt = value". This method is used to return the main |
dccbebcff075
ui: add method to return option and all sub-options
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27153
diff
changeset
|
743 option and all its declared sub-options. |
dccbebcff075
ui: add method to return option and all sub-options
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27153
diff
changeset
|
744 |
dccbebcff075
ui: add method to return option and all sub-options
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27153
diff
changeset
|
745 Returns a 2-tuple of ``(option, sub-options)``, where `sub-options`` |
dccbebcff075
ui: add method to return option and all sub-options
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27153
diff
changeset
|
746 is a dict of defined sub-options where keys and values are strings. |
dccbebcff075
ui: add method to return option and all sub-options
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27153
diff
changeset
|
747 """ |
32966
61a8321c9962
config: use the 'config' method in 'configsuboptions'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32965
diff
changeset
|
748 main = self.config(section, name, default, untrusted=untrusted) |
27252
dccbebcff075
ui: add method to return option and all sub-options
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27153
diff
changeset
|
749 data = self._data(untrusted) |
dccbebcff075
ui: add method to return option and all sub-options
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27153
diff
changeset
|
750 sub = {} |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
751 prefix = b'%s:' % name |
27252
dccbebcff075
ui: add method to return option and all sub-options
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27153
diff
changeset
|
752 for k, v in data.items(section): |
dccbebcff075
ui: add method to return option and all sub-options
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27153
diff
changeset
|
753 if k.startswith(prefix): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
754 sub[k[len(prefix) :]] = v |
27252
dccbebcff075
ui: add method to return option and all sub-options
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27153
diff
changeset
|
755 |
dccbebcff075
ui: add method to return option and all sub-options
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27153
diff
changeset
|
756 if self.debugflag and not untrusted and self._reportuntrusted: |
dccbebcff075
ui: add method to return option and all sub-options
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27153
diff
changeset
|
757 for k, v in sub.items(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
758 uvalue = self._ucfg.get(section, b'%s:%s' % (name, k)) |
27252
dccbebcff075
ui: add method to return option and all sub-options
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27153
diff
changeset
|
759 if uvalue is not None and uvalue != v: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
760 self.debug( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
761 b'ignoring untrusted configuration option ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
762 b'%s:%s.%s = %s\n' % (section, name, k, uvalue) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
763 ) |
27252
dccbebcff075
ui: add method to return option and all sub-options
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27153
diff
changeset
|
764 |
dccbebcff075
ui: add method to return option and all sub-options
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27153
diff
changeset
|
765 return main, sub |
dccbebcff075
ui: add method to return option and all sub-options
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27153
diff
changeset
|
766 |
32965
36e16797df32
config: use the new '_unset' value for 'configpath'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32964
diff
changeset
|
767 def configpath(self, section, name, default=_unset, untrusted=False): |
43787
be8552f25cab
cleanup: fix docstring formatting
Matt Harbison <matt_harbison@yahoo.com>
parents:
43506
diff
changeset
|
768 """get a path config item, expanded relative to repo root or config |
be8552f25cab
cleanup: fix docstring formatting
Matt Harbison <matt_harbison@yahoo.com>
parents:
43506
diff
changeset
|
769 file""" |
13238 | 770 v = self.config(section, name, default, untrusted) |
14923
351624f8f523
ui: providing no default value to configpath should not raise an Error
Simon Heimberg <simohe@besonet.ch>
parents:
14922
diff
changeset
|
771 if v is None: |
351624f8f523
ui: providing no default value to configpath should not raise an Error
Simon Heimberg <simohe@besonet.ch>
parents:
14922
diff
changeset
|
772 return None |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
773 if not os.path.isabs(v) or b"://" not in v: |
13238 | 774 src = self.configsource(section, name, untrusted) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
775 if b':' in src: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
776 base = os.path.dirname(src.rsplit(b':')[0]) |
13238 | 777 v = os.path.join(base, os.path.expanduser(v)) |
778 return v | |
779 | |
32959
b39dafe681df
config: use the new '_unset' value for 'configbool'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32958
diff
changeset
|
780 def configbool(self, section, name, default=_unset, untrusted=False): |
14171
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
781 """parse a configuration element as a boolean |
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
782 |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
783 >>> u = ui(); s = b'foo' |
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
784 >>> u.setconfig(s, b'true', b'yes') |
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
785 >>> u.configbool(s, b'true') |
14171
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
786 True |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
787 >>> u.setconfig(s, b'false', b'no') |
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
788 >>> u.configbool(s, b'false') |
14171
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
789 False |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
790 >>> u.configbool(s, b'unknown') |
14171
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
791 False |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
792 >>> u.configbool(s, b'unknown', True) |
14171
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
793 True |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
794 >>> u.setconfig(s, b'invalid', b'somevalue') |
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
795 >>> u.configbool(s, b'invalid') |
14171
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
796 Traceback (most recent call last): |
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
797 ... |
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
798 ConfigError: foo.invalid is not a boolean ('somevalue') |
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
799 """ |
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
800 |
33059
1dc2ffe0123b
config: use '_config' within 'configbool'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33058
diff
changeset
|
801 v = self._config(section, name, default, untrusted=untrusted) |
8527
f9a80054dd3c
use 'x is None' instead of 'x == None'
Martin Geisler <mg@lazybytes.net>
parents:
8478
diff
changeset
|
802 if v is None: |
33059
1dc2ffe0123b
config: use '_config' within 'configbool'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33058
diff
changeset
|
803 return v |
1dc2ffe0123b
config: use '_config' within 'configbool'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33058
diff
changeset
|
804 if v is _unset: |
32959
b39dafe681df
config: use the new '_unset' value for 'configbool'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32958
diff
changeset
|
805 if default is _unset: |
b39dafe681df
config: use the new '_unset' value for 'configbool'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32958
diff
changeset
|
806 return False |
8144
fca54469480e
ui: introduce new config parser
Matt Mackall <mpm@selenic.com>
parents:
8143
diff
changeset
|
807 return default |
10243
cd3e5c47d663
ui: just return it if it's already a bool
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
10220
diff
changeset
|
808 if isinstance(v, bool): |
cd3e5c47d663
ui: just return it if it's already a bool
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
10220
diff
changeset
|
809 return v |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36910
diff
changeset
|
810 b = stringutil.parsebool(v) |
12087
a88a4720c2f0
parsebool: create new function and use it for config parsing
Augie Fackler <durin42@gmail.com>
parents:
11984
diff
changeset
|
811 if b is None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
812 raise error.ConfigError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
813 _(b"%s.%s is not a boolean ('%s')") % (section, name, v) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
814 ) |
12087
a88a4720c2f0
parsebool: create new function and use it for config parsing
Augie Fackler <durin42@gmail.com>
parents:
11984
diff
changeset
|
815 return b |
3552
9b52239dc740
save settings from untrusted config files in a separate configparser
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3551
diff
changeset
|
816 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
817 def configwith( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
818 self, convert, section, name, default=_unset, desc=None, untrusted=False |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
819 ): |
30926
120682fce099
ui: add a configwith method
Bryan O'Sullivan <bryano@fb.com>
parents:
30925
diff
changeset
|
820 """parse a configuration element with a conversion function |
120682fce099
ui: add a configwith method
Bryan O'Sullivan <bryano@fb.com>
parents:
30925
diff
changeset
|
821 |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
822 >>> u = ui(); s = b'foo' |
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
823 >>> u.setconfig(s, b'float1', b'42') |
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
824 >>> u.configwith(float, s, b'float1') |
30926
120682fce099
ui: add a configwith method
Bryan O'Sullivan <bryano@fb.com>
parents:
30925
diff
changeset
|
825 42.0 |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
826 >>> u.setconfig(s, b'float2', b'-4.25') |
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
827 >>> u.configwith(float, s, b'float2') |
30932 | 828 -4.25 |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
829 >>> u.configwith(float, s, b'unknown', 7) |
32960
6ff6eb33f353
config: use the new '_unset' value for 'configwith'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32959
diff
changeset
|
830 7.0 |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
831 >>> u.setconfig(s, b'invalid', b'somevalue') |
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
832 >>> u.configwith(float, s, b'invalid') |
30926
120682fce099
ui: add a configwith method
Bryan O'Sullivan <bryano@fb.com>
parents:
30925
diff
changeset
|
833 Traceback (most recent call last): |
120682fce099
ui: add a configwith method
Bryan O'Sullivan <bryano@fb.com>
parents:
30925
diff
changeset
|
834 ... |
120682fce099
ui: add a configwith method
Bryan O'Sullivan <bryano@fb.com>
parents:
30925
diff
changeset
|
835 ConfigError: foo.invalid is not a valid float ('somevalue') |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
836 >>> u.configwith(float, s, b'invalid', desc=b'womble') |
30926
120682fce099
ui: add a configwith method
Bryan O'Sullivan <bryano@fb.com>
parents:
30925
diff
changeset
|
837 Traceback (most recent call last): |
120682fce099
ui: add a configwith method
Bryan O'Sullivan <bryano@fb.com>
parents:
30925
diff
changeset
|
838 ... |
120682fce099
ui: add a configwith method
Bryan O'Sullivan <bryano@fb.com>
parents:
30925
diff
changeset
|
839 ConfigError: foo.invalid is not a valid womble ('somevalue') |
120682fce099
ui: add a configwith method
Bryan O'Sullivan <bryano@fb.com>
parents:
30925
diff
changeset
|
840 """ |
120682fce099
ui: add a configwith method
Bryan O'Sullivan <bryano@fb.com>
parents:
30925
diff
changeset
|
841 |
32960
6ff6eb33f353
config: use the new '_unset' value for 'configwith'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32959
diff
changeset
|
842 v = self.config(section, name, default, untrusted) |
30926
120682fce099
ui: add a configwith method
Bryan O'Sullivan <bryano@fb.com>
parents:
30925
diff
changeset
|
843 if v is None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
844 return v # do not attempt to convert None |
30926
120682fce099
ui: add a configwith method
Bryan O'Sullivan <bryano@fb.com>
parents:
30925
diff
changeset
|
845 try: |
120682fce099
ui: add a configwith method
Bryan O'Sullivan <bryano@fb.com>
parents:
30925
diff
changeset
|
846 return convert(v) |
32462
bb18728ea617
util: raise ParseError when parsing dates (BC)
Boris Feld <boris.feld@octobus.net>
parents:
32449
diff
changeset
|
847 except (ValueError, error.ParseError): |
30926
120682fce099
ui: add a configwith method
Bryan O'Sullivan <bryano@fb.com>
parents:
30925
diff
changeset
|
848 if desc is None: |
34208
0a2fd3bfc704
py3: convert function name to bytes in ui.configwith()
Yuya Nishihara <yuya@tcha.org>
parents:
34131
diff
changeset
|
849 desc = pycompat.sysbytes(convert.__name__) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
850 raise error.ConfigError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
851 _(b"%s.%s is not a valid %s ('%s')") % (section, name, desc, v) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
852 ) |
30926
120682fce099
ui: add a configwith method
Bryan O'Sullivan <bryano@fb.com>
parents:
30925
diff
changeset
|
853 |
32961
24111157f967
config: use the new '_unset' value for 'configint'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32960
diff
changeset
|
854 def configint(self, section, name, default=_unset, untrusted=False): |
14171
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
855 """parse a configuration element as an integer |
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
856 |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
857 >>> u = ui(); s = b'foo' |
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
858 >>> u.setconfig(s, b'int1', b'42') |
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
859 >>> u.configint(s, b'int1') |
14171
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
860 42 |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
861 >>> u.setconfig(s, b'int2', b'-42') |
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
862 >>> u.configint(s, b'int2') |
14171
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
863 -42 |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
864 >>> u.configint(s, b'unknown', 7) |
14171
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
865 7 |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
866 >>> u.setconfig(s, b'invalid', b'somevalue') |
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
867 >>> u.configint(s, b'invalid') |
14171
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
868 Traceback (most recent call last): |
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
869 ... |
30927
8fa3ab6221b9
ui: rewrite configint in terms of configwith
Bryan O'Sullivan <bryano@fb.com>
parents:
30926
diff
changeset
|
870 ConfigError: foo.invalid is not a valid integer ('somevalue') |
14171
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
871 """ |
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
872 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
873 return self.configwith( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
874 int, section, name, default, b'integer', untrusted |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
875 ) |
14171
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
876 |
32962
0bf986cfa82b
config: use the new '_unset' value for 'configbytes'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32961
diff
changeset
|
877 def configbytes(self, section, name, default=_unset, untrusted=False): |
19065
2c4cd1c42365
ui: add a configbytes method, for space configuration
Bryan O'Sullivan <bryano@fb.com>
parents:
18966
diff
changeset
|
878 """parse a configuration element as a quantity in bytes |
2c4cd1c42365
ui: add a configbytes method, for space configuration
Bryan O'Sullivan <bryano@fb.com>
parents:
18966
diff
changeset
|
879 |
2c4cd1c42365
ui: add a configbytes method, for space configuration
Bryan O'Sullivan <bryano@fb.com>
parents:
18966
diff
changeset
|
880 Units can be specified as b (bytes), k or kb (kilobytes), m or |
2c4cd1c42365
ui: add a configbytes method, for space configuration
Bryan O'Sullivan <bryano@fb.com>
parents:
18966
diff
changeset
|
881 mb (megabytes), g or gb (gigabytes). |
2c4cd1c42365
ui: add a configbytes method, for space configuration
Bryan O'Sullivan <bryano@fb.com>
parents:
18966
diff
changeset
|
882 |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
883 >>> u = ui(); s = b'foo' |
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
884 >>> u.setconfig(s, b'val1', b'42') |
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
885 >>> u.configbytes(s, b'val1') |
19065
2c4cd1c42365
ui: add a configbytes method, for space configuration
Bryan O'Sullivan <bryano@fb.com>
parents:
18966
diff
changeset
|
886 42 |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
887 >>> u.setconfig(s, b'val2', b'42.5 kb') |
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
888 >>> u.configbytes(s, b'val2') |
19065
2c4cd1c42365
ui: add a configbytes method, for space configuration
Bryan O'Sullivan <bryano@fb.com>
parents:
18966
diff
changeset
|
889 43520 |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
890 >>> u.configbytes(s, b'unknown', b'7 MB') |
19065
2c4cd1c42365
ui: add a configbytes method, for space configuration
Bryan O'Sullivan <bryano@fb.com>
parents:
18966
diff
changeset
|
891 7340032 |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
892 >>> u.setconfig(s, b'invalid', b'somevalue') |
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
893 >>> u.configbytes(s, b'invalid') |
19065
2c4cd1c42365
ui: add a configbytes method, for space configuration
Bryan O'Sullivan <bryano@fb.com>
parents:
18966
diff
changeset
|
894 Traceback (most recent call last): |
2c4cd1c42365
ui: add a configbytes method, for space configuration
Bryan O'Sullivan <bryano@fb.com>
parents:
18966
diff
changeset
|
895 ... |
2c4cd1c42365
ui: add a configbytes method, for space configuration
Bryan O'Sullivan <bryano@fb.com>
parents:
18966
diff
changeset
|
896 ConfigError: foo.invalid is not a byte quantity ('somevalue') |
2c4cd1c42365
ui: add a configbytes method, for space configuration
Bryan O'Sullivan <bryano@fb.com>
parents:
18966
diff
changeset
|
897 """ |
2c4cd1c42365
ui: add a configbytes method, for space configuration
Bryan O'Sullivan <bryano@fb.com>
parents:
18966
diff
changeset
|
898 |
33060
e70cbae4c4e6
config: use '_config' within 'configbytes'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33059
diff
changeset
|
899 value = self._config(section, name, default, untrusted) |
e70cbae4c4e6
config: use '_config' within 'configbytes'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33059
diff
changeset
|
900 if value is _unset: |
32962
0bf986cfa82b
config: use the new '_unset' value for 'configbytes'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32961
diff
changeset
|
901 if default is _unset: |
0bf986cfa82b
config: use the new '_unset' value for 'configbytes'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32961
diff
changeset
|
902 default = 0 |
19195
9311cd5c09ed
ui: use util.sizetoint in configbytes
Bryan O'Sullivan <bryano@fb.com>
parents:
19085
diff
changeset
|
903 value = default |
33585
d90f9e4704de
ui: fix configbytes isinstance check to look for bytes and not str
Augie Fackler <augie@google.com>
parents:
33499
diff
changeset
|
904 if not isinstance(value, bytes): |
32962
0bf986cfa82b
config: use the new '_unset' value for 'configbytes'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32961
diff
changeset
|
905 return value |
19065
2c4cd1c42365
ui: add a configbytes method, for space configuration
Bryan O'Sullivan <bryano@fb.com>
parents:
18966
diff
changeset
|
906 try: |
19195
9311cd5c09ed
ui: use util.sizetoint in configbytes
Bryan O'Sullivan <bryano@fb.com>
parents:
19085
diff
changeset
|
907 return util.sizetoint(value) |
9311cd5c09ed
ui: use util.sizetoint in configbytes
Bryan O'Sullivan <bryano@fb.com>
parents:
19085
diff
changeset
|
908 except error.ParseError: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
909 raise error.ConfigError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
910 _(b"%s.%s is not a byte quantity ('%s')") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
911 % (section, name, value) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
912 ) |
19065
2c4cd1c42365
ui: add a configbytes method, for space configuration
Bryan O'Sullivan <bryano@fb.com>
parents:
18966
diff
changeset
|
913 |
32963
88b3a38d39e3
config: use the new '_unset' value for 'configlist'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32962
diff
changeset
|
914 def configlist(self, section, name, default=_unset, untrusted=False): |
14171
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
915 """parse a configuration element as a list of comma/space separated |
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
916 strings |
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
917 |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
918 >>> u = ui(); s = b'foo' |
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
919 >>> u.setconfig(s, b'list1', b'this,is "a small" ,test') |
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
920 >>> u.configlist(s, b'list1') |
14171
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
921 ['this', 'is', 'a small', 'test'] |
34957
58e7791e243b
ui: add configlist doctest to document a bit more of the whitespace behavior
Augie Fackler <augie@google.com>
parents:
34947
diff
changeset
|
922 >>> u.setconfig(s, b'list2', b'this, is "a small" , test ') |
58e7791e243b
ui: add configlist doctest to document a bit more of the whitespace behavior
Augie Fackler <augie@google.com>
parents:
34947
diff
changeset
|
923 >>> u.configlist(s, b'list2') |
58e7791e243b
ui: add configlist doctest to document a bit more of the whitespace behavior
Augie Fackler <augie@google.com>
parents:
34947
diff
changeset
|
924 ['this', 'is', 'a small', 'test'] |
14171
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
925 """ |
31481
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31479
diff
changeset
|
926 # default is not always a list |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
927 v = self.configwith( |
47189
b0e92313107e
parselist: move the function from config to stringutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47029
diff
changeset
|
928 stringutil.parselist, section, name, default, b'list', untrusted |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
929 ) |
32963
88b3a38d39e3
config: use the new '_unset' value for 'configlist'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32962
diff
changeset
|
930 if isinstance(v, bytes): |
47189
b0e92313107e
parselist: move the function from config to stringutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47029
diff
changeset
|
931 return stringutil.parselist(v) |
32963
88b3a38d39e3
config: use the new '_unset' value for 'configlist'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32962
diff
changeset
|
932 elif v is None: |
88b3a38d39e3
config: use the new '_unset' value for 'configlist'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32962
diff
changeset
|
933 return [] |
88b3a38d39e3
config: use the new '_unset' value for 'configlist'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32962
diff
changeset
|
934 return v |
2499
894435215344
Added ui.configlist method to get comma/space separated lists of strings.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2498
diff
changeset
|
935 |
32964
6599b7372387
config: use the new '_unset' value for 'configdate'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32963
diff
changeset
|
936 def configdate(self, section, name, default=_unset, untrusted=False): |
32408
420e93b0d9dc
ui: add the possiblity to get a date config field
Boris Feld <boris.feld@octobus.net>
parents:
32105
diff
changeset
|
937 """parse a configuration element as a tuple of ints |
420e93b0d9dc
ui: add the possiblity to get a date config field
Boris Feld <boris.feld@octobus.net>
parents:
32105
diff
changeset
|
938 |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
939 >>> u = ui(); s = b'foo' |
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
940 >>> u.setconfig(s, b'date', b'0 0') |
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
941 >>> u.configdate(s, b'date') |
32408
420e93b0d9dc
ui: add the possiblity to get a date config field
Boris Feld <boris.feld@octobus.net>
parents:
32105
diff
changeset
|
942 (0, 0) |
420e93b0d9dc
ui: add the possiblity to get a date config field
Boris Feld <boris.feld@octobus.net>
parents:
32105
diff
changeset
|
943 """ |
420e93b0d9dc
ui: add the possiblity to get a date config field
Boris Feld <boris.feld@octobus.net>
parents:
32105
diff
changeset
|
944 if self.config(section, name, default, untrusted): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
945 return self.configwith( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
946 dateutil.parsedate, section, name, default, b'date', untrusted |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
947 ) |
32964
6599b7372387
config: use the new '_unset' value for 'configdate'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32963
diff
changeset
|
948 if default is _unset: |
6599b7372387
config: use the new '_unset' value for 'configdate'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32963
diff
changeset
|
949 return None |
32408
420e93b0d9dc
ui: add the possiblity to get a date config field
Boris Feld <boris.feld@octobus.net>
parents:
32105
diff
changeset
|
950 return default |
420e93b0d9dc
ui: add the possiblity to get a date config field
Boris Feld <boris.feld@octobus.net>
parents:
32105
diff
changeset
|
951 |
42672
51a2e3102db2
config: add defaultvalue template keyword
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42561
diff
changeset
|
952 def configdefault(self, section, name): |
51a2e3102db2
config: add defaultvalue template keyword
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42561
diff
changeset
|
953 """returns the default value of the config item""" |
51a2e3102db2
config: add defaultvalue template keyword
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42561
diff
changeset
|
954 item = self._knownconfig.get(section, {}).get(name) |
51a2e3102db2
config: add defaultvalue template keyword
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42561
diff
changeset
|
955 itemdefault = None |
51a2e3102db2
config: add defaultvalue template keyword
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42561
diff
changeset
|
956 if item is not None: |
51a2e3102db2
config: add defaultvalue template keyword
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42561
diff
changeset
|
957 if callable(item.default): |
51a2e3102db2
config: add defaultvalue template keyword
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42561
diff
changeset
|
958 itemdefault = item.default() |
51a2e3102db2
config: add defaultvalue template keyword
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42561
diff
changeset
|
959 else: |
51a2e3102db2
config: add defaultvalue template keyword
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42561
diff
changeset
|
960 itemdefault = item.default |
51a2e3102db2
config: add defaultvalue template keyword
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42561
diff
changeset
|
961 return itemdefault |
51a2e3102db2
config: add defaultvalue template keyword
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42561
diff
changeset
|
962 |
27696
e70c97cc9243
config: add hasconfig method and supporting plumbing
Bryan O'Sullivan <bos@serpentine.com>
parents:
27563
diff
changeset
|
963 def hasconfig(self, section, name, untrusted=False): |
e70c97cc9243
config: add hasconfig method and supporting plumbing
Bryan O'Sullivan <bos@serpentine.com>
parents:
27563
diff
changeset
|
964 return self._data(untrusted).hasitem(section, name) |
e70c97cc9243
config: add hasconfig method and supporting plumbing
Bryan O'Sullivan <bos@serpentine.com>
parents:
27563
diff
changeset
|
965 |
4487
1b5b98837bb5
ui: Rename has_config to has_section.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4258
diff
changeset
|
966 def has_section(self, section, untrusted=False): |
2343
af81d8770620
add ui.has_config method.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2335
diff
changeset
|
967 '''tell whether section exists in config.''' |
8199 | 968 return section in self._data(untrusted) |
3552
9b52239dc740
save settings from untrusted config files in a separate configparser
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3551
diff
changeset
|
969 |
27253
f43988e5954c
ui: optionally ignore sub-options from configitems()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27252
diff
changeset
|
970 def configitems(self, section, untrusted=False, ignoresub=False): |
8199 | 971 items = self._data(untrusted).items(section) |
27253
f43988e5954c
ui: optionally ignore sub-options from configitems()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27252
diff
changeset
|
972 if ignoresub: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
973 items = [i for i in items if b':' not in i[0]] |
8204 | 974 if self.debugflag and not untrusted and self._reportuntrusted: |
8222
d30a21594812
more whitespace cleanup and some other style nits
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8220
diff
changeset
|
975 for k, v in self._ucfg.items(section): |
8203 | 976 if self._tcfg.get(section, k) != v: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
977 self.debug( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
978 b"ignoring untrusted configuration option " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
979 b"%s.%s = %s\n" % (section, k, v) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
980 ) |
8144
fca54469480e
ui: introduce new config parser
Matt Mackall <mpm@selenic.com>
parents:
8143
diff
changeset
|
981 return items |
285 | 982 |
47415
b1b3127227be
config: add an experimental option to list all known config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
983 def walkconfig(self, untrusted=False, all_known=False): |
b1b3127227be
config: add an experimental option to list all known config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
984 defined = self._walk_config(untrusted) |
b1b3127227be
config: add an experimental option to list all known config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
985 if not all_known: |
b1b3127227be
config: add an experimental option to list all known config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
986 for d in defined: |
b1b3127227be
config: add an experimental option to list all known config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
987 yield d |
b1b3127227be
config: add an experimental option to list all known config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
988 return |
b1b3127227be
config: add an experimental option to list all known config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
989 known = self._walk_known() |
b1b3127227be
config: add an experimental option to list all known config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
990 current_defined = next(defined, None) |
b1b3127227be
config: add an experimental option to list all known config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
991 current_known = next(known, None) |
b1b3127227be
config: add an experimental option to list all known config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
992 while current_defined is not None or current_known is not None: |
b1b3127227be
config: add an experimental option to list all known config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
993 if current_defined is None: |
b1b3127227be
config: add an experimental option to list all known config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
994 yield current_known |
b1b3127227be
config: add an experimental option to list all known config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
995 current_known = next(known, None) |
b1b3127227be
config: add an experimental option to list all known config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
996 elif current_known is None: |
b1b3127227be
config: add an experimental option to list all known config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
997 yield current_defined |
b1b3127227be
config: add an experimental option to list all known config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
998 current_defined = next(defined, None) |
b1b3127227be
config: add an experimental option to list all known config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
999 elif current_known[0:2] == current_defined[0:2]: |
b1b3127227be
config: add an experimental option to list all known config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
1000 yield current_defined |
b1b3127227be
config: add an experimental option to list all known config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
1001 current_defined = next(defined, None) |
b1b3127227be
config: add an experimental option to list all known config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
1002 current_known = next(known, None) |
b1b3127227be
config: add an experimental option to list all known config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
1003 elif current_known[0:2] < current_defined[0:2]: |
b1b3127227be
config: add an experimental option to list all known config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
1004 yield current_known |
b1b3127227be
config: add an experimental option to list all known config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
1005 current_known = next(known, None) |
b1b3127227be
config: add an experimental option to list all known config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
1006 else: |
b1b3127227be
config: add an experimental option to list all known config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
1007 yield current_defined |
b1b3127227be
config: add an experimental option to list all known config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
1008 current_defined = next(defined, None) |
b1b3127227be
config: add an experimental option to list all known config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
1009 |
b1b3127227be
config: add an experimental option to list all known config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
1010 def _walk_known(self): |
b1b3127227be
config: add an experimental option to list all known config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
1011 for section, items in sorted(self._knownconfig.items()): |
b1b3127227be
config: add an experimental option to list all known config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
1012 for k, i in sorted(items.items()): |
b1b3127227be
config: add an experimental option to list all known config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
1013 # We don't have a way to display generic well, so skip them |
b1b3127227be
config: add an experimental option to list all known config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
1014 if i.generic: |
b1b3127227be
config: add an experimental option to list all known config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
1015 continue |
b1b3127227be
config: add an experimental option to list all known config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
1016 if callable(i.default): |
b1b3127227be
config: add an experimental option to list all known config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
1017 default = i.default() |
b1b3127227be
config: add an experimental option to list all known config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
1018 elif i.default is configitems.dynamicdefault: |
b1b3127227be
config: add an experimental option to list all known config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
1019 default = b'<DYNAMIC>' |
b1b3127227be
config: add an experimental option to list all known config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
1020 else: |
b1b3127227be
config: add an experimental option to list all known config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
1021 default = i.default |
b1b3127227be
config: add an experimental option to list all known config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
1022 yield section, i.name, default |
b1b3127227be
config: add an experimental option to list all known config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
1023 |
b1b3127227be
config: add an experimental option to list all known config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
1024 def _walk_config(self, untrusted): |
8203 | 1025 cfg = self._data(untrusted) |
1026 for section in cfg.sections(): | |
3552
9b52239dc740
save settings from untrusted config files in a separate configparser
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3551
diff
changeset
|
1027 for name, value in self.configitems(section, untrusted): |
13576
edd06611a7c6
ui: yield unchanged values in walkconfig
Martin Geisler <mg@aragost.com>
parents:
13493
diff
changeset
|
1028 yield section, name, value |
1028
25e7ea0f2cff
Add commands.debugconfig.
Bryan O'Sullivan <bos@serpentine.com>
parents:
981
diff
changeset
|
1029 |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
1030 def plain(self, feature: Optional[bytes] = None) -> bool: |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1031 """is plain mode active? |
11325
22a737306ba5
ui: document the formatted(), interactive() & plain() functions.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11324
diff
changeset
|
1032 |
13849
9f97de157aad
HGPLAIN: allow exceptions to plain mode, like i18n, via HGPLAINEXCEPT
Brodie Rao <brodie@bitheap.org>
parents:
13827
diff
changeset
|
1033 Plain mode means that all configuration variables which affect |
9f97de157aad
HGPLAIN: allow exceptions to plain mode, like i18n, via HGPLAINEXCEPT
Brodie Rao <brodie@bitheap.org>
parents:
13827
diff
changeset
|
1034 the behavior and output of Mercurial should be |
9f97de157aad
HGPLAIN: allow exceptions to plain mode, like i18n, via HGPLAINEXCEPT
Brodie Rao <brodie@bitheap.org>
parents:
13827
diff
changeset
|
1035 ignored. Additionally, the output should be stable, |
9f97de157aad
HGPLAIN: allow exceptions to plain mode, like i18n, via HGPLAINEXCEPT
Brodie Rao <brodie@bitheap.org>
parents:
13827
diff
changeset
|
1036 reproducible and suitable for use in scripts or applications. |
9f97de157aad
HGPLAIN: allow exceptions to plain mode, like i18n, via HGPLAINEXCEPT
Brodie Rao <brodie@bitheap.org>
parents:
13827
diff
changeset
|
1037 |
9f97de157aad
HGPLAIN: allow exceptions to plain mode, like i18n, via HGPLAINEXCEPT
Brodie Rao <brodie@bitheap.org>
parents:
13827
diff
changeset
|
1038 The only way to trigger plain mode is by setting either the |
9f97de157aad
HGPLAIN: allow exceptions to plain mode, like i18n, via HGPLAINEXCEPT
Brodie Rao <brodie@bitheap.org>
parents:
13827
diff
changeset
|
1039 `HGPLAIN' or `HGPLAINEXCEPT' environment variables. |
11325
22a737306ba5
ui: document the formatted(), interactive() & plain() functions.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11324
diff
changeset
|
1040 |
14372
be0daa0eeb3e
ui: test plain mode against exceptions
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
14171
diff
changeset
|
1041 The return value can either be |
be0daa0eeb3e
ui: test plain mode against exceptions
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
14171
diff
changeset
|
1042 - False if HGPLAIN is not set, or feature is in HGPLAINEXCEPT |
35170
c9740b69b9b7
dispatch: add HGPLAIN=+strictflags to restrict early parsing of global options
Yuya Nishihara <yuya@tcha.org>
parents:
34947
diff
changeset
|
1043 - False if feature is disabled by default and not included in HGPLAIN |
14372
be0daa0eeb3e
ui: test plain mode against exceptions
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
14171
diff
changeset
|
1044 - True otherwise |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1045 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1046 if ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1047 b'HGPLAIN' not in encoding.environ |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1048 and b'HGPLAINEXCEPT' not in encoding.environ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1049 ): |
13849
9f97de157aad
HGPLAIN: allow exceptions to plain mode, like i18n, via HGPLAINEXCEPT
Brodie Rao <brodie@bitheap.org>
parents:
13827
diff
changeset
|
1050 return False |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1051 exceptions = ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1052 encoding.environ.get(b'HGPLAINEXCEPT', b'').strip().split(b',') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1053 ) |
35170
c9740b69b9b7
dispatch: add HGPLAIN=+strictflags to restrict early parsing of global options
Yuya Nishihara <yuya@tcha.org>
parents:
34947
diff
changeset
|
1054 # TODO: add support for HGPLAIN=+feature,-feature syntax |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1055 if b'+strictflags' not in encoding.environ.get(b'HGPLAIN', b'').split( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1056 b',' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1057 ): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1058 exceptions.append(b'strictflags') |
14372
be0daa0eeb3e
ui: test plain mode against exceptions
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
14171
diff
changeset
|
1059 if feature and exceptions: |
be0daa0eeb3e
ui: test plain mode against exceptions
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
14171
diff
changeset
|
1060 return feature not in exceptions |
be0daa0eeb3e
ui: test plain mode against exceptions
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
14171
diff
changeset
|
1061 return True |
10455
40dfd46d098f
ui: add HGPLAIN environment variable for easier scripting
Brodie Rao <me+hg@dackz.net>
parents:
10426
diff
changeset
|
1062 |
34849
9f2891fb426c
ui: add the possibility to returns None as username in ui
Boris Feld <boris.feld@octobus.net>
parents:
34707
diff
changeset
|
1063 def username(self, acceptempty=False): |
1985
c577689006fa
Adapted behaviour of ui.username() to documentation and mention it explicitly:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1984
diff
changeset
|
1064 """Return default username to be used in commits. |
c577689006fa
Adapted behaviour of ui.username() to documentation and mention it explicitly:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1984
diff
changeset
|
1065 |
c577689006fa
Adapted behaviour of ui.username() to documentation and mention it explicitly:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1984
diff
changeset
|
1066 Searched in this order: $HGUSER, [ui] section of hgrcs, $EMAIL |
c577689006fa
Adapted behaviour of ui.username() to documentation and mention it explicitly:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1984
diff
changeset
|
1067 and stop searching if one of these is set. |
34849
9f2891fb426c
ui: add the possibility to returns None as username in ui
Boris Feld <boris.feld@octobus.net>
parents:
34707
diff
changeset
|
1068 If not found and acceptempty is True, returns None. |
6862
7192876ac329
ui: add an option to prompt for the username when it isn't provided
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
6762
diff
changeset
|
1069 If not found and ui.askusername is True, ask the user, else use |
7192876ac329
ui: add an option to prompt for the username when it isn't provided
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
6762
diff
changeset
|
1070 ($LOGNAME or $USER or $LNAME or $USERNAME) + "@full.hostname". |
34849
9f2891fb426c
ui: add the possibility to returns None as username in ui
Boris Feld <boris.feld@octobus.net>
parents:
34707
diff
changeset
|
1071 If no username could be found, raise an Abort error. |
1985
c577689006fa
Adapted behaviour of ui.username() to documentation and mention it explicitly:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1984
diff
changeset
|
1072 """ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1073 user = encoding.environ.get(b"HGUSER") |
1985
c577689006fa
Adapted behaviour of ui.username() to documentation and mention it explicitly:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1984
diff
changeset
|
1074 if user is None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1075 user = self.config(b"ui", b"username") |
11225
d6dbd5e4ee72
ui.username(): expand environment variables in username configuration value.
Chad Dombrova <chadrik@gmail.com>
parents:
11036
diff
changeset
|
1076 if user is not None: |
d6dbd5e4ee72
ui.username(): expand environment variables in username configuration value.
Chad Dombrova <chadrik@gmail.com>
parents:
11036
diff
changeset
|
1077 user = os.path.expandvars(user) |
1985
c577689006fa
Adapted behaviour of ui.username() to documentation and mention it explicitly:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1984
diff
changeset
|
1078 if user is None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1079 user = encoding.environ.get(b"EMAIL") |
34849
9f2891fb426c
ui: add the possibility to returns None as username in ui
Boris Feld <boris.feld@octobus.net>
parents:
34707
diff
changeset
|
1080 if user is None and acceptempty: |
9f2891fb426c
ui: add the possibility to returns None as username in ui
Boris Feld <boris.feld@octobus.net>
parents:
34707
diff
changeset
|
1081 return user |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1082 if user is None and self.configbool(b"ui", b"askusername"): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1083 user = self.prompt(_(b"enter a commit username:"), default=None) |
9613
c63c336ee2f7
ui: only use "user@host" as username in noninteractive mode
Martin Geisler <mg@lazybytes.net>
parents:
9610
diff
changeset
|
1084 if user is None and not self.interactive(): |
3721
98f2507c5551
only print a warning when no username is specified
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3678
diff
changeset
|
1085 try: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1086 user = b'%s@%s' % ( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1087 procutil.getuser(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1088 encoding.strtolocal(socket.getfqdn()), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1089 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1090 self.warn(_(b"no username found, using '%s' instead\n") % user) |
3721
98f2507c5551
only print a warning when no username is specified
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3678
diff
changeset
|
1091 except KeyError: |
4044
78a0dd93db0b
Abort on empty username so specifying a username can be forced.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3984
diff
changeset
|
1092 pass |
78a0dd93db0b
Abort on empty username so specifying a username can be forced.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3984
diff
changeset
|
1093 if not user: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1094 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1095 _(b'no username supplied'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1096 hint=_(b"use 'hg config --edit' " b'to set your username'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1097 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1098 if b"\n" in user: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1099 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1100 _(b"username %r contains a newline\n") % pycompat.bytestr(user) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1101 ) |
1985
c577689006fa
Adapted behaviour of ui.username() to documentation and mention it explicitly:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1984
diff
changeset
|
1102 return user |
608
d2994b5298fb
Add username/merge/editor to .hgrc
Matt Mackall <mpm@selenic.com>
parents:
565
diff
changeset
|
1103 |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
1104 def shortuser(self, user: bytes) -> bytes: |
1129
ee4f60abad93
Move generating short username to display in hg/hgweb annotate to ui module.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1071
diff
changeset
|
1105 """Return a short representation of a user name or email address.""" |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1106 if not self.verbose: |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36910
diff
changeset
|
1107 user = stringutil.shortuser(user) |
1129
ee4f60abad93
Move generating short username to display in hg/hgweb annotate to ui module.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1071
diff
changeset
|
1108 return user |
ee4f60abad93
Move generating short username to display in hg/hgweb annotate to ui module.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1071
diff
changeset
|
1109 |
24250
9c32eea2ca04
ui: represent paths as classes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23269
diff
changeset
|
1110 @util.propertycache |
9c32eea2ca04
ui: represent paths as classes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23269
diff
changeset
|
1111 def paths(self): |
46906
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46828
diff
changeset
|
1112 return urlutil.paths(self) |
506 | 1113 |
40543
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1114 @property |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1115 def fout(self): |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1116 return self._fout |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1117 |
50453
7f0f3b274d1e
ui: keep the progress bar around when writing if stdout is not a tty
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50253
diff
changeset
|
1118 @util.propertycache |
7f0f3b274d1e
ui: keep the progress bar around when writing if stdout is not a tty
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50253
diff
changeset
|
1119 def _fout_is_a_tty(self): |
7f0f3b274d1e
ui: keep the progress bar around when writing if stdout is not a tty
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50253
diff
changeset
|
1120 self._isatty(self._fout) |
7f0f3b274d1e
ui: keep the progress bar around when writing if stdout is not a tty
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50253
diff
changeset
|
1121 |
40543
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1122 @fout.setter |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1123 def fout(self, f): |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1124 self._fout = f |
40547
840cd57cde32
ui: add config knob to redirect status messages to stderr (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40543
diff
changeset
|
1125 self._fmsgout, self._fmsgerr = _selectmsgdests(self) |
50453
7f0f3b274d1e
ui: keep the progress bar around when writing if stdout is not a tty
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50253
diff
changeset
|
1126 if '_fout_is_a_tty' in vars(self): |
7f0f3b274d1e
ui: keep the progress bar around when writing if stdout is not a tty
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50253
diff
changeset
|
1127 del self._fout_is_a_tty |
40543
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1128 |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1129 @property |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1130 def ferr(self): |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1131 return self._ferr |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1132 |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1133 @ferr.setter |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1134 def ferr(self, f): |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1135 self._ferr = f |
40547
840cd57cde32
ui: add config knob to redirect status messages to stderr (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40543
diff
changeset
|
1136 self._fmsgout, self._fmsgerr = _selectmsgdests(self) |
40543
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1137 |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1138 @property |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1139 def fin(self): |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1140 return self._fin |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1141 |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1142 @fin.setter |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1143 def fin(self, f): |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1144 self._fin = f |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1145 |
40587
5542bc9125c9
dispatch: pass around ui.fmsg channel
Yuya Nishihara <yuya@tcha.org>
parents:
40578
diff
changeset
|
1146 @property |
5542bc9125c9
dispatch: pass around ui.fmsg channel
Yuya Nishihara <yuya@tcha.org>
parents:
40578
diff
changeset
|
1147 def fmsg(self): |
5542bc9125c9
dispatch: pass around ui.fmsg channel
Yuya Nishihara <yuya@tcha.org>
parents:
40578
diff
changeset
|
1148 """Stream dedicated for status/error messages; may be None if |
5542bc9125c9
dispatch: pass around ui.fmsg channel
Yuya Nishihara <yuya@tcha.org>
parents:
40578
diff
changeset
|
1149 fout/ferr are used""" |
5542bc9125c9
dispatch: pass around ui.fmsg channel
Yuya Nishihara <yuya@tcha.org>
parents:
40578
diff
changeset
|
1150 return self._fmsg |
5542bc9125c9
dispatch: pass around ui.fmsg channel
Yuya Nishihara <yuya@tcha.org>
parents:
40578
diff
changeset
|
1151 |
5542bc9125c9
dispatch: pass around ui.fmsg channel
Yuya Nishihara <yuya@tcha.org>
parents:
40578
diff
changeset
|
1152 @fmsg.setter |
5542bc9125c9
dispatch: pass around ui.fmsg channel
Yuya Nishihara <yuya@tcha.org>
parents:
40578
diff
changeset
|
1153 def fmsg(self, f): |
5542bc9125c9
dispatch: pass around ui.fmsg channel
Yuya Nishihara <yuya@tcha.org>
parents:
40578
diff
changeset
|
1154 self._fmsg = f |
5542bc9125c9
dispatch: pass around ui.fmsg channel
Yuya Nishihara <yuya@tcha.org>
parents:
40578
diff
changeset
|
1155 self._fmsgout, self._fmsgerr = _selectmsgdests(self) |
5542bc9125c9
dispatch: pass around ui.fmsg channel
Yuya Nishihara <yuya@tcha.org>
parents:
40578
diff
changeset
|
1156 |
47437
7a430116f639
ui: add a context manager for silencing the ui (pushbuffer+popbuffer)
Martin von Zweigbergk <martinvonz@google.com>
parents:
47415
diff
changeset
|
1157 @contextlib.contextmanager |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
1158 def silent( |
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
1159 self, error: bool = False, subproc: bool = False, labeled: bool = False |
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
1160 ): |
47437
7a430116f639
ui: add a context manager for silencing the ui (pushbuffer+popbuffer)
Martin von Zweigbergk <martinvonz@google.com>
parents:
47415
diff
changeset
|
1161 self.pushbuffer(error=error, subproc=subproc, labeled=labeled) |
7a430116f639
ui: add a context manager for silencing the ui (pushbuffer+popbuffer)
Martin von Zweigbergk <martinvonz@google.com>
parents:
47415
diff
changeset
|
1162 try: |
7a430116f639
ui: add a context manager for silencing the ui (pushbuffer+popbuffer)
Martin von Zweigbergk <martinvonz@google.com>
parents:
47415
diff
changeset
|
1163 yield |
7a430116f639
ui: add a context manager for silencing the ui (pushbuffer+popbuffer)
Martin von Zweigbergk <martinvonz@google.com>
parents:
47415
diff
changeset
|
1164 finally: |
7a430116f639
ui: add a context manager for silencing the ui (pushbuffer+popbuffer)
Martin von Zweigbergk <martinvonz@google.com>
parents:
47415
diff
changeset
|
1165 self.popbuffer() |
7a430116f639
ui: add a context manager for silencing the ui (pushbuffer+popbuffer)
Martin von Zweigbergk <martinvonz@google.com>
parents:
47415
diff
changeset
|
1166 |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
1167 def pushbuffer( |
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
1168 self, error: bool = False, subproc: bool = False, labeled: bool = False |
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
1169 ) -> None: |
23139
e53f6b72a0e4
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
23053
diff
changeset
|
1170 """install a buffer to capture standard output of the ui object |
21132
350dc24a553d
ui: pushbuffer can now also capture stderr
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20788
diff
changeset
|
1171 |
24848
2f88821856eb
ui: allow capture of subprocess output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24687
diff
changeset
|
1172 If error is True, the error output will be captured too. |
2f88821856eb
ui: allow capture of subprocess output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24687
diff
changeset
|
1173 |
2f88821856eb
ui: allow capture of subprocess output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24687
diff
changeset
|
1174 If subproc is True, output from subprocesses (typically hooks) will be |
27106
6ef17697b03d
ui: track label expansion when creating buffers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27068
diff
changeset
|
1175 captured too. |
10815
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
1176 |
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
1177 If labeled is True, any labels associated with buffered |
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
1178 output will be handled. By default, this has no effect |
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
1179 on the output returned, but extensions and GUI tools may |
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
1180 handle this argument and returned styled output. If output |
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
1181 is being buffered so it can be captured and parsed or |
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
1182 processed, labeled should not be set to True. |
27106
6ef17697b03d
ui: track label expansion when creating buffers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27068
diff
changeset
|
1183 """ |
8202 | 1184 self._buffers.append([]) |
27106
6ef17697b03d
ui: track label expansion when creating buffers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27068
diff
changeset
|
1185 self._bufferstates.append((error, subproc, labeled)) |
6ef17697b03d
ui: track label expansion when creating buffers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27068
diff
changeset
|
1186 self._bufferapplylabels = labeled |
3737
9f5c46c50118
add a simple nested buffering scheme to ui
Matt Mackall <mpm@selenic.com>
parents:
3721
diff
changeset
|
1187 |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
1188 def popbuffer(self) -> bytes: |
27109
a93d53f79e6e
ui: remove labeled argument from popbuffer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27106
diff
changeset
|
1189 '''pop the last buffer and return the buffered output''' |
21132
350dc24a553d
ui: pushbuffer can now also capture stderr
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20788
diff
changeset
|
1190 self._bufferstates.pop() |
27106
6ef17697b03d
ui: track label expansion when creating buffers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27068
diff
changeset
|
1191 if self._bufferstates: |
6ef17697b03d
ui: track label expansion when creating buffers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27068
diff
changeset
|
1192 self._bufferapplylabels = self._bufferstates[-1][2] |
6ef17697b03d
ui: track label expansion when creating buffers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27068
diff
changeset
|
1193 else: |
6ef17697b03d
ui: track label expansion when creating buffers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27068
diff
changeset
|
1194 self._bufferapplylabels = None |
6ef17697b03d
ui: track label expansion when creating buffers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27068
diff
changeset
|
1195 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1196 return b"".join(self._buffers.pop()) |
3737
9f5c46c50118
add a simple nested buffering scheme to ui
Matt Mackall <mpm@selenic.com>
parents:
3721
diff
changeset
|
1197 |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
1198 def _isbuffered(self, dest) -> bool: |
40543
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1199 if dest is self._fout: |
40541
c2aea007130b
ui: add inner function to select write destination
Yuya Nishihara <yuya@tcha.org>
parents:
40540
diff
changeset
|
1200 return bool(self._buffers) |
40543
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1201 if dest is self._ferr: |
40541
c2aea007130b
ui: add inner function to select write destination
Yuya Nishihara <yuya@tcha.org>
parents:
40540
diff
changeset
|
1202 return bool(self._bufferstates and self._bufferstates[-1][0]) |
c2aea007130b
ui: add inner function to select write destination
Yuya Nishihara <yuya@tcha.org>
parents:
40540
diff
changeset
|
1203 return False |
c2aea007130b
ui: add inner function to select write destination
Yuya Nishihara <yuya@tcha.org>
parents:
40540
diff
changeset
|
1204 |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
1205 def canwritewithoutlabels(self) -> bool: |
35961
0ff41ced4c12
diff: improve ui.write performance when not coloring on Windows
Joerg Sonnenberger <joerg@bec.de>
parents:
35957
diff
changeset
|
1206 '''check if write skips the label''' |
0ff41ced4c12
diff: improve ui.write performance when not coloring on Windows
Joerg Sonnenberger <joerg@bec.de>
parents:
35957
diff
changeset
|
1207 if self._buffers and not self._bufferapplylabels: |
0ff41ced4c12
diff: improve ui.write performance when not coloring on Windows
Joerg Sonnenberger <joerg@bec.de>
parents:
35957
diff
changeset
|
1208 return True |
0ff41ced4c12
diff: improve ui.write performance when not coloring on Windows
Joerg Sonnenberger <joerg@bec.de>
parents:
35957
diff
changeset
|
1209 return self._colormode is None |
0ff41ced4c12
diff: improve ui.write performance when not coloring on Windows
Joerg Sonnenberger <joerg@bec.de>
parents:
35957
diff
changeset
|
1210 |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
1211 def canbatchlabeledwrites(self) -> bool: |
35961
0ff41ced4c12
diff: improve ui.write performance when not coloring on Windows
Joerg Sonnenberger <joerg@bec.de>
parents:
35957
diff
changeset
|
1212 '''check if write calls with labels are batchable''' |
0ff41ced4c12
diff: improve ui.write performance when not coloring on Windows
Joerg Sonnenberger <joerg@bec.de>
parents:
35957
diff
changeset
|
1213 # Windows color printing is special, see ``write``. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1214 return self._colormode != b'win32' |
35961
0ff41ced4c12
diff: improve ui.write performance when not coloring on Windows
Joerg Sonnenberger <joerg@bec.de>
parents:
35957
diff
changeset
|
1215 |
49795
f1e820cda2f5
typing: add type hints related to message output in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49794
diff
changeset
|
1216 def write(self, *args: bytes, **opts: _MsgOpts) -> None: |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1217 """write args to output |
10815
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
1218 |
31091
ad074f900907
color: move 'write' logic to the core ui class
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31090
diff
changeset
|
1219 By default, this method simply writes to the buffer or stdout. |
ad074f900907
color: move 'write' logic to the core ui class
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31090
diff
changeset
|
1220 Color mode can be set on the UI class to have the output decorated |
ad074f900907
color: move 'write' logic to the core ui class
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31090
diff
changeset
|
1221 with color modifier before being written to stdout. |
10815
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
1222 |
31091
ad074f900907
color: move 'write' logic to the core ui class
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31090
diff
changeset
|
1223 The color used is controlled by an optional keyword argument, "label". |
ad074f900907
color: move 'write' logic to the core ui class
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31090
diff
changeset
|
1224 This should be a string containing label names separated by space. |
ad074f900907
color: move 'write' logic to the core ui class
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31090
diff
changeset
|
1225 Label names take the form of "topic.type". For example, ui.debug() |
ad074f900907
color: move 'write' logic to the core ui class
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31090
diff
changeset
|
1226 issues a label of "ui.debug". |
10815
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
1227 |
43265
82879e06c926
ui: option to preserve the progress bar
Joerg Sonnenberger <joerg@bec.de>
parents:
43118
diff
changeset
|
1228 Progress reports via stderr are normally cleared before writing as |
82879e06c926
ui: option to preserve the progress bar
Joerg Sonnenberger <joerg@bec.de>
parents:
43118
diff
changeset
|
1229 stdout and stderr go to the same terminal. This can be skipped with |
82879e06c926
ui: option to preserve the progress bar
Joerg Sonnenberger <joerg@bec.de>
parents:
43118
diff
changeset
|
1230 the optional keyword argument "keepprogressbar". The progress bar |
82879e06c926
ui: option to preserve the progress bar
Joerg Sonnenberger <joerg@bec.de>
parents:
43118
diff
changeset
|
1231 will continue to occupy a partial line on stderr in that case. |
82879e06c926
ui: option to preserve the progress bar
Joerg Sonnenberger <joerg@bec.de>
parents:
43118
diff
changeset
|
1232 This functionality is intended when Mercurial acts as data source |
82879e06c926
ui: option to preserve the progress bar
Joerg Sonnenberger <joerg@bec.de>
parents:
43118
diff
changeset
|
1233 in a pipe. |
82879e06c926
ui: option to preserve the progress bar
Joerg Sonnenberger <joerg@bec.de>
parents:
43118
diff
changeset
|
1234 |
10815
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
1235 When labeling output for a specific command, a label of |
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
1236 "cmdname.type" is recommended. For example, status issues |
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
1237 a label of "status.modified" for modified files. |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1238 """ |
41306
b4a3abdc790d
ui: inline _write() into write() due to performance issue
Yuya Nishihara <yuya@tcha.org>
parents:
41305
diff
changeset
|
1239 dest = self._fout |
b4a3abdc790d
ui: inline _write() into write() due to performance issue
Yuya Nishihara <yuya@tcha.org>
parents:
41305
diff
changeset
|
1240 |
b4a3abdc790d
ui: inline _write() into write() due to performance issue
Yuya Nishihara <yuya@tcha.org>
parents:
41305
diff
changeset
|
1241 # inlined _write() for speed |
41308
26ee61c33dee
ui: remove unreachable branches and function calls from write() (issue6059)
Yuya Nishihara <yuya@tcha.org>
parents:
41307
diff
changeset
|
1242 if self._buffers: |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43377
diff
changeset
|
1243 label = opts.get('label', b'') |
41306
b4a3abdc790d
ui: inline _write() into write() due to performance issue
Yuya Nishihara <yuya@tcha.org>
parents:
41305
diff
changeset
|
1244 if label and self._bufferapplylabels: |
b4a3abdc790d
ui: inline _write() into write() due to performance issue
Yuya Nishihara <yuya@tcha.org>
parents:
41305
diff
changeset
|
1245 self._buffers[-1].extend(self.label(a, label) for a in args) |
b4a3abdc790d
ui: inline _write() into write() due to performance issue
Yuya Nishihara <yuya@tcha.org>
parents:
41305
diff
changeset
|
1246 else: |
b4a3abdc790d
ui: inline _write() into write() due to performance issue
Yuya Nishihara <yuya@tcha.org>
parents:
41305
diff
changeset
|
1247 self._buffers[-1].extend(args) |
41307
e8273eaa0726
ui: inline _writenobuf() into write() due to performance issue
Yuya Nishihara <yuya@tcha.org>
parents:
41306
diff
changeset
|
1248 return |
e8273eaa0726
ui: inline _writenobuf() into write() due to performance issue
Yuya Nishihara <yuya@tcha.org>
parents:
41306
diff
changeset
|
1249 |
43265
82879e06c926
ui: option to preserve the progress bar
Joerg Sonnenberger <joerg@bec.de>
parents:
43118
diff
changeset
|
1250 # inlined _writenobuf() for speed |
50453
7f0f3b274d1e
ui: keep the progress bar around when writing if stdout is not a tty
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50253
diff
changeset
|
1251 if not opts.get('keepprogressbar', self._fout_is_a_tty): |
43265
82879e06c926
ui: option to preserve the progress bar
Joerg Sonnenberger <joerg@bec.de>
parents:
43118
diff
changeset
|
1252 self._progclear() |
41307
e8273eaa0726
ui: inline _writenobuf() into write() due to performance issue
Yuya Nishihara <yuya@tcha.org>
parents:
41306
diff
changeset
|
1253 msg = b''.join(args) |
e8273eaa0726
ui: inline _writenobuf() into write() due to performance issue
Yuya Nishihara <yuya@tcha.org>
parents:
41306
diff
changeset
|
1254 |
e8273eaa0726
ui: inline _writenobuf() into write() due to performance issue
Yuya Nishihara <yuya@tcha.org>
parents:
41306
diff
changeset
|
1255 # opencode timeblockedsection because this is a critical path |
e8273eaa0726
ui: inline _writenobuf() into write() due to performance issue
Yuya Nishihara <yuya@tcha.org>
parents:
41306
diff
changeset
|
1256 starttime = util.timer() |
e8273eaa0726
ui: inline _writenobuf() into write() due to performance issue
Yuya Nishihara <yuya@tcha.org>
parents:
41306
diff
changeset
|
1257 try: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1258 if self._colormode == b'win32': |
41307
e8273eaa0726
ui: inline _writenobuf() into write() due to performance issue
Yuya Nishihara <yuya@tcha.org>
parents:
41306
diff
changeset
|
1259 # windows color printing is its own can of crab, defer to |
e8273eaa0726
ui: inline _writenobuf() into write() due to performance issue
Yuya Nishihara <yuya@tcha.org>
parents:
41306
diff
changeset
|
1260 # the color module and that is it. |
e8273eaa0726
ui: inline _writenobuf() into write() due to performance issue
Yuya Nishihara <yuya@tcha.org>
parents:
41306
diff
changeset
|
1261 color.win32print(self, dest.write, msg, **opts) |
e8273eaa0726
ui: inline _writenobuf() into write() due to performance issue
Yuya Nishihara <yuya@tcha.org>
parents:
41306
diff
changeset
|
1262 else: |
e8273eaa0726
ui: inline _writenobuf() into write() due to performance issue
Yuya Nishihara <yuya@tcha.org>
parents:
41306
diff
changeset
|
1263 if self._colormode is not None: |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43377
diff
changeset
|
1264 label = opts.get('label', b'') |
41307
e8273eaa0726
ui: inline _writenobuf() into write() due to performance issue
Yuya Nishihara <yuya@tcha.org>
parents:
41306
diff
changeset
|
1265 msg = self.label(msg, label) |
e8273eaa0726
ui: inline _writenobuf() into write() due to performance issue
Yuya Nishihara <yuya@tcha.org>
parents:
41306
diff
changeset
|
1266 dest.write(msg) |
e8273eaa0726
ui: inline _writenobuf() into write() due to performance issue
Yuya Nishihara <yuya@tcha.org>
parents:
41306
diff
changeset
|
1267 except IOError as err: |
e8273eaa0726
ui: inline _writenobuf() into write() due to performance issue
Yuya Nishihara <yuya@tcha.org>
parents:
41306
diff
changeset
|
1268 raise error.StdioError(err) |
e8273eaa0726
ui: inline _writenobuf() into write() due to performance issue
Yuya Nishihara <yuya@tcha.org>
parents:
41306
diff
changeset
|
1269 finally: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1270 self._blockedtimes[b'stdio_blocked'] += ( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1271 util.timer() - starttime |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1272 ) * 1000 |
40541
c2aea007130b
ui: add inner function to select write destination
Yuya Nishihara <yuya@tcha.org>
parents:
40540
diff
changeset
|
1273 |
49795
f1e820cda2f5
typing: add type hints related to message output in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49794
diff
changeset
|
1274 def write_err(self, *args: bytes, **opts: _MsgOpts) -> None: |
40543
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1275 self._write(self._ferr, *args, **opts) |
40541
c2aea007130b
ui: add inner function to select write destination
Yuya Nishihara <yuya@tcha.org>
parents:
40540
diff
changeset
|
1276 |
49795
f1e820cda2f5
typing: add type hints related to message output in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49794
diff
changeset
|
1277 def _write(self, dest, *args: bytes, **opts: _MsgOpts) -> None: |
41306
b4a3abdc790d
ui: inline _write() into write() due to performance issue
Yuya Nishihara <yuya@tcha.org>
parents:
41305
diff
changeset
|
1278 # update write() as well if you touch this code |
40541
c2aea007130b
ui: add inner function to select write destination
Yuya Nishihara <yuya@tcha.org>
parents:
40540
diff
changeset
|
1279 if self._isbuffered(dest): |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43377
diff
changeset
|
1280 label = opts.get('label', b'') |
41305
ff927ecb12f9
ui: optimize buffered write with no label
Yuya Nishihara <yuya@tcha.org>
parents:
41285
diff
changeset
|
1281 if label and self._bufferapplylabels: |
31091
ad074f900907
color: move 'write' logic to the core ui class
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31090
diff
changeset
|
1282 self._buffers[-1].extend(self.label(a, label) for a in args) |
ad074f900907
color: move 'write' logic to the core ui class
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31090
diff
changeset
|
1283 else: |
ad074f900907
color: move 'write' logic to the core ui class
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31090
diff
changeset
|
1284 self._buffers[-1].extend(args) |
35957
b62c4154bb28
ui: add explicit path to write prompt text bypassing buffers
Yuya Nishihara <yuya@tcha.org>
parents:
35956
diff
changeset
|
1285 else: |
40541
c2aea007130b
ui: add inner function to select write destination
Yuya Nishihara <yuya@tcha.org>
parents:
40540
diff
changeset
|
1286 self._writenobuf(dest, *args, **opts) |
35957
b62c4154bb28
ui: add explicit path to write prompt text bypassing buffers
Yuya Nishihara <yuya@tcha.org>
parents:
35956
diff
changeset
|
1287 |
49795
f1e820cda2f5
typing: add type hints related to message output in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49794
diff
changeset
|
1288 def _writenobuf(self, dest, *args: bytes, **opts: _MsgOpts) -> None: |
41307
e8273eaa0726
ui: inline _writenobuf() into write() due to performance issue
Yuya Nishihara <yuya@tcha.org>
parents:
41306
diff
changeset
|
1289 # update write() as well if you touch this code |
50453
7f0f3b274d1e
ui: keep the progress bar around when writing if stdout is not a tty
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50253
diff
changeset
|
1290 if not opts.get('keepprogressbar', self._fout_is_a_tty): |
43265
82879e06c926
ui: option to preserve the progress bar
Joerg Sonnenberger <joerg@bec.de>
parents:
43118
diff
changeset
|
1291 self._progclear() |
40522
51091816a355
ui: simply concatenate messages before applying color labels
Yuya Nishihara <yuya@tcha.org>
parents:
40521
diff
changeset
|
1292 msg = b''.join(args) |
31090
e9f96ccf36a6
ui: extract the low level part of 'write' in a dedicated function
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31087
diff
changeset
|
1293 |
31128
0bb3089fe735
ui: remove superfluous indent in _write()
Yuya Nishihara <yuya@tcha.org>
parents:
31124
diff
changeset
|
1294 # opencode timeblockedsection because this is a critical path |
0bb3089fe735
ui: remove superfluous indent in _write()
Yuya Nishihara <yuya@tcha.org>
parents:
31124
diff
changeset
|
1295 starttime = util.timer() |
0bb3089fe735
ui: remove superfluous indent in _write()
Yuya Nishihara <yuya@tcha.org>
parents:
31124
diff
changeset
|
1296 try: |
40543
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1297 if dest is self._ferr and not getattr(self._fout, 'closed', False): |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1298 self._fout.flush() |
40589
054d0fcba2c4
commandserver: add experimental option to use separate message channel
Yuya Nishihara <yuya@tcha.org>
parents:
40587
diff
changeset
|
1299 if getattr(dest, 'structured', False): |
054d0fcba2c4
commandserver: add experimental option to use separate message channel
Yuya Nishihara <yuya@tcha.org>
parents:
40587
diff
changeset
|
1300 # channel for machine-readable output with metadata, where |
054d0fcba2c4
commandserver: add experimental option to use separate message channel
Yuya Nishihara <yuya@tcha.org>
parents:
40587
diff
changeset
|
1301 # no extra colorization is necessary. |
054d0fcba2c4
commandserver: add experimental option to use separate message channel
Yuya Nishihara <yuya@tcha.org>
parents:
40587
diff
changeset
|
1302 dest.write(msg, **opts) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1303 elif self._colormode == b'win32': |
40523
0c7b2035a604
ui: indent _writenobuf() to prepare moving bits from _write() functions
Yuya Nishihara <yuya@tcha.org>
parents:
40522
diff
changeset
|
1304 # windows color printing is its own can of crab, defer to |
0c7b2035a604
ui: indent _writenobuf() to prepare moving bits from _write() functions
Yuya Nishihara <yuya@tcha.org>
parents:
40522
diff
changeset
|
1305 # the color module and that is it. |
40540
06e841e72523
ui: remove _write() and _write_err() functions
Yuya Nishihara <yuya@tcha.org>
parents:
40539
diff
changeset
|
1306 color.win32print(self, dest.write, msg, **opts) |
40523
0c7b2035a604
ui: indent _writenobuf() to prepare moving bits from _write() functions
Yuya Nishihara <yuya@tcha.org>
parents:
40522
diff
changeset
|
1307 else: |
0c7b2035a604
ui: indent _writenobuf() to prepare moving bits from _write() functions
Yuya Nishihara <yuya@tcha.org>
parents:
40522
diff
changeset
|
1308 if self._colormode is not None: |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43377
diff
changeset
|
1309 label = opts.get('label', b'') |
40523
0c7b2035a604
ui: indent _writenobuf() to prepare moving bits from _write() functions
Yuya Nishihara <yuya@tcha.org>
parents:
40522
diff
changeset
|
1310 msg = self.label(msg, label) |
40540
06e841e72523
ui: remove _write() and _write_err() functions
Yuya Nishihara <yuya@tcha.org>
parents:
40539
diff
changeset
|
1311 dest.write(msg) |
40539
04a9dd8da959
ui: move pre/post processes from low-level write()s to _writenobuf()
Yuya Nishihara <yuya@tcha.org>
parents:
40538
diff
changeset
|
1312 # stderr may be buffered under win32 when redirected to files, |
04a9dd8da959
ui: move pre/post processes from low-level write()s to _writenobuf()
Yuya Nishihara <yuya@tcha.org>
parents:
40538
diff
changeset
|
1313 # including stdout. |
44992
484e04dc7f42
ui: replace `self._ferr` with identical `dest`
Manuel Jacob <me@manueljacob.de>
parents:
44661
diff
changeset
|
1314 if dest is self._ferr and not getattr(dest, 'closed', False): |
40539
04a9dd8da959
ui: move pre/post processes from low-level write()s to _writenobuf()
Yuya Nishihara <yuya@tcha.org>
parents:
40538
diff
changeset
|
1315 dest.flush() |
31961
db823e38a61c
stdio: raise StdioError if something goes wrong in ui._write
Bryan O'Sullivan <bryano@fb.com>
parents:
31958
diff
changeset
|
1316 except IOError as err: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1317 if dest is self._ferr and err.errno in ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1318 errno.EPIPE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1319 errno.EIO, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1320 errno.EBADF, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1321 ): |
40539
04a9dd8da959
ui: move pre/post processes from low-level write()s to _writenobuf()
Yuya Nishihara <yuya@tcha.org>
parents:
40538
diff
changeset
|
1322 # no way to report the error, so ignore it |
04a9dd8da959
ui: move pre/post processes from low-level write()s to _writenobuf()
Yuya Nishihara <yuya@tcha.org>
parents:
40538
diff
changeset
|
1323 return |
31961
db823e38a61c
stdio: raise StdioError if something goes wrong in ui._write
Bryan O'Sullivan <bryano@fb.com>
parents:
31958
diff
changeset
|
1324 raise error.StdioError(err) |
31128
0bb3089fe735
ui: remove superfluous indent in _write()
Yuya Nishihara <yuya@tcha.org>
parents:
31124
diff
changeset
|
1325 finally: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1326 self._blockedtimes[b'stdio_blocked'] += ( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1327 util.timer() - starttime |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1328 ) * 1000 |
565 | 1329 |
49795
f1e820cda2f5
typing: add type hints related to message output in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49794
diff
changeset
|
1330 def _writemsg(self, dest, *args: bytes, **opts: _MsgOpts) -> None: |
45025
24b1a8eb73aa
ui: add option to timestamp status and diagnostic messages
Joerg Sonnenberger <joerg@bec.de>
parents:
44992
diff
changeset
|
1331 timestamp = self.showtimestamp and opts.get('type') in { |
24b1a8eb73aa
ui: add option to timestamp status and diagnostic messages
Joerg Sonnenberger <joerg@bec.de>
parents:
44992
diff
changeset
|
1332 b'debug', |
24b1a8eb73aa
ui: add option to timestamp status and diagnostic messages
Joerg Sonnenberger <joerg@bec.de>
parents:
44992
diff
changeset
|
1333 b'error', |
24b1a8eb73aa
ui: add option to timestamp status and diagnostic messages
Joerg Sonnenberger <joerg@bec.de>
parents:
44992
diff
changeset
|
1334 b'note', |
24b1a8eb73aa
ui: add option to timestamp status and diagnostic messages
Joerg Sonnenberger <joerg@bec.de>
parents:
44992
diff
changeset
|
1335 b'status', |
24b1a8eb73aa
ui: add option to timestamp status and diagnostic messages
Joerg Sonnenberger <joerg@bec.de>
parents:
44992
diff
changeset
|
1336 b'warning', |
24b1a8eb73aa
ui: add option to timestamp status and diagnostic messages
Joerg Sonnenberger <joerg@bec.de>
parents:
44992
diff
changeset
|
1337 } |
24b1a8eb73aa
ui: add option to timestamp status and diagnostic messages
Joerg Sonnenberger <joerg@bec.de>
parents:
44992
diff
changeset
|
1338 if timestamp: |
24b1a8eb73aa
ui: add option to timestamp status and diagnostic messages
Joerg Sonnenberger <joerg@bec.de>
parents:
44992
diff
changeset
|
1339 args = ( |
45033
b4b6ff83ed9c
ui: fix Python 2.7 support for ui.timestamp-output
Joerg Sonnenberger <joerg@bec.de>
parents:
45025
diff
changeset
|
1340 b'[%s] ' |
b4b6ff83ed9c
ui: fix Python 2.7 support for ui.timestamp-output
Joerg Sonnenberger <joerg@bec.de>
parents:
45025
diff
changeset
|
1341 % pycompat.bytestr(datetime.datetime.now().isoformat()), |
45025
24b1a8eb73aa
ui: add option to timestamp status and diagnostic messages
Joerg Sonnenberger <joerg@bec.de>
parents:
44992
diff
changeset
|
1342 ) + args |
40590
83dd8c63a0c6
ui: extract helpers to write message with type or label
Yuya Nishihara <yuya@tcha.org>
parents:
40589
diff
changeset
|
1343 _writemsgwith(self._write, dest, *args, **opts) |
45025
24b1a8eb73aa
ui: add option to timestamp status and diagnostic messages
Joerg Sonnenberger <joerg@bec.de>
parents:
44992
diff
changeset
|
1344 if timestamp: |
24b1a8eb73aa
ui: add option to timestamp status and diagnostic messages
Joerg Sonnenberger <joerg@bec.de>
parents:
44992
diff
changeset
|
1345 dest.flush() |
40590
83dd8c63a0c6
ui: extract helpers to write message with type or label
Yuya Nishihara <yuya@tcha.org>
parents:
40589
diff
changeset
|
1346 |
49795
f1e820cda2f5
typing: add type hints related to message output in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49794
diff
changeset
|
1347 def _writemsgnobuf(self, dest, *args: bytes, **opts: _MsgOpts) -> None: |
40590
83dd8c63a0c6
ui: extract helpers to write message with type or label
Yuya Nishihara <yuya@tcha.org>
parents:
40589
diff
changeset
|
1348 _writemsgwith(self._writenobuf, dest, *args, **opts) |
83dd8c63a0c6
ui: extract helpers to write message with type or label
Yuya Nishihara <yuya@tcha.org>
parents:
40589
diff
changeset
|
1349 |
49795
f1e820cda2f5
typing: add type hints related to message output in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49794
diff
changeset
|
1350 def flush(self) -> None: |
30978
fdecd24ca4dc
ui: log time spent blocked on stdio
Simon Farnsworth <simonfar@fb.com>
parents:
30976
diff
changeset
|
1351 # opencode timeblockedsection because this is a critical path |
fdecd24ca4dc
ui: log time spent blocked on stdio
Simon Farnsworth <simonfar@fb.com>
parents:
30976
diff
changeset
|
1352 starttime = util.timer() |
fdecd24ca4dc
ui: log time spent blocked on stdio
Simon Farnsworth <simonfar@fb.com>
parents:
30976
diff
changeset
|
1353 try: |
31963
1bfb9a63b98e
stdio: raise StdioError if something goes wrong in ui.flush
Bryan O'Sullivan <bryano@fb.com>
parents:
31962
diff
changeset
|
1354 try: |
40543
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1355 self._fout.flush() |
31963
1bfb9a63b98e
stdio: raise StdioError if something goes wrong in ui.flush
Bryan O'Sullivan <bryano@fb.com>
parents:
31962
diff
changeset
|
1356 except IOError as err: |
33755
cde4cfeb6e3e
ui: restore behavior to ignore some I/O errors (issue5658)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33627
diff
changeset
|
1357 if err.errno not in (errno.EPIPE, errno.EIO, errno.EBADF): |
cde4cfeb6e3e
ui: restore behavior to ignore some I/O errors (issue5658)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33627
diff
changeset
|
1358 raise error.StdioError(err) |
31963
1bfb9a63b98e
stdio: raise StdioError if something goes wrong in ui.flush
Bryan O'Sullivan <bryano@fb.com>
parents:
31962
diff
changeset
|
1359 finally: |
1bfb9a63b98e
stdio: raise StdioError if something goes wrong in ui.flush
Bryan O'Sullivan <bryano@fb.com>
parents:
31962
diff
changeset
|
1360 try: |
40543
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1361 self._ferr.flush() |
31963
1bfb9a63b98e
stdio: raise StdioError if something goes wrong in ui.flush
Bryan O'Sullivan <bryano@fb.com>
parents:
31962
diff
changeset
|
1362 except IOError as err: |
33755
cde4cfeb6e3e
ui: restore behavior to ignore some I/O errors (issue5658)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33627
diff
changeset
|
1363 if err.errno not in (errno.EPIPE, errno.EIO, errno.EBADF): |
cde4cfeb6e3e
ui: restore behavior to ignore some I/O errors (issue5658)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33627
diff
changeset
|
1364 raise error.StdioError(err) |
30978
fdecd24ca4dc
ui: log time spent blocked on stdio
Simon Farnsworth <simonfar@fb.com>
parents:
30976
diff
changeset
|
1365 finally: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1366 self._blockedtimes[b'stdio_blocked'] += ( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1367 util.timer() - starttime |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1368 ) * 1000 |
1837
6f67a4c93493
make ui flush output. this makes error happen if printing to /dev/full.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1637
diff
changeset
|
1369 |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
1370 def _isatty(self, fh) -> bool: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1371 if self.configbool(b'ui', b'nontty'): |
16751
2d432a1fc0db
ui: add _isatty method to easily disable cooked I/O
Matt Mackall <mpm@selenic.com>
parents:
16703
diff
changeset
|
1372 return False |
37120
a8a902d7176e
procutil: bulk-replace function calls to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
37119
diff
changeset
|
1373 return procutil.isatty(fh) |
1837
6f67a4c93493
make ui flush output. this makes error happen if printing to /dev/full.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1637
diff
changeset
|
1374 |
41285
cf8677cd7286
ui: proxy protect/restorestdio() calls to update internal flag
Yuya Nishihara <yuya@tcha.org>
parents:
41284
diff
changeset
|
1375 def protectfinout(self): |
cf8677cd7286
ui: proxy protect/restorestdio() calls to update internal flag
Yuya Nishihara <yuya@tcha.org>
parents:
41284
diff
changeset
|
1376 """Duplicate ui streams and redirect original if they are stdio |
cf8677cd7286
ui: proxy protect/restorestdio() calls to update internal flag
Yuya Nishihara <yuya@tcha.org>
parents:
41284
diff
changeset
|
1377 |
cf8677cd7286
ui: proxy protect/restorestdio() calls to update internal flag
Yuya Nishihara <yuya@tcha.org>
parents:
41284
diff
changeset
|
1378 Returns (fin, fout) which point to the original ui fds, but may be |
cf8677cd7286
ui: proxy protect/restorestdio() calls to update internal flag
Yuya Nishihara <yuya@tcha.org>
parents:
41284
diff
changeset
|
1379 copy of them. The returned streams can be considered "owned" in that |
cf8677cd7286
ui: proxy protect/restorestdio() calls to update internal flag
Yuya Nishihara <yuya@tcha.org>
parents:
41284
diff
changeset
|
1380 print(), exec(), etc. never reach to them. |
cf8677cd7286
ui: proxy protect/restorestdio() calls to update internal flag
Yuya Nishihara <yuya@tcha.org>
parents:
41284
diff
changeset
|
1381 """ |
cf8677cd7286
ui: proxy protect/restorestdio() calls to update internal flag
Yuya Nishihara <yuya@tcha.org>
parents:
41284
diff
changeset
|
1382 if self._finoutredirected: |
cf8677cd7286
ui: proxy protect/restorestdio() calls to update internal flag
Yuya Nishihara <yuya@tcha.org>
parents:
41284
diff
changeset
|
1383 # if already redirected, protectstdio() would just create another |
cf8677cd7286
ui: proxy protect/restorestdio() calls to update internal flag
Yuya Nishihara <yuya@tcha.org>
parents:
41284
diff
changeset
|
1384 # nullfd pair, which is equivalent to returning self._fin/_fout. |
cf8677cd7286
ui: proxy protect/restorestdio() calls to update internal flag
Yuya Nishihara <yuya@tcha.org>
parents:
41284
diff
changeset
|
1385 return self._fin, self._fout |
cf8677cd7286
ui: proxy protect/restorestdio() calls to update internal flag
Yuya Nishihara <yuya@tcha.org>
parents:
41284
diff
changeset
|
1386 fin, fout = procutil.protectstdio(self._fin, self._fout) |
cf8677cd7286
ui: proxy protect/restorestdio() calls to update internal flag
Yuya Nishihara <yuya@tcha.org>
parents:
41284
diff
changeset
|
1387 self._finoutredirected = (fin, fout) != (self._fin, self._fout) |
cf8677cd7286
ui: proxy protect/restorestdio() calls to update internal flag
Yuya Nishihara <yuya@tcha.org>
parents:
41284
diff
changeset
|
1388 return fin, fout |
cf8677cd7286
ui: proxy protect/restorestdio() calls to update internal flag
Yuya Nishihara <yuya@tcha.org>
parents:
41284
diff
changeset
|
1389 |
cf8677cd7286
ui: proxy protect/restorestdio() calls to update internal flag
Yuya Nishihara <yuya@tcha.org>
parents:
41284
diff
changeset
|
1390 def restorefinout(self, fin, fout): |
cf8677cd7286
ui: proxy protect/restorestdio() calls to update internal flag
Yuya Nishihara <yuya@tcha.org>
parents:
41284
diff
changeset
|
1391 """Restore ui streams from possibly duplicated (fin, fout)""" |
cf8677cd7286
ui: proxy protect/restorestdio() calls to update internal flag
Yuya Nishihara <yuya@tcha.org>
parents:
41284
diff
changeset
|
1392 if (fin, fout) == (self._fin, self._fout): |
cf8677cd7286
ui: proxy protect/restorestdio() calls to update internal flag
Yuya Nishihara <yuya@tcha.org>
parents:
41284
diff
changeset
|
1393 return |
cf8677cd7286
ui: proxy protect/restorestdio() calls to update internal flag
Yuya Nishihara <yuya@tcha.org>
parents:
41284
diff
changeset
|
1394 procutil.restorestdio(self._fin, self._fout, fin, fout) |
cf8677cd7286
ui: proxy protect/restorestdio() calls to update internal flag
Yuya Nishihara <yuya@tcha.org>
parents:
41284
diff
changeset
|
1395 # protectfinout() won't create more than one duplicated streams, |
cf8677cd7286
ui: proxy protect/restorestdio() calls to update internal flag
Yuya Nishihara <yuya@tcha.org>
parents:
41284
diff
changeset
|
1396 # so we can just turn the redirection flag off. |
cf8677cd7286
ui: proxy protect/restorestdio() calls to update internal flag
Yuya Nishihara <yuya@tcha.org>
parents:
41284
diff
changeset
|
1397 self._finoutredirected = False |
cf8677cd7286
ui: proxy protect/restorestdio() calls to update internal flag
Yuya Nishihara <yuya@tcha.org>
parents:
41284
diff
changeset
|
1398 |
41284
b0e3f2d7c143
ui: move protectedstdio() context manager from procutil
Yuya Nishihara <yuya@tcha.org>
parents:
41225
diff
changeset
|
1399 @contextlib.contextmanager |
b0e3f2d7c143
ui: move protectedstdio() context manager from procutil
Yuya Nishihara <yuya@tcha.org>
parents:
41225
diff
changeset
|
1400 def protectedfinout(self): |
b0e3f2d7c143
ui: move protectedstdio() context manager from procutil
Yuya Nishihara <yuya@tcha.org>
parents:
41225
diff
changeset
|
1401 """Run code block with protected standard streams""" |
41285
cf8677cd7286
ui: proxy protect/restorestdio() calls to update internal flag
Yuya Nishihara <yuya@tcha.org>
parents:
41284
diff
changeset
|
1402 fin, fout = self.protectfinout() |
41284
b0e3f2d7c143
ui: move protectedstdio() context manager from procutil
Yuya Nishihara <yuya@tcha.org>
parents:
41225
diff
changeset
|
1403 try: |
b0e3f2d7c143
ui: move protectedstdio() context manager from procutil
Yuya Nishihara <yuya@tcha.org>
parents:
41225
diff
changeset
|
1404 yield fin, fout |
b0e3f2d7c143
ui: move protectedstdio() context manager from procutil
Yuya Nishihara <yuya@tcha.org>
parents:
41225
diff
changeset
|
1405 finally: |
41285
cf8677cd7286
ui: proxy protect/restorestdio() calls to update internal flag
Yuya Nishihara <yuya@tcha.org>
parents:
41284
diff
changeset
|
1406 self.restorefinout(fin, fout) |
41284
b0e3f2d7c143
ui: move protectedstdio() context manager from procutil
Yuya Nishihara <yuya@tcha.org>
parents:
41225
diff
changeset
|
1407 |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
1408 def disablepager(self) -> None: |
31026
9c827087df38
ui: rename neverpager to disablepager
Augie Fackler <augie@google.com>
parents:
31014
diff
changeset
|
1409 self._disablepager = True |
30994
3ed6e43998df
ui: introduce neverpager() call
Augie Fackler <augie@google.com>
parents:
30992
diff
changeset
|
1410 |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
1411 def pager(self, command: bytes) -> None: |
30992
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1412 """Start a pager for subsequent command output. |
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1413 |
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1414 Commands which produce a long stream of output should call |
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1415 this function to activate the user's preferred pagination |
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1416 mechanism (which may be no pager). Calling this function |
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1417 precludes any future use of interactive functionality, such as |
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1418 prompting the user or activating curses. |
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1419 |
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1420 Args: |
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1421 command: The full, non-aliased name of the command. That is, "log" |
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1422 not "history, "summary" not "summ", etc. |
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1423 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1424 if self._disablepager or self.pageractive: |
33620
cc047a733f69
ui: enable pager always for explicit --pager=on (issue5580)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33585
diff
changeset
|
1425 # how pager should do is already determined |
cc047a733f69
ui: enable pager always for explicit --pager=on (issue5580)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33585
diff
changeset
|
1426 return |
cc047a733f69
ui: enable pager always for explicit --pager=on (issue5580)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33585
diff
changeset
|
1427 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1428 if not command.startswith(b'internal-always-') and ( |
33620
cc047a733f69
ui: enable pager always for explicit --pager=on (issue5580)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33585
diff
changeset
|
1429 # explicit --pager=on (= 'internal-always-' prefix) should |
cc047a733f69
ui: enable pager always for explicit --pager=on (issue5580)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33585
diff
changeset
|
1430 # take precedence over disabling factors below |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1431 command in self.configlist(b'pager', b'ignore') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1432 or not self.configbool(b'ui', b'paginate') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1433 or not self.configbool(b'pager', b'attend-' + command, True) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1434 or encoding.environ.get(b'TERM') == b'dumb' |
30992
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1435 # TODO: if we want to allow HGPLAINEXCEPT=pager, |
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1436 # formatted() will need some adjustment. |
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1437 or not self.formatted() |
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1438 or self.plain() |
34021
31a2eb0f74e5
pager: do not start pager if `ui` has been `pushbuffer`-ed
Jun Wu <quark@fb.com>
parents:
33865
diff
changeset
|
1439 or self._buffers |
30992
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1440 # TODO: expose debugger-enabled on the UI object |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1441 or b'--debugger' in pycompat.sysargv |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1442 ): |
30992
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1443 # We only want to paginate if the ui appears to be |
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1444 # interactive, the user didn't say HGPLAIN or |
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1445 # HGPLAINEXCEPT=pager, and the user didn't specify --debug. |
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1446 return |
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1447 |
49075
7afa96d3b484
windows: disable pager when packaged with py2exe
Matt Harbison <matt_harbison@yahoo.com>
parents:
48946
diff
changeset
|
1448 # py2exe doesn't appear to be able to use legacy I/O, and nothing is |
7afa96d3b484
windows: disable pager when packaged with py2exe
Matt Harbison <matt_harbison@yahoo.com>
parents:
48946
diff
changeset
|
1449 # output to the pager for paged commands. Piping to `more` in cmd.exe |
7afa96d3b484
windows: disable pager when packaged with py2exe
Matt Harbison <matt_harbison@yahoo.com>
parents:
48946
diff
changeset
|
1450 # works, but is easy to forget. Just disable pager for py2exe, but |
7afa96d3b484
windows: disable pager when packaged with py2exe
Matt Harbison <matt_harbison@yahoo.com>
parents:
48946
diff
changeset
|
1451 # leave it working for pyoxidizer and exewrapper builds. |
7afa96d3b484
windows: disable pager when packaged with py2exe
Matt Harbison <matt_harbison@yahoo.com>
parents:
48946
diff
changeset
|
1452 if pycompat.iswindows and getattr(sys, "frozen", None) == "console_exe": |
7afa96d3b484
windows: disable pager when packaged with py2exe
Matt Harbison <matt_harbison@yahoo.com>
parents:
48946
diff
changeset
|
1453 self.debug(b"pager is unavailable with py2exe packaging\n") |
7afa96d3b484
windows: disable pager when packaged with py2exe
Matt Harbison <matt_harbison@yahoo.com>
parents:
48946
diff
changeset
|
1454 return |
7afa96d3b484
windows: disable pager when packaged with py2exe
Matt Harbison <matt_harbison@yahoo.com>
parents:
48946
diff
changeset
|
1455 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1456 pagercmd = self.config(b'pager', b'pager', rcutil.fallbackpager) |
31079
873ebdd6e84d
pager: do not try to run an empty pager command
Yuya Nishihara <yuya@tcha.org>
parents:
31062
diff
changeset
|
1457 if not pagercmd: |
873ebdd6e84d
pager: do not try to run an empty pager command
Yuya Nishihara <yuya@tcha.org>
parents:
31062
diff
changeset
|
1458 return |
873ebdd6e84d
pager: do not try to run an empty pager command
Yuya Nishihara <yuya@tcha.org>
parents:
31062
diff
changeset
|
1459 |
31954
e518192d6bac
pager: set some environment variables if they're not set
Jun Wu <quark@fb.com>
parents:
31778
diff
changeset
|
1460 pagerenv = {} |
e518192d6bac
pager: set some environment variables if they're not set
Jun Wu <quark@fb.com>
parents:
31778
diff
changeset
|
1461 for name, value in rcutil.defaultpagerenv().items(): |
e518192d6bac
pager: set some environment variables if they're not set
Jun Wu <quark@fb.com>
parents:
31778
diff
changeset
|
1462 if name not in encoding.environ: |
e518192d6bac
pager: set some environment variables if they're not set
Jun Wu <quark@fb.com>
parents:
31778
diff
changeset
|
1463 pagerenv[name] = value |
e518192d6bac
pager: set some environment variables if they're not set
Jun Wu <quark@fb.com>
parents:
31778
diff
changeset
|
1464 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1465 self.debug( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1466 b'starting pager for command %s\n' % stringutil.pprint(command) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1467 ) |
31490
8122cc5cb543
pager: flush outputs before firing pager process
Yuya Nishihara <yuya@tcha.org>
parents:
31481
diff
changeset
|
1468 self.flush() |
31690
2d11d278279a
ui: defer setting pager related properties until the pager has spawned
Matt Harbison <matt_harbison@yahoo.com>
parents:
31688
diff
changeset
|
1469 |
2d11d278279a
ui: defer setting pager related properties until the pager has spawned
Matt Harbison <matt_harbison@yahoo.com>
parents:
31688
diff
changeset
|
1470 wasformatted = self.formatted() |
50928
d718eddf01d9
safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50898
diff
changeset
|
1471 if hasattr(signal, "SIGPIPE"): |
30992
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1472 signal.signal(signal.SIGPIPE, _catchterm) |
31954
e518192d6bac
pager: set some environment variables if they're not set
Jun Wu <quark@fb.com>
parents:
31778
diff
changeset
|
1473 if self._runpager(pagercmd, pagerenv): |
31690
2d11d278279a
ui: defer setting pager related properties until the pager has spawned
Matt Harbison <matt_harbison@yahoo.com>
parents:
31688
diff
changeset
|
1474 self.pageractive = True |
2d11d278279a
ui: defer setting pager related properties until the pager has spawned
Matt Harbison <matt_harbison@yahoo.com>
parents:
31688
diff
changeset
|
1475 # Preserve the formatted-ness of the UI. This is important |
2d11d278279a
ui: defer setting pager related properties until the pager has spawned
Matt Harbison <matt_harbison@yahoo.com>
parents:
31688
diff
changeset
|
1476 # because we mess with stdout, which might confuse |
2d11d278279a
ui: defer setting pager related properties until the pager has spawned
Matt Harbison <matt_harbison@yahoo.com>
parents:
31688
diff
changeset
|
1477 # auto-detection of things being formatted. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1478 self.setconfig(b'ui', b'formatted', wasformatted, b'pager') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1479 self.setconfig(b'ui', b'interactive', False, b'pager') |
31691
c3ca0ad8ab9c
ui: rerun color.setup() once the pager has spawned to honor 'color.pagermode'
Matt Harbison <matt_harbison@yahoo.com>
parents:
31690
diff
changeset
|
1480 |
c3ca0ad8ab9c
ui: rerun color.setup() once the pager has spawned to honor 'color.pagermode'
Matt Harbison <matt_harbison@yahoo.com>
parents:
31690
diff
changeset
|
1481 # If pagermode differs from color.mode, reconfigure color now that |
c3ca0ad8ab9c
ui: rerun color.setup() once the pager has spawned to honor 'color.pagermode'
Matt Harbison <matt_harbison@yahoo.com>
parents:
31690
diff
changeset
|
1482 # pageractive is set. |
c3ca0ad8ab9c
ui: rerun color.setup() once the pager has spawned to honor 'color.pagermode'
Matt Harbison <matt_harbison@yahoo.com>
parents:
31690
diff
changeset
|
1483 cm = self._colormode |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1484 if cm != self.config(b'color', b'pagermode', cm): |
31691
c3ca0ad8ab9c
ui: rerun color.setup() once the pager has spawned to honor 'color.pagermode'
Matt Harbison <matt_harbison@yahoo.com>
parents:
31690
diff
changeset
|
1485 color.setup(self) |
31690
2d11d278279a
ui: defer setting pager related properties until the pager has spawned
Matt Harbison <matt_harbison@yahoo.com>
parents:
31688
diff
changeset
|
1486 else: |
2d11d278279a
ui: defer setting pager related properties until the pager has spawned
Matt Harbison <matt_harbison@yahoo.com>
parents:
31688
diff
changeset
|
1487 # If the pager can't be spawned in dispatch when --pager=on is |
2d11d278279a
ui: defer setting pager related properties until the pager has spawned
Matt Harbison <matt_harbison@yahoo.com>
parents:
31688
diff
changeset
|
1488 # given, don't try again when the command runs, to avoid a duplicate |
2d11d278279a
ui: defer setting pager related properties until the pager has spawned
Matt Harbison <matt_harbison@yahoo.com>
parents:
31688
diff
changeset
|
1489 # warning about a missing pager command. |
2d11d278279a
ui: defer setting pager related properties until the pager has spawned
Matt Harbison <matt_harbison@yahoo.com>
parents:
31688
diff
changeset
|
1490 self.disablepager() |
30992
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1491 |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
1492 def _runpager(self, command: bytes, env=None) -> bool: |
30992
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1493 """Actually start the pager and set up file descriptors. |
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1494 |
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1495 This is separate in part so that extensions (like chg) can |
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1496 override how a pager is invoked. |
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1497 """ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1498 if command == b'cat': |
31479
96929bd6e58d
pager: skip running the pager if it's set to 'cat'
Augie Fackler <augie@google.com>
parents:
31478
diff
changeset
|
1499 # Save ourselves some work. |
31690
2d11d278279a
ui: defer setting pager related properties until the pager has spawned
Matt Harbison <matt_harbison@yahoo.com>
parents:
31688
diff
changeset
|
1500 return False |
31478
9335dc6b2a9c
pager: avoid shell=True on subprocess.Popen for better errors (issue5491)
Augie Fackler <augie@google.com>
parents:
31472
diff
changeset
|
1501 # If the command doesn't contain any of these characters, we |
9335dc6b2a9c
pager: avoid shell=True on subprocess.Popen for better errors (issue5491)
Augie Fackler <augie@google.com>
parents:
31472
diff
changeset
|
1502 # assume it's a binary and exec it directly. This means for |
9335dc6b2a9c
pager: avoid shell=True on subprocess.Popen for better errors (issue5491)
Augie Fackler <augie@google.com>
parents:
31472
diff
changeset
|
1503 # simple pager command configurations, we can degrade |
9335dc6b2a9c
pager: avoid shell=True on subprocess.Popen for better errors (issue5491)
Augie Fackler <augie@google.com>
parents:
31472
diff
changeset
|
1504 # gracefully and tell the user about their broken pager. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1505 shell = any(c in command for c in b"|&;<>()$`\\\"' \t\n*?[#~=%") |
31624
c60091fa1426
pager: improve support for various flavors of `more` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
31592
diff
changeset
|
1506 |
34645 | 1507 if pycompat.iswindows and not shell: |
31624
c60091fa1426
pager: improve support for various flavors of `more` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
31592
diff
changeset
|
1508 # Window's built-in `more` cannot be invoked with shell=False, but |
c60091fa1426
pager: improve support for various flavors of `more` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
31592
diff
changeset
|
1509 # its `more.com` can. Hide this implementation detail from the |
c60091fa1426
pager: improve support for various flavors of `more` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
31592
diff
changeset
|
1510 # user so we can also get sane bad PAGER behavior. MSYS has |
c60091fa1426
pager: improve support for various flavors of `more` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
31592
diff
changeset
|
1511 # `more.exe`, so do a cmd.exe style resolution of the executable to |
c60091fa1426
pager: improve support for various flavors of `more` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
31592
diff
changeset
|
1512 # determine which one to use. |
37120
a8a902d7176e
procutil: bulk-replace function calls to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
37119
diff
changeset
|
1513 fullcmd = procutil.findexe(command) |
31624
c60091fa1426
pager: improve support for various flavors of `more` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
31592
diff
changeset
|
1514 if not fullcmd: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1515 self.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1516 _(b"missing pager command '%s', skipping pager\n") % command |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1517 ) |
31690
2d11d278279a
ui: defer setting pager related properties until the pager has spawned
Matt Harbison <matt_harbison@yahoo.com>
parents:
31688
diff
changeset
|
1518 return False |
31624
c60091fa1426
pager: improve support for various flavors of `more` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
31592
diff
changeset
|
1519 |
c60091fa1426
pager: improve support for various flavors of `more` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
31592
diff
changeset
|
1520 command = fullcmd |
c60091fa1426
pager: improve support for various flavors of `more` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
31592
diff
changeset
|
1521 |
31478
9335dc6b2a9c
pager: avoid shell=True on subprocess.Popen for better errors (issue5491)
Augie Fackler <augie@google.com>
parents:
31472
diff
changeset
|
1522 try: |
9335dc6b2a9c
pager: avoid shell=True on subprocess.Popen for better errors (issue5491)
Augie Fackler <augie@google.com>
parents:
31472
diff
changeset
|
1523 pager = subprocess.Popen( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1524 procutil.tonativestr(command), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1525 shell=shell, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1526 bufsize=-1, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1527 close_fds=procutil.closefds, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1528 stdin=subprocess.PIPE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1529 stdout=procutil.stdout, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1530 stderr=procutil.stderr, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1531 env=procutil.tonativeenv(procutil.shellenviron(env)), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1532 ) |
49306
2e726c934fcd
py3: catch FileNotFoundError instead of checking errno == ENOENT
Manuel Jacob <me@manueljacob.de>
parents:
49075
diff
changeset
|
1533 except FileNotFoundError: |
2e726c934fcd
py3: catch FileNotFoundError instead of checking errno == ENOENT
Manuel Jacob <me@manueljacob.de>
parents:
49075
diff
changeset
|
1534 if not shell: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1535 self.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1536 _(b"missing pager command '%s', skipping pager\n") % command |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1537 ) |
31690
2d11d278279a
ui: defer setting pager related properties until the pager has spawned
Matt Harbison <matt_harbison@yahoo.com>
parents:
31688
diff
changeset
|
1538 return False |
31478
9335dc6b2a9c
pager: avoid shell=True on subprocess.Popen for better errors (issue5491)
Augie Fackler <augie@google.com>
parents:
31472
diff
changeset
|
1539 raise |
30992
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1540 |
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1541 # back up original file descriptors |
50998
ce9cb12ca8c9
openvms: fix the pager spawning and cleanup
Jean-Francois Pieronne <jf.pieronne@laposte.net>
parents:
50929
diff
changeset
|
1542 if pycompat.sysplatform != b'OpenVMS': |
ce9cb12ca8c9
openvms: fix the pager spawning and cleanup
Jean-Francois Pieronne <jf.pieronne@laposte.net>
parents:
50929
diff
changeset
|
1543 stdoutfd = os.dup(procutil.stdout.fileno()) |
ce9cb12ca8c9
openvms: fix the pager spawning and cleanup
Jean-Francois Pieronne <jf.pieronne@laposte.net>
parents:
50929
diff
changeset
|
1544 stderrfd = os.dup(procutil.stderr.fileno()) |
30992
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1545 |
37119
d4a2e0d5d042
procutil: bulk-replace util.std* to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
37084
diff
changeset
|
1546 os.dup2(pager.stdin.fileno(), procutil.stdout.fileno()) |
d4a2e0d5d042
procutil: bulk-replace util.std* to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
37084
diff
changeset
|
1547 if self._isatty(procutil.stderr): |
d4a2e0d5d042
procutil: bulk-replace util.std* to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
37084
diff
changeset
|
1548 os.dup2(pager.stdin.fileno(), procutil.stderr.fileno()) |
30992
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1549 |
31958
de5c9d0e02ea
atexit: switch to home-grown implementation
Bryan O'Sullivan <bryano@fb.com>
parents:
31956
diff
changeset
|
1550 @self.atexit |
30992
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1551 def killpager(): |
50928
d718eddf01d9
safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50898
diff
changeset
|
1552 if hasattr(signal, "SIGINT"): |
30992
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1553 signal.signal(signal.SIGINT, signal.SIG_IGN) |
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1554 # restore original fds, closing pager.stdin copies in the process |
50998
ce9cb12ca8c9
openvms: fix the pager spawning and cleanup
Jean-Francois Pieronne <jf.pieronne@laposte.net>
parents:
50929
diff
changeset
|
1555 if pycompat.sysplatform == b'OpenVMS': |
ce9cb12ca8c9
openvms: fix the pager spawning and cleanup
Jean-Francois Pieronne <jf.pieronne@laposte.net>
parents:
50929
diff
changeset
|
1556 pager.kill() |
37119
d4a2e0d5d042
procutil: bulk-replace util.std* to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
37084
diff
changeset
|
1557 os.dup2(stdoutfd, procutil.stdout.fileno()) |
d4a2e0d5d042
procutil: bulk-replace util.std* to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
37084
diff
changeset
|
1558 os.dup2(stderrfd, procutil.stderr.fileno()) |
30992
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1559 pager.stdin.close() |
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1560 pager.wait() |
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1561 |
31690
2d11d278279a
ui: defer setting pager related properties until the pager has spawned
Matt Harbison <matt_harbison@yahoo.com>
parents:
31688
diff
changeset
|
1562 return True |
2d11d278279a
ui: defer setting pager related properties until the pager has spawned
Matt Harbison <matt_harbison@yahoo.com>
parents:
31688
diff
changeset
|
1563 |
34882
e9f320a40b44
ui: move request exit handlers to global state
Saurabh Singh <singhsrb@fb.com>
parents:
34858
diff
changeset
|
1564 @property |
e9f320a40b44
ui: move request exit handlers to global state
Saurabh Singh <singhsrb@fb.com>
parents:
34858
diff
changeset
|
1565 def _exithandlers(self): |
e9f320a40b44
ui: move request exit handlers to global state
Saurabh Singh <singhsrb@fb.com>
parents:
34858
diff
changeset
|
1566 return _reqexithandlers |
e9f320a40b44
ui: move request exit handlers to global state
Saurabh Singh <singhsrb@fb.com>
parents:
34858
diff
changeset
|
1567 |
31956
c13ff31818b0
ui: add special-purpose atexit functionality
Bryan O'Sullivan <bryano@fb.com>
parents:
31954
diff
changeset
|
1568 def atexit(self, func, *args, **kwargs): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1569 """register a function to run after dispatching a request |
31956
c13ff31818b0
ui: add special-purpose atexit functionality
Bryan O'Sullivan <bryano@fb.com>
parents:
31954
diff
changeset
|
1570 |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1571 Handlers do not stay registered across request boundaries.""" |
31956
c13ff31818b0
ui: add special-purpose atexit functionality
Bryan O'Sullivan <bryano@fb.com>
parents:
31954
diff
changeset
|
1572 self._exithandlers.append((func, args, kwargs)) |
c13ff31818b0
ui: add special-purpose atexit functionality
Bryan O'Sullivan <bryano@fb.com>
parents:
31954
diff
changeset
|
1573 return func |
c13ff31818b0
ui: add special-purpose atexit functionality
Bryan O'Sullivan <bryano@fb.com>
parents:
31954
diff
changeset
|
1574 |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
1575 def interface(self, feature: bytes) -> bytes: |
28542
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1576 """what interface to use for interactive console features? |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1577 |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1578 The interface is controlled by the value of `ui.interface` but also by |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1579 the value of feature-specific configuration. For example: |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1580 |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1581 ui.interface.histedit = text |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1582 ui.interface.chunkselector = curses |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1583 |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1584 Here the features are "histedit" and "chunkselector". |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1585 |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1586 The configuration above means that the default interfaces for commands |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1587 is curses, the interface for histedit is text and the interface for |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1588 selecting chunk is crecord (the best curses interface available). |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1589 |
30332
318a24b52eeb
spelling: fixes of non-dictionary words
Mads Kiilerich <madski@unity3d.com>
parents:
30314
diff
changeset
|
1590 Consider the following example: |
28542
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1591 ui.interface = curses |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1592 ui.interface.histedit = text |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1593 |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1594 Then histedit will use the text interface and chunkselector will use |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1595 the default curses interface (crecord at the moment). |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1596 """ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1597 alldefaults = frozenset([b"text", b"curses"]) |
28542
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1598 |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1599 featureinterfaces = { |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1600 b"chunkselector": [ |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1601 b"text", |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1602 b"curses", |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1603 ], |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1604 b"histedit": [ |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1605 b"text", |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1606 b"curses", |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1607 ], |
28542
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1608 } |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1609 |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1610 # Feature-specific interface |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1611 if feature not in featureinterfaces.keys(): |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1612 # Programming error, not user error |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1613 raise ValueError(b"Unknown feature requested %s" % feature) |
28542
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1614 |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1615 availableinterfaces = frozenset(featureinterfaces[feature]) |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1616 if alldefaults > availableinterfaces: |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1617 # Programming error, not user error. We need a use case to |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1618 # define the right thing to do here. |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1619 raise ValueError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1620 b"Feature %s does not handle all default interfaces" % feature |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1621 ) |
28542
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1622 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1623 if self.plain() or encoding.environ.get(b'TERM') == b'dumb': |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1624 return b"text" |
28542
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1625 |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1626 # Default interface for all the features |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1627 defaultinterface = b"text" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1628 i = self.config(b"ui", b"interface") |
28542
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1629 if i in alldefaults: |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
1630 defaultinterface = cast(bytes, i) # cast to help pytype |
28542
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1631 |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
1632 choseninterface: bytes = defaultinterface |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1633 f = self.config(b"ui", b"interface.%s" % feature) |
28542
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1634 if f in availableinterfaces: |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
1635 choseninterface = cast(bytes, f) # cast to help pytype |
28542
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1636 |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1637 if i is not None and defaultinterface != i: |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1638 if f is not None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1639 self.warn(_(b"invalid value for ui.interface: %s\n") % (i,)) |
28542
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1640 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1641 self.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1642 _(b"invalid value for ui.interface: %s (using %s)\n") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1643 % (i, choseninterface) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1644 ) |
28542
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1645 if f is not None and choseninterface != f: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1646 self.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1647 _(b"invalid value for ui.interface.%s: %s (using %s)\n") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1648 % (feature, f, choseninterface) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1649 ) |
28542
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1650 |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1651 return choseninterface |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1652 |
8208
32a2a1e244f1
ui: make interactive a method
Matt Mackall <mpm@selenic.com>
parents:
8206
diff
changeset
|
1653 def interactive(self): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1654 """is interactive input allowed? |
11325
22a737306ba5
ui: document the formatted(), interactive() & plain() functions.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11324
diff
changeset
|
1655 |
22a737306ba5
ui: document the formatted(), interactive() & plain() functions.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11324
diff
changeset
|
1656 An interactive session is a session where input can be reasonably read |
22a737306ba5
ui: document the formatted(), interactive() & plain() functions.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11324
diff
changeset
|
1657 from `sys.stdin'. If this function returns false, any attempt to read |
22a737306ba5
ui: document the formatted(), interactive() & plain() functions.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11324
diff
changeset
|
1658 from stdin should fail with an error, unless a sensible default has been |
22a737306ba5
ui: document the formatted(), interactive() & plain() functions.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11324
diff
changeset
|
1659 specified. |
22a737306ba5
ui: document the formatted(), interactive() & plain() functions.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11324
diff
changeset
|
1660 |
22a737306ba5
ui: document the formatted(), interactive() & plain() functions.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11324
diff
changeset
|
1661 Interactiveness is triggered by the value of the `ui.interactive' |
22a737306ba5
ui: document the formatted(), interactive() & plain() functions.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11324
diff
changeset
|
1662 configuration variable or - if it is unset - when `sys.stdin' points |
22a737306ba5
ui: document the formatted(), interactive() & plain() functions.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11324
diff
changeset
|
1663 to a terminal device. |
22a737306ba5
ui: document the formatted(), interactive() & plain() functions.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11324
diff
changeset
|
1664 |
22a737306ba5
ui: document the formatted(), interactive() & plain() functions.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11324
diff
changeset
|
1665 This function refers to input only; for output, see `ui.formatted()'. |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1666 """ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1667 i = self.configbool(b"ui", b"interactive") |
8538
6419bc7b3d9c
ui: honor interactive=off even if isatty()
Patrick Mezard <pmezard@gmail.com>
parents:
8527
diff
changeset
|
1668 if i is None: |
14515
76f295eaed86
util: add helper function isatty(fd) to check for tty-ness
Idan Kamara <idankk86@gmail.com>
parents:
14373
diff
changeset
|
1669 # some environments replace stdin without implementing isatty |
76f295eaed86
util: add helper function isatty(fd) to check for tty-ness
Idan Kamara <idankk86@gmail.com>
parents:
14373
diff
changeset
|
1670 # usually those are non-interactive |
40543
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1671 return self._isatty(self._fin) |
10077
89617aacb495
make ui.interactive() return false in case stdin lacks isatty
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
9887
diff
changeset
|
1672 |
8538
6419bc7b3d9c
ui: honor interactive=off even if isatty()
Patrick Mezard <pmezard@gmail.com>
parents:
8527
diff
changeset
|
1673 return i |
8208
32a2a1e244f1
ui: make interactive a method
Matt Mackall <mpm@selenic.com>
parents:
8206
diff
changeset
|
1674 |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
1675 def termwidth(self) -> int: |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1676 """how wide is the terminal in columns?""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1677 if b'COLUMNS' in encoding.environ: |
12689
c52c629ce19e
termwidth: move to ui.ui from util
Augie Fackler <durin42@gmail.com>
parents:
12665
diff
changeset
|
1678 try: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1679 return int(encoding.environ[b'COLUMNS']) |
12689
c52c629ce19e
termwidth: move to ui.ui from util
Augie Fackler <durin42@gmail.com>
parents:
12665
diff
changeset
|
1680 except ValueError: |
c52c629ce19e
termwidth: move to ui.ui from util
Augie Fackler <durin42@gmail.com>
parents:
12665
diff
changeset
|
1681 pass |
30314
365812902904
scmutil: extend termwidth() to return terminal height, renamed to termsize()
Yuya Nishihara <yuya@tcha.org>
parents:
30310
diff
changeset
|
1682 return scmutil.termsize(self)[0] |
12689
c52c629ce19e
termwidth: move to ui.ui from util
Augie Fackler <durin42@gmail.com>
parents:
12665
diff
changeset
|
1683 |
11324
cdf6d861b207
ui: add ui.formatted configuration variable and accessor function.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11311
diff
changeset
|
1684 def formatted(self): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1685 """should formatted output be used? |
11325
22a737306ba5
ui: document the formatted(), interactive() & plain() functions.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11324
diff
changeset
|
1686 |
22a737306ba5
ui: document the formatted(), interactive() & plain() functions.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11324
diff
changeset
|
1687 It is often desirable to format the output to suite the output medium. |
22a737306ba5
ui: document the formatted(), interactive() & plain() functions.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11324
diff
changeset
|
1688 Examples of this are truncating long lines or colorizing messages. |
22a737306ba5
ui: document the formatted(), interactive() & plain() functions.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11324
diff
changeset
|
1689 However, this is not often not desirable when piping output into other |
22a737306ba5
ui: document the formatted(), interactive() & plain() functions.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11324
diff
changeset
|
1690 utilities, e.g. `grep'. |
22a737306ba5
ui: document the formatted(), interactive() & plain() functions.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11324
diff
changeset
|
1691 |
22a737306ba5
ui: document the formatted(), interactive() & plain() functions.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11324
diff
changeset
|
1692 Formatted output is triggered by the value of the `ui.formatted' |
22a737306ba5
ui: document the formatted(), interactive() & plain() functions.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11324
diff
changeset
|
1693 configuration variable or - if it is unset - when `sys.stdout' points |
22a737306ba5
ui: document the formatted(), interactive() & plain() functions.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11324
diff
changeset
|
1694 to a terminal device. Please note that `ui.formatted' should be |
22a737306ba5
ui: document the formatted(), interactive() & plain() functions.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11324
diff
changeset
|
1695 considered an implementation detail; it is not intended for use outside |
22a737306ba5
ui: document the formatted(), interactive() & plain() functions.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11324
diff
changeset
|
1696 Mercurial or its extensions. |
22a737306ba5
ui: document the formatted(), interactive() & plain() functions.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11324
diff
changeset
|
1697 |
22a737306ba5
ui: document the formatted(), interactive() & plain() functions.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11324
diff
changeset
|
1698 This function refers to output only; for input, see `ui.interactive()'. |
22a737306ba5
ui: document the formatted(), interactive() & plain() functions.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11324
diff
changeset
|
1699 This function always returns false when in plain mode, see `ui.plain()'. |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1700 """ |
11324
cdf6d861b207
ui: add ui.formatted configuration variable and accessor function.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11311
diff
changeset
|
1701 if self.plain(): |
cdf6d861b207
ui: add ui.formatted configuration variable and accessor function.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11311
diff
changeset
|
1702 return False |
cdf6d861b207
ui: add ui.formatted configuration variable and accessor function.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11311
diff
changeset
|
1703 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1704 i = self.configbool(b"ui", b"formatted") |
11324
cdf6d861b207
ui: add ui.formatted configuration variable and accessor function.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11311
diff
changeset
|
1705 if i is None: |
14515
76f295eaed86
util: add helper function isatty(fd) to check for tty-ness
Idan Kamara <idankk86@gmail.com>
parents:
14373
diff
changeset
|
1706 # some environments replace stdout without implementing isatty |
76f295eaed86
util: add helper function isatty(fd) to check for tty-ness
Idan Kamara <idankk86@gmail.com>
parents:
14373
diff
changeset
|
1707 # usually those are non-interactive |
40543
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1708 return self._isatty(self._fout) |
11324
cdf6d861b207
ui: add ui.formatted configuration variable and accessor function.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11311
diff
changeset
|
1709 |
cdf6d861b207
ui: add ui.formatted configuration variable and accessor function.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11311
diff
changeset
|
1710 return i |
cdf6d861b207
ui: add ui.formatted configuration variable and accessor function.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11311
diff
changeset
|
1711 |
49795
f1e820cda2f5
typing: add type hints related to message output in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49794
diff
changeset
|
1712 def _readline( |
f1e820cda2f5
typing: add type hints related to message output in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49794
diff
changeset
|
1713 self, |
f1e820cda2f5
typing: add type hints related to message output in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49794
diff
changeset
|
1714 prompt: bytes = b' ', |
f1e820cda2f5
typing: add type hints related to message output in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49794
diff
changeset
|
1715 promptopts: Optional[Dict[str, _MsgOpts]] = None, |
f1e820cda2f5
typing: add type hints related to message output in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49794
diff
changeset
|
1716 ) -> bytes: |
36795
9b513888ea23
ui: do not use rawinput() when we have to replace sys.stdin/stdout
Yuya Nishihara <yuya@tcha.org>
parents:
36794
diff
changeset
|
1717 # Replacing stdin/stdout temporarily is a hard problem on Python 3 |
9b513888ea23
ui: do not use rawinput() when we have to replace sys.stdin/stdout
Yuya Nishihara <yuya@tcha.org>
parents:
36794
diff
changeset
|
1718 # because they have to be text streams with *no buffering*. Instead, |
9b513888ea23
ui: do not use rawinput() when we have to replace sys.stdin/stdout
Yuya Nishihara <yuya@tcha.org>
parents:
36794
diff
changeset
|
1719 # we use rawinput() only if call_readline() will be invoked by |
9b513888ea23
ui: do not use rawinput() when we have to replace sys.stdin/stdout
Yuya Nishihara <yuya@tcha.org>
parents:
36794
diff
changeset
|
1720 # PyOS_Readline(), so no I/O will be made at Python layer. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1721 usereadline = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1722 self._isatty(self._fin) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1723 and self._isatty(self._fout) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1724 and procutil.isstdin(self._fin) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1725 and procutil.isstdout(self._fout) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1726 ) |
36794
fa53a1d1f16e
ui: do not try readline support if fin/fout aren't standard streams
Yuya Nishihara <yuya@tcha.org>
parents:
36791
diff
changeset
|
1727 if usereadline: |
5036
ca0d02222d6a
ui: get readline and prompt to behave better depending on interactivity
Bryan O'Sullivan <bos@serpentine.com>
parents:
4729
diff
changeset
|
1728 try: |
ca0d02222d6a
ui: get readline and prompt to behave better depending on interactivity
Bryan O'Sullivan <bos@serpentine.com>
parents:
4729
diff
changeset
|
1729 # magically add command line editing support, where |
ca0d02222d6a
ui: get readline and prompt to behave better depending on interactivity
Bryan O'Sullivan <bos@serpentine.com>
parents:
4729
diff
changeset
|
1730 # available |
ca0d02222d6a
ui: get readline and prompt to behave better depending on interactivity
Bryan O'Sullivan <bos@serpentine.com>
parents:
4729
diff
changeset
|
1731 import readline |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1732 |
5036
ca0d02222d6a
ui: get readline and prompt to behave better depending on interactivity
Bryan O'Sullivan <bos@serpentine.com>
parents:
4729
diff
changeset
|
1733 # force demandimport to really load the module |
ca0d02222d6a
ui: get readline and prompt to behave better depending on interactivity
Bryan O'Sullivan <bos@serpentine.com>
parents:
4729
diff
changeset
|
1734 readline.read_history_file |
7496
0a27d0db256d
issue1419: catch strange readline import error on windows
Brendan Cully <brendan@kublai.com>
parents:
7320
diff
changeset
|
1735 # windows sometimes raises something other than ImportError |
0a27d0db256d
issue1419: catch strange readline import error on windows
Brendan Cully <brendan@kublai.com>
parents:
7320
diff
changeset
|
1736 except Exception: |
36794
fa53a1d1f16e
ui: do not try readline support if fin/fout aren't standard streams
Yuya Nishihara <yuya@tcha.org>
parents:
36791
diff
changeset
|
1737 usereadline = False |
14614
afccc64eea73
ui: use I/O descriptors internally
Idan Kamara <idankk86@gmail.com>
parents:
14612
diff
changeset
|
1738 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1739 if self._colormode == b'win32' or not usereadline: |
42119
2d428b859282
readline: provide styled prompt to readline (issue6070)
Kyle Lippincott <spectral@google.com>
parents:
41999
diff
changeset
|
1740 if not promptopts: |
2d428b859282
readline: provide styled prompt to readline (issue6070)
Kyle Lippincott <spectral@google.com>
parents:
41999
diff
changeset
|
1741 promptopts = {} |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1742 self._writemsgnobuf( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1743 self._fmsgout, prompt, type=b'prompt', **promptopts |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1744 ) |
42119
2d428b859282
readline: provide styled prompt to readline (issue6070)
Kyle Lippincott <spectral@google.com>
parents:
41999
diff
changeset
|
1745 self.flush() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1746 prompt = b' ' |
42119
2d428b859282
readline: provide styled prompt to readline (issue6070)
Kyle Lippincott <spectral@google.com>
parents:
41999
diff
changeset
|
1747 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1748 prompt = self.label(prompt, b'ui.prompt') + b' ' |
42119
2d428b859282
readline: provide styled prompt to readline (issue6070)
Kyle Lippincott <spectral@google.com>
parents:
41999
diff
changeset
|
1749 |
22291
3b39e1522d8f
ui: add brief comment why raw_input() needs dummy ' ' prompt string
Yuya Nishihara <yuya@tcha.org>
parents:
22205
diff
changeset
|
1750 # prompt ' ' must exist; otherwise readline may delete entire line |
3b39e1522d8f
ui: add brief comment why raw_input() needs dummy ' ' prompt string
Yuya Nishihara <yuya@tcha.org>
parents:
22205
diff
changeset
|
1751 # - http://bugs.python.org/issue12833 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1752 with self.timeblockedsection(b'stdio'): |
36795
9b513888ea23
ui: do not use rawinput() when we have to replace sys.stdin/stdout
Yuya Nishihara <yuya@tcha.org>
parents:
36794
diff
changeset
|
1753 if usereadline: |
43377
aaa046919043
ui: flush before prompting for input with readline
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43265
diff
changeset
|
1754 self.flush() |
43118
57efd5bd2ca2
py3: decode prompt string before calling rawinput
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43106
diff
changeset
|
1755 prompt = encoding.strfromlocal(prompt) |
48933
78f1de3f4be7
ui: use input() directly
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
1756 line = encoding.strtolocal(input(prompt)) |
36796
aa0fc12743c7
ui: adjust Windows workaround to new _readline() code
Yuya Nishihara <yuya@tcha.org>
parents:
36795
diff
changeset
|
1757 # When stdin is in binary mode on Windows, it can cause |
48933
78f1de3f4be7
ui: use input() directly
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
1758 # input() to emit an extra trailing carriage return |
36796
aa0fc12743c7
ui: adjust Windows workaround to new _readline() code
Yuya Nishihara <yuya@tcha.org>
parents:
36795
diff
changeset
|
1759 if pycompat.oslinesep == b'\r\n' and line.endswith(b'\r'): |
aa0fc12743c7
ui: adjust Windows workaround to new _readline() code
Yuya Nishihara <yuya@tcha.org>
parents:
36795
diff
changeset
|
1760 line = line[:-1] |
36795
9b513888ea23
ui: do not use rawinput() when we have to replace sys.stdin/stdout
Yuya Nishihara <yuya@tcha.org>
parents:
36794
diff
changeset
|
1761 else: |
42119
2d428b859282
readline: provide styled prompt to readline (issue6070)
Kyle Lippincott <spectral@google.com>
parents:
41999
diff
changeset
|
1762 self._fout.write(pycompat.bytestr(prompt)) |
40543
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1763 self._fout.flush() |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1764 line = self._fin.readline() |
36795
9b513888ea23
ui: do not use rawinput() when we have to replace sys.stdin/stdout
Yuya Nishihara <yuya@tcha.org>
parents:
36794
diff
changeset
|
1765 if not line: |
9b513888ea23
ui: do not use rawinput() when we have to replace sys.stdin/stdout
Yuya Nishihara <yuya@tcha.org>
parents:
36794
diff
changeset
|
1766 raise EOFError |
36834
1527f40de3b3
ui: remove any combinations of CR|LF from prompt response
Yuya Nishihara <yuya@tcha.org>
parents:
36796
diff
changeset
|
1767 line = line.rstrip(pycompat.oslinesep) |
14614
afccc64eea73
ui: use I/O descriptors internally
Idan Kamara <idankk86@gmail.com>
parents:
14612
diff
changeset
|
1768 |
5613
2e76e5a23c2b
workaround for raw_input() on Windows
Steve Borho <steve@borho.org>
parents:
5337
diff
changeset
|
1769 return line |
5036
ca0d02222d6a
ui: get readline and prompt to behave better depending on interactivity
Bryan O'Sullivan <bos@serpentine.com>
parents:
4729
diff
changeset
|
1770 |
51285
9d3721552b6c
pytype: import typing directly
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50998
diff
changeset
|
1771 if typing.TYPE_CHECKING: |
49799
de284a0b5614
typing: add type hints to the prompt methods in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49798
diff
changeset
|
1772 |
de284a0b5614
typing: add type hints to the prompt methods in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49798
diff
changeset
|
1773 @overload |
de284a0b5614
typing: add type hints to the prompt methods in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49798
diff
changeset
|
1774 def prompt(self, msg: bytes, default: bytes) -> bytes: |
de284a0b5614
typing: add type hints to the prompt methods in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49798
diff
changeset
|
1775 pass |
de284a0b5614
typing: add type hints to the prompt methods in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49798
diff
changeset
|
1776 |
de284a0b5614
typing: add type hints to the prompt methods in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49798
diff
changeset
|
1777 @overload |
de284a0b5614
typing: add type hints to the prompt methods in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49798
diff
changeset
|
1778 def prompt(self, msg: bytes, default: None) -> Optional[bytes]: |
de284a0b5614
typing: add type hints to the prompt methods in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49798
diff
changeset
|
1779 pass |
de284a0b5614
typing: add type hints to the prompt methods in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49798
diff
changeset
|
1780 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1781 def prompt(self, msg, default=b"y"): |
9048
86b4a9b0ddda
ui: extract choice from prompt
Simon Heimberg <simohe@besonet.ch>
parents:
8940
diff
changeset
|
1782 """Prompt user with msg, read response. |
86b4a9b0ddda
ui: extract choice from prompt
Simon Heimberg <simohe@besonet.ch>
parents:
8940
diff
changeset
|
1783 If ui is not interactive, the default is returned. |
5751 | 1784 """ |
40592
83e571ea06a9
commandserver: attach prompt default and choices to message
Yuya Nishihara <yuya@tcha.org>
parents:
40590
diff
changeset
|
1785 return self._prompt(msg, default=default) |
83e571ea06a9
commandserver: attach prompt default and choices to message
Yuya Nishihara <yuya@tcha.org>
parents:
40590
diff
changeset
|
1786 |
51285
9d3721552b6c
pytype: import typing directly
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50998
diff
changeset
|
1787 if typing.TYPE_CHECKING: |
49799
de284a0b5614
typing: add type hints to the prompt methods in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49798
diff
changeset
|
1788 |
de284a0b5614
typing: add type hints to the prompt methods in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49798
diff
changeset
|
1789 @overload |
de284a0b5614
typing: add type hints to the prompt methods in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49798
diff
changeset
|
1790 def _prompt( |
de284a0b5614
typing: add type hints to the prompt methods in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49798
diff
changeset
|
1791 self, msg: bytes, default: bytes, **opts: _MsgOpts |
de284a0b5614
typing: add type hints to the prompt methods in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49798
diff
changeset
|
1792 ) -> bytes: |
de284a0b5614
typing: add type hints to the prompt methods in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49798
diff
changeset
|
1793 pass |
de284a0b5614
typing: add type hints to the prompt methods in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49798
diff
changeset
|
1794 |
de284a0b5614
typing: add type hints to the prompt methods in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49798
diff
changeset
|
1795 @overload |
de284a0b5614
typing: add type hints to the prompt methods in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49798
diff
changeset
|
1796 def _prompt( |
de284a0b5614
typing: add type hints to the prompt methods in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49798
diff
changeset
|
1797 self, msg: bytes, default: None, **opts: _MsgOpts |
de284a0b5614
typing: add type hints to the prompt methods in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49798
diff
changeset
|
1798 ) -> Optional[bytes]: |
de284a0b5614
typing: add type hints to the prompt methods in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49798
diff
changeset
|
1799 pass |
de284a0b5614
typing: add type hints to the prompt methods in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49798
diff
changeset
|
1800 |
49798
a51328ba33ca
ui: split the `default` arg out of **kwargs for the internal prompt method
Matt Harbison <matt_harbison@yahoo.com>
parents:
49797
diff
changeset
|
1801 def _prompt(self, msg, default=b'y', **opts): |
a51328ba33ca
ui: split the `default` arg out of **kwargs for the internal prompt method
Matt Harbison <matt_harbison@yahoo.com>
parents:
49797
diff
changeset
|
1802 opts = {**opts, 'default': default} |
8208
32a2a1e244f1
ui: make interactive a method
Matt Mackall <mpm@selenic.com>
parents:
8206
diff
changeset
|
1803 if not self.interactive(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1804 self._writemsg(self._fmsgout, msg, b' ', type=b'prompt', **opts) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1805 self._writemsg( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1806 self._fmsgout, default or b'', b"\n", type=b'promptecho' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1807 ) |
7320
8dca507e56ce
ui: log non-interactive default response to stdout when verbose
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
6862
diff
changeset
|
1808 return default |
9048
86b4a9b0ddda
ui: extract choice from prompt
Simon Heimberg <simohe@besonet.ch>
parents:
8940
diff
changeset
|
1809 try: |
42119
2d428b859282
readline: provide styled prompt to readline (issue6070)
Kyle Lippincott <spectral@google.com>
parents:
41999
diff
changeset
|
1810 r = self._readline(prompt=msg, promptopts=opts) |
9048
86b4a9b0ddda
ui: extract choice from prompt
Simon Heimberg <simohe@besonet.ch>
parents:
8940
diff
changeset
|
1811 if not r: |
22589
9ab18a912c44
ui: show prompt choice if input is not a tty but is forced to be interactive
Mads Kiilerich <madski@unity3d.com>
parents:
22419
diff
changeset
|
1812 r = default |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1813 if self.configbool(b'ui', b'promptecho'): |
45758
14ac6a74e7e7
ui: fix echo back of ui.prompt() to not concatenate None as bytes
Yuya Nishihara <yuya@tcha.org>
parents:
45061
diff
changeset
|
1814 self._writemsg( |
14ac6a74e7e7
ui: fix echo back of ui.prompt() to not concatenate None as bytes
Yuya Nishihara <yuya@tcha.org>
parents:
45061
diff
changeset
|
1815 self._fmsgout, r or b'', b"\n", type=b'promptecho' |
14ac6a74e7e7
ui: fix echo back of ui.prompt() to not concatenate None as bytes
Yuya Nishihara <yuya@tcha.org>
parents:
45061
diff
changeset
|
1816 ) |
9048
86b4a9b0ddda
ui: extract choice from prompt
Simon Heimberg <simohe@besonet.ch>
parents:
8940
diff
changeset
|
1817 return r |
86b4a9b0ddda
ui: extract choice from prompt
Simon Heimberg <simohe@besonet.ch>
parents:
8940
diff
changeset
|
1818 except EOFError: |
26896
5e46123e6c35
error: add structured exception for EOF at prompt
Siddharth Agarwal <sid0@fb.com>
parents:
26820
diff
changeset
|
1819 raise error.ResponseExpected() |
9048
86b4a9b0ddda
ui: extract choice from prompt
Simon Heimberg <simohe@besonet.ch>
parents:
8940
diff
changeset
|
1820 |
20265
e5803150ea1d
ui: add "extractchoices()" to share the logic to extract choices from prompt
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19886
diff
changeset
|
1821 @staticmethod |
49795
f1e820cda2f5
typing: add type hints related to message output in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49794
diff
changeset
|
1822 def extractchoices(prompt: bytes) -> Tuple[bytes, List[_PromptChoice]]: |
20265
e5803150ea1d
ui: add "extractchoices()" to share the logic to extract choices from prompt
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19886
diff
changeset
|
1823 """Extract prompt message and list of choices from specified prompt. |
e5803150ea1d
ui: add "extractchoices()" to share the logic to extract choices from prompt
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19886
diff
changeset
|
1824 |
e5803150ea1d
ui: add "extractchoices()" to share the logic to extract choices from prompt
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19886
diff
changeset
|
1825 This returns tuple "(message, choices)", and "choices" is the |
e5803150ea1d
ui: add "extractchoices()" to share the logic to extract choices from prompt
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19886
diff
changeset
|
1826 list of tuple "(response character, text without &)". |
27392
00aa37c65e0a
ui: try to handle $$ more robustly in prompts (issue4970)
Matt Mackall <mpm@selenic.com>
parents:
26820
diff
changeset
|
1827 |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
1828 >>> ui.extractchoices(b"awake? $$ &Yes $$ &No") |
27392
00aa37c65e0a
ui: try to handle $$ more robustly in prompts (issue4970)
Matt Mackall <mpm@selenic.com>
parents:
26820
diff
changeset
|
1829 ('awake? ', [('y', 'Yes'), ('n', 'No')]) |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
1830 >>> ui.extractchoices(b"line\\nbreak? $$ &Yes $$ &No") |
27392
00aa37c65e0a
ui: try to handle $$ more robustly in prompts (issue4970)
Matt Mackall <mpm@selenic.com>
parents:
26820
diff
changeset
|
1831 ('line\\nbreak? ', [('y', 'Yes'), ('n', 'No')]) |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
1832 >>> ui.extractchoices(b"want lots of $$money$$?$$Ye&s$$N&o") |
27392
00aa37c65e0a
ui: try to handle $$ more robustly in prompts (issue4970)
Matt Mackall <mpm@selenic.com>
parents:
26820
diff
changeset
|
1833 ('want lots of $$money$$?', [('s', 'Yes'), ('o', 'No')]) |
20265
e5803150ea1d
ui: add "extractchoices()" to share the logic to extract choices from prompt
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19886
diff
changeset
|
1834 """ |
27392
00aa37c65e0a
ui: try to handle $$ more robustly in prompts (issue4970)
Matt Mackall <mpm@selenic.com>
parents:
26820
diff
changeset
|
1835 |
00aa37c65e0a
ui: try to handle $$ more robustly in prompts (issue4970)
Matt Mackall <mpm@selenic.com>
parents:
26820
diff
changeset
|
1836 # Sadly, the prompt string may have been built with a filename |
00aa37c65e0a
ui: try to handle $$ more robustly in prompts (issue4970)
Matt Mackall <mpm@selenic.com>
parents:
26820
diff
changeset
|
1837 # containing "$$" so let's try to find the first valid-looking |
00aa37c65e0a
ui: try to handle $$ more robustly in prompts (issue4970)
Matt Mackall <mpm@selenic.com>
parents:
26820
diff
changeset
|
1838 # prompt to start parsing. Sadly, we also can't rely on |
00aa37c65e0a
ui: try to handle $$ more robustly in prompts (issue4970)
Matt Mackall <mpm@selenic.com>
parents:
26820
diff
changeset
|
1839 # choices containing spaces, ASCII, or basically anything |
00aa37c65e0a
ui: try to handle $$ more robustly in prompts (issue4970)
Matt Mackall <mpm@selenic.com>
parents:
26820
diff
changeset
|
1840 # except an ampersand followed by a character. |
44021
6d3b67a837a6
cleanup: drop redundant character escapes from `[]` character sets
Matt Harbison <matt_harbison@yahoo.com>
parents:
43991
diff
changeset
|
1841 m = re.match(br'(?s)(.+?)\$\$([^$]*&[^ $].*)', prompt) |
49793
8147abc05794
pytype: stop excluding mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49306
diff
changeset
|
1842 |
8147abc05794
pytype: stop excluding mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49306
diff
changeset
|
1843 assert m is not None # help pytype |
8147abc05794
pytype: stop excluding mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49306
diff
changeset
|
1844 |
27392
00aa37c65e0a
ui: try to handle $$ more robustly in prompts (issue4970)
Matt Mackall <mpm@selenic.com>
parents:
26820
diff
changeset
|
1845 msg = m.group(1) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1846 choices = [p.strip(b' ') for p in m.group(2).split(b'$$')] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1847 |
33714
d880a6bcef2f
ui: refactor extractchoices so it doesn't break on Python 3
Augie Fackler <augie@google.com>
parents:
33687
diff
changeset
|
1848 def choicetuple(s): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1849 ampidx = s.index(b'&') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1850 return s[ampidx + 1 : ampidx + 2].lower(), s.replace(b'&', b'', 1) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1851 |
33714
d880a6bcef2f
ui: refactor extractchoices so it doesn't break on Python 3
Augie Fackler <augie@google.com>
parents:
33687
diff
changeset
|
1852 return (msg, [choicetuple(s) for s in choices]) |
20265
e5803150ea1d
ui: add "extractchoices()" to share the logic to extract choices from prompt
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19886
diff
changeset
|
1853 |
49795
f1e820cda2f5
typing: add type hints related to message output in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49794
diff
changeset
|
1854 def promptchoice(self, prompt: bytes, default: int = 0) -> int: |
19226
c58b6ab4c26f
ui: merge prompt text components into a singe string
Matt Mackall <mpm@selenic.com>
parents:
19195
diff
changeset
|
1855 """Prompt user with a message, read response, and ensure it matches |
c58b6ab4c26f
ui: merge prompt text components into a singe string
Matt Mackall <mpm@selenic.com>
parents:
19195
diff
changeset
|
1856 one of the provided choices. The prompt is formatted as follows: |
c58b6ab4c26f
ui: merge prompt text components into a singe string
Matt Mackall <mpm@selenic.com>
parents:
19195
diff
changeset
|
1857 |
c58b6ab4c26f
ui: merge prompt text components into a singe string
Matt Mackall <mpm@selenic.com>
parents:
19195
diff
changeset
|
1858 "would you like fries with that (Yn)? $$ &Yes $$ &No" |
c58b6ab4c26f
ui: merge prompt text components into a singe string
Matt Mackall <mpm@selenic.com>
parents:
19195
diff
changeset
|
1859 |
c58b6ab4c26f
ui: merge prompt text components into a singe string
Matt Mackall <mpm@selenic.com>
parents:
19195
diff
changeset
|
1860 The index of the choice is returned. Responses are case |
c58b6ab4c26f
ui: merge prompt text components into a singe string
Matt Mackall <mpm@selenic.com>
parents:
19195
diff
changeset
|
1861 insensitive. If ui is not interactive, the default is |
c58b6ab4c26f
ui: merge prompt text components into a singe string
Matt Mackall <mpm@selenic.com>
parents:
19195
diff
changeset
|
1862 returned. |
9048
86b4a9b0ddda
ui: extract choice from prompt
Simon Heimberg <simohe@besonet.ch>
parents:
8940
diff
changeset
|
1863 """ |
19226
c58b6ab4c26f
ui: merge prompt text components into a singe string
Matt Mackall <mpm@selenic.com>
parents:
19195
diff
changeset
|
1864 |
20265
e5803150ea1d
ui: add "extractchoices()" to share the logic to extract choices from prompt
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19886
diff
changeset
|
1865 msg, choices = self.extractchoices(prompt) |
e5803150ea1d
ui: add "extractchoices()" to share the logic to extract choices from prompt
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19886
diff
changeset
|
1866 resps = [r for r, t in choices] |
5671
b5605d88dc27
Make ui.prompt repeat on "unrecognized response" again (issue897)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
5337
diff
changeset
|
1867 while True: |
40592
83e571ea06a9
commandserver: attach prompt default and choices to message
Yuya Nishihara <yuya@tcha.org>
parents:
40590
diff
changeset
|
1868 r = self._prompt(msg, default=resps[default], choices=choices) |
9048
86b4a9b0ddda
ui: extract choice from prompt
Simon Heimberg <simohe@besonet.ch>
parents:
8940
diff
changeset
|
1869 if r.lower() in resps: |
86b4a9b0ddda
ui: extract choice from prompt
Simon Heimberg <simohe@besonet.ch>
parents:
8940
diff
changeset
|
1870 return resps.index(r.lower()) |
40547
840cd57cde32
ui: add config knob to redirect status messages to stderr (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40543
diff
changeset
|
1871 # TODO: shouldn't it be a warning? |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1872 self._writemsg(self._fmsgout, _(b"unrecognized response\n")) |
9048
86b4a9b0ddda
ui: extract choice from prompt
Simon Heimberg <simohe@besonet.ch>
parents:
8940
diff
changeset
|
1873 |
49795
f1e820cda2f5
typing: add type hints related to message output in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49794
diff
changeset
|
1874 def getpass( |
f1e820cda2f5
typing: add type hints related to message output in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49794
diff
changeset
|
1875 self, prompt: Optional[bytes] = None, default: Optional[bytes] = None |
f1e820cda2f5
typing: add type hints related to message output in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49794
diff
changeset
|
1876 ) -> Optional[bytes]: |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1877 if not self.interactive(): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1878 return default |
7798
57fee79e5588
catch CTRL-D at password prompt
Steve Borho <steve@borho.org>
parents:
7600
diff
changeset
|
1879 try: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1880 self._writemsg( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1881 self._fmsgerr, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1882 prompt or _(b'password: '), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1883 type=b'prompt', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1884 password=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1885 ) |
21195
9336bc7dca8e
cmdserver: forcibly use L channel to read password input (issue3161)
Yuya Nishihara <yuya@tcha.org>
parents:
21132
diff
changeset
|
1886 # disable getpass() only if explicitly specified. it's still valid |
9336bc7dca8e
cmdserver: forcibly use L channel to read password input (issue3161)
Yuya Nishihara <yuya@tcha.org>
parents:
21132
diff
changeset
|
1887 # to interact with tty even if fin is not a tty. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1888 with self.timeblockedsection(b'stdio'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1889 if self.configbool(b'ui', b'nontty'): |
40543
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1890 l = self._fin.readline() |
30978
fdecd24ca4dc
ui: log time spent blocked on stdio
Simon Farnsworth <simonfar@fb.com>
parents:
30976
diff
changeset
|
1891 if not l: |
fdecd24ca4dc
ui: log time spent blocked on stdio
Simon Farnsworth <simonfar@fb.com>
parents:
30976
diff
changeset
|
1892 raise EOFError |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1893 return l.rstrip(b'\n') |
30978
fdecd24ca4dc
ui: log time spent blocked on stdio
Simon Farnsworth <simonfar@fb.com>
parents:
30976
diff
changeset
|
1894 else: |
47079
5b3513177f2b
util: avoid echoing the password to the console on Windows py3 (issue6446)
Matt Harbison <matt_harbison@yahoo.com>
parents:
46965
diff
changeset
|
1895 return util.get_password() |
7798
57fee79e5588
catch CTRL-D at password prompt
Steve Borho <steve@borho.org>
parents:
7600
diff
changeset
|
1896 except EOFError: |
26896
5e46123e6c35
error: add structured exception for EOF at prompt
Siddharth Agarwal <sid0@fb.com>
parents:
26820
diff
changeset
|
1897 raise error.ResponseExpected() |
38768
afc4ad706f9c
dispatch: making all hg abortions be output with a specific label
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
38767
diff
changeset
|
1898 |
49795
f1e820cda2f5
typing: add type hints related to message output in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49794
diff
changeset
|
1899 def status(self, *msg: bytes, **opts: _MsgOpts) -> None: |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1900 """write status message to output (if ui.quiet is False) |
10815
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
1901 |
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
1902 This adds an output label of "ui.status". |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1903 """ |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1904 if not self.quiet: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1905 self._writemsg(self._fmsgout, type=b'status', *msg, **opts) |
38768
afc4ad706f9c
dispatch: making all hg abortions be output with a specific label
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
38767
diff
changeset
|
1906 |
49795
f1e820cda2f5
typing: add type hints related to message output in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49794
diff
changeset
|
1907 def warn(self, *msg: bytes, **opts: _MsgOpts) -> None: |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1908 """write warning message to output (stderr) |
10815
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
1909 |
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
1910 This adds an output label of "ui.warning". |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1911 """ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1912 self._writemsg(self._fmsgerr, type=b'warning', *msg, **opts) |
38768
afc4ad706f9c
dispatch: making all hg abortions be output with a specific label
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
38767
diff
changeset
|
1913 |
49795
f1e820cda2f5
typing: add type hints related to message output in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49794
diff
changeset
|
1914 def error(self, *msg: bytes, **opts: _MsgOpts) -> None: |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1915 """write error message to output (stderr) |
38768
afc4ad706f9c
dispatch: making all hg abortions be output with a specific label
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
38767
diff
changeset
|
1916 |
afc4ad706f9c
dispatch: making all hg abortions be output with a specific label
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
38767
diff
changeset
|
1917 This adds an output label of "ui.error". |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1918 """ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1919 self._writemsg(self._fmsgerr, type=b'error', *msg, **opts) |
38768
afc4ad706f9c
dispatch: making all hg abortions be output with a specific label
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
38767
diff
changeset
|
1920 |
49795
f1e820cda2f5
typing: add type hints related to message output in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49794
diff
changeset
|
1921 def note(self, *msg: bytes, **opts: _MsgOpts) -> None: |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1922 """write note to output (if ui.verbose is True) |
10815
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
1923 |
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
1924 This adds an output label of "ui.note". |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1925 """ |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1926 if self.verbose: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1927 self._writemsg(self._fmsgout, type=b'note', *msg, **opts) |
38768
afc4ad706f9c
dispatch: making all hg abortions be output with a specific label
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
38767
diff
changeset
|
1928 |
49795
f1e820cda2f5
typing: add type hints related to message output in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49794
diff
changeset
|
1929 def debug(self, *msg: bytes, **opts: _MsgOpts) -> None: |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1930 """write debug message to output (if ui.debugflag is True) |
10815
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
1931 |
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
1932 This adds an output label of "ui.debug". |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1933 """ |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1934 if self.debugflag: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1935 self._writemsg(self._fmsgout, type=b'debug', *msg, **opts) |
40759
fdc6eb1d650d
blackbox: send debug message to logger by core ui
Yuya Nishihara <yuya@tcha.org>
parents:
40730
diff
changeset
|
1936 self.log(b'debug', b'%s', b''.join(msg)) |
26750
9f9ec4abe700
cmdutil: make in-memory changes visible to external editor (issue4378)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26587
diff
changeset
|
1937 |
43079
5209fc94b982
ui: define (write|status|warn|note)noi18n aliases
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43077
diff
changeset
|
1938 # Aliases to defeat check-code. |
5209fc94b982
ui: define (write|status|warn|note)noi18n aliases
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43077
diff
changeset
|
1939 statusnoi18n = status |
5209fc94b982
ui: define (write|status|warn|note)noi18n aliases
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43077
diff
changeset
|
1940 notenoi18n = note |
5209fc94b982
ui: define (write|status|warn|note)noi18n aliases
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43077
diff
changeset
|
1941 warnnoi18n = warn |
5209fc94b982
ui: define (write|status|warn|note)noi18n aliases
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43077
diff
changeset
|
1942 writenoi18n = write |
5209fc94b982
ui: define (write|status|warn|note)noi18n aliases
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43077
diff
changeset
|
1943 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1944 def edit( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1945 self, |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
1946 text: bytes, |
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
1947 user: bytes, |
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
1948 extra: Optional[Dict[bytes, Any]] = None, # TODO: value type of bytes? |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1949 editform=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1950 pending=None, |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
1951 repopath: Optional[bytes] = None, |
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
1952 action: Optional[bytes] = None, |
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
1953 ) -> bytes: |
34029
6e6452bc441d
editor: use an unambiguous path suffix for editor files
Michael Bolin <mbolin@fb.com>
parents:
34021
diff
changeset
|
1954 if action is None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1955 self.develwarn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1956 b'action is None but will soon be a required ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1957 b'parameter to ui.edit()' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1958 ) |
28635
87f92d6f0bc3
edit: allow to configure the suffix of the temporary filename
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
28633
diff
changeset
|
1959 extra_defaults = { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1960 b'prefix': b'editor', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1961 b'suffix': b'.txt', |
28635
87f92d6f0bc3
edit: allow to configure the suffix of the temporary filename
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
28633
diff
changeset
|
1962 } |
27153
3553e40d0770
ui: allow open editor with custom filename
Mykola Nikishov <mn@mn.com.ua>
parents:
27110
diff
changeset
|
1963 if extra is not None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1964 if extra.get(b'suffix') is not None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1965 self.develwarn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1966 b'extra.suffix is not None but will soon be ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1967 b'ignored by ui.edit()' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1968 ) |
27153
3553e40d0770
ui: allow open editor with custom filename
Mykola Nikishov <mn@mn.com.ua>
parents:
27110
diff
changeset
|
1969 extra_defaults.update(extra) |
3553e40d0770
ui: allow open editor with custom filename
Mykola Nikishov <mn@mn.com.ua>
parents:
27110
diff
changeset
|
1970 extra = extra_defaults |
30835
bcad61a1f9a7
ui: add a parameter to set the temporary directory for edit
Sean Farley <sean@farley.io>
parents:
30832
diff
changeset
|
1971 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1972 if action == b'diff': |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1973 suffix = b'.diff' |
34054
3c82b14d2838
editor: file created for diff action should have .diff suffix
Michael Bolin <mbolin@fb.com>
parents:
34029
diff
changeset
|
1974 elif action: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1975 suffix = b'.%s.hg.txt' % action |
34029
6e6452bc441d
editor: use an unambiguous path suffix for editor files
Michael Bolin <mbolin@fb.com>
parents:
34021
diff
changeset
|
1976 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1977 suffix = extra[b'suffix'] |
34029
6e6452bc441d
editor: use an unambiguous path suffix for editor files
Michael Bolin <mbolin@fb.com>
parents:
34021
diff
changeset
|
1978 |
30848
7080652af6e6
ui: rename tmpdir parameter to more specific repopath
Sean Farley <sean@farley.io>
parents:
30835
diff
changeset
|
1979 rdir = None |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1980 if self.configbool(b'experimental', b'editortmpinhg'): |
30848
7080652af6e6
ui: rename tmpdir parameter to more specific repopath
Sean Farley <sean@farley.io>
parents:
30835
diff
changeset
|
1981 rdir = repopath |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1982 (fd, name) = pycompat.mkstemp( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1983 prefix=b'hg-' + extra[b'prefix'] + b'-', suffix=suffix, dir=rdir |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1984 ) |
1984
df7436f439a0
Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1983
diff
changeset
|
1985 try: |
43876
e5f69e3bb3f6
ui: use a context manager to handle file streams in edit()
Matt Harbison <matt_harbison@yahoo.com>
parents:
43787
diff
changeset
|
1986 with os.fdopen(fd, 'wb') as f: |
e5f69e3bb3f6
ui: use a context manager to handle file streams in edit()
Matt Harbison <matt_harbison@yahoo.com>
parents:
43787
diff
changeset
|
1987 f.write(util.tonativeeol(text)) |
1984
df7436f439a0
Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1983
diff
changeset
|
1988 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1989 environ = {b'HGUSER': user} |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1990 if b'transplant_source' in extra: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1991 environ.update( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1992 {b'HGREVISION': hex(extra[b'transplant_source'])} |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1993 ) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1994 for label in (b'intermediate-source', b'source', b'rebase_source'): |
20605
a8aa699a812a
ui: edit(): rebase, graft: set HGREVISION environment variable for an editor
Alexander Drozdov <al.drozdov@gmail.com>
parents:
20603
diff
changeset
|
1995 if label in extra: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1996 environ.update({b'HGREVISION': extra[label]}) |
20605
a8aa699a812a
ui: edit(): rebase, graft: set HGREVISION environment variable for an editor
Alexander Drozdov <al.drozdov@gmail.com>
parents:
20603
diff
changeset
|
1997 break |
22205
9fa429723f26
ui: invoke editor for committing with HGEDITFORM environment variable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21955
diff
changeset
|
1998 if editform: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1999 environ.update({b'HGEDITFORM': editform}) |
26750
9f9ec4abe700
cmdutil: make in-memory changes visible to external editor (issue4378)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26587
diff
changeset
|
2000 if pending: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2001 environ.update({b'HG_PENDING': pending}) |
20605
a8aa699a812a
ui: edit(): rebase, graft: set HGREVISION environment variable for an editor
Alexander Drozdov <al.drozdov@gmail.com>
parents:
20603
diff
changeset
|
2002 |
5660
3c80ecdc1bcd
Use VISUAL in addition to EDITOR when choosing the editor to use.
Osku Salerma <osku@iki.fi>
parents:
5613
diff
changeset
|
2003 editor = self.geteditor() |
207 | 2004 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2005 self.system( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2006 b"%s \"%s\"" % (editor, name), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2007 environ=environ, |
45877
ac362d5a7893
errors: introduce CanceledError and use it in a few places
Martin von Zweigbergk <martinvonz@google.com>
parents:
45826
diff
changeset
|
2008 onerr=error.CanceledError, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2009 errprefix=_(b"edit failed"), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2010 blockedtag=b'editor', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2011 ) |
608
d2994b5298fb
Add username/merge/editor to .hgrc
Matt Mackall <mpm@selenic.com>
parents:
565
diff
changeset
|
2012 |
43876
e5f69e3bb3f6
ui: use a context manager to handle file streams in edit()
Matt Harbison <matt_harbison@yahoo.com>
parents:
43787
diff
changeset
|
2013 with open(name, 'rb') as f: |
e5f69e3bb3f6
ui: use a context manager to handle file streams in edit()
Matt Harbison <matt_harbison@yahoo.com>
parents:
43787
diff
changeset
|
2014 t = util.fromnativeeol(f.read()) |
1984
df7436f439a0
Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1983
diff
changeset
|
2015 finally: |
df7436f439a0
Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1983
diff
changeset
|
2016 os.unlink(name) |
662
b55a78595ef6
Pass username to hgeditor, remove temporary file
Radoslaw "AstralStorm" Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
613
diff
changeset
|
2017 |
207 | 2018 return t |
2200
9f43b6e24232
move mail sending code into core, so extensions can share it.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2166
diff
changeset
|
2019 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2020 def system( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2021 self, |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
2022 cmd: bytes, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2023 environ=None, |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
2024 cwd: Optional[bytes] = None, |
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
2025 onerr: Optional[Callable[[bytes], Exception]] = None, |
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
2026 errprefix: Optional[bytes] = None, |
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
2027 blockedtag: Optional[bytes] = None, |
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
2028 ) -> int: |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
2029 """execute shell command with appropriate output stream. command |
23269
d9d8d2e0f701
ui: introduce util.system() wrapper to make sure ui.fout is used
Yuya Nishihara <yuya@tcha.org>
parents:
23139
diff
changeset
|
2030 output will be redirected if fout is not stdout. |
31108
3f8f53190d6a
chg: deduplicate error handling of ui.system()
Yuya Nishihara <yuya@tcha.org>
parents:
31107
diff
changeset
|
2031 |
3f8f53190d6a
chg: deduplicate error handling of ui.system()
Yuya Nishihara <yuya@tcha.org>
parents:
31107
diff
changeset
|
2032 if command fails and onerr is None, return status, else raise onerr |
3f8f53190d6a
chg: deduplicate error handling of ui.system()
Yuya Nishihara <yuya@tcha.org>
parents:
31107
diff
changeset
|
2033 object as exception. |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
2034 """ |
30979
fd598149112b
ui: time calls to ui.system
Simon Farnsworth <simonfar@fb.com>
parents:
30978
diff
changeset
|
2035 if blockedtag is None: |
31535
d0f95ecca2ad
ui: restrict length of autogenerated blocked tags
Simon Farnsworth <simonfar@fb.com>
parents:
31532
diff
changeset
|
2036 # Long cmds tend to be because of an absolute path on cmd. Keep |
d0f95ecca2ad
ui: restrict length of autogenerated blocked tags
Simon Farnsworth <simonfar@fb.com>
parents:
31532
diff
changeset
|
2037 # the tail end instead |
d0f95ecca2ad
ui: restrict length of autogenerated blocked tags
Simon Farnsworth <simonfar@fb.com>
parents:
31532
diff
changeset
|
2038 cmdsuffix = cmd.translate(None, _keepalnum)[-85:] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2039 blockedtag = b'unknown_system_' + cmdsuffix |
40543
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
2040 out = self._fout |
25149
3f0744eeaeaf
cleanup: use __builtins__.any instead of util.any
Augie Fackler <augie@google.com>
parents:
25125
diff
changeset
|
2041 if any(s[1] for s in self._bufferstates): |
24848
2f88821856eb
ui: allow capture of subprocess output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24687
diff
changeset
|
2042 out = self |
30979
fd598149112b
ui: time calls to ui.system
Simon Farnsworth <simonfar@fb.com>
parents:
30978
diff
changeset
|
2043 with self.timeblockedsection(blockedtag): |
31108
3f8f53190d6a
chg: deduplicate error handling of ui.system()
Yuya Nishihara <yuya@tcha.org>
parents:
31107
diff
changeset
|
2044 rc = self._runsystem(cmd, environ=environ, cwd=cwd, out=out) |
3f8f53190d6a
chg: deduplicate error handling of ui.system()
Yuya Nishihara <yuya@tcha.org>
parents:
31107
diff
changeset
|
2045 if rc and onerr: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2046 errmsg = b'%s %s' % ( |
44581
b746a22349f9
ui: use "procutil.shellsplit" to parse command
Micha Wiedenmann <mw-u2@posteo.de>
parents:
44159
diff
changeset
|
2047 procutil.shellsplit(cmd)[0], |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2048 procutil.explainexit(rc), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2049 ) |
31108
3f8f53190d6a
chg: deduplicate error handling of ui.system()
Yuya Nishihara <yuya@tcha.org>
parents:
31107
diff
changeset
|
2050 if errprefix: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2051 errmsg = b'%s: %s' % (errprefix, errmsg) |
31108
3f8f53190d6a
chg: deduplicate error handling of ui.system()
Yuya Nishihara <yuya@tcha.org>
parents:
31107
diff
changeset
|
2052 raise onerr(errmsg) |
3f8f53190d6a
chg: deduplicate error handling of ui.system()
Yuya Nishihara <yuya@tcha.org>
parents:
31107
diff
changeset
|
2053 return rc |
31107
fbce78c58f1e
chg: refactor ui.system() to be partly overridden
Yuya Nishihara <yuya@tcha.org>
parents:
31106
diff
changeset
|
2054 |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
2055 def _runsystem(self, cmd: bytes, environ, cwd: Optional[bytes], out) -> int: |
31107
fbce78c58f1e
chg: refactor ui.system() to be partly overridden
Yuya Nishihara <yuya@tcha.org>
parents:
31106
diff
changeset
|
2056 """actually execute the given shell command (can be overridden by |
fbce78c58f1e
chg: refactor ui.system() to be partly overridden
Yuya Nishihara <yuya@tcha.org>
parents:
31106
diff
changeset
|
2057 extensions like chg)""" |
37120
a8a902d7176e
procutil: bulk-replace function calls to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
37119
diff
changeset
|
2058 return procutil.system(cmd, environ=environ, cwd=cwd, out=out) |
23269
d9d8d2e0f701
ui: introduce util.system() wrapper to make sure ui.fout is used
Yuya Nishihara <yuya@tcha.org>
parents:
23139
diff
changeset
|
2059 |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
2060 def traceback(self, exc=None, force: bool = False): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
2061 """print exception traceback if traceback printing enabled or forced. |
2335
f0680b2d1d64
add ui.print_exc(), make all traceback printing central.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2293
diff
changeset
|
2062 only to call in exception handler. returns true if traceback |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
2063 printed.""" |
18966
5572f688e0a9
ui: add 'force' parameter to traceback() to override the current print setting
Matt Harbison <matt_harbison@yahoo.com>
parents:
18965
diff
changeset
|
2064 if self.tracebackflag or force: |
18965
0062508b1900
ui: add support for fully printing chained exception stacks in ui.traceback()
Matt Harbison <matt_harbison@yahoo.com>
parents:
18669
diff
changeset
|
2065 if exc is None: |
0062508b1900
ui: add support for fully printing chained exception stacks in ui.traceback()
Matt Harbison <matt_harbison@yahoo.com>
parents:
18669
diff
changeset
|
2066 exc = sys.exc_info() |
0062508b1900
ui: add support for fully printing chained exception stacks in ui.traceback()
Matt Harbison <matt_harbison@yahoo.com>
parents:
18669
diff
changeset
|
2067 cause = getattr(exc[1], 'cause', None) |
0062508b1900
ui: add support for fully printing chained exception stacks in ui.traceback()
Matt Harbison <matt_harbison@yahoo.com>
parents:
18669
diff
changeset
|
2068 |
0062508b1900
ui: add support for fully printing chained exception stacks in ui.traceback()
Matt Harbison <matt_harbison@yahoo.com>
parents:
18669
diff
changeset
|
2069 if cause is not None: |
0062508b1900
ui: add support for fully printing chained exception stacks in ui.traceback()
Matt Harbison <matt_harbison@yahoo.com>
parents:
18669
diff
changeset
|
2070 causetb = traceback.format_tb(cause[2]) |
0062508b1900
ui: add support for fully printing chained exception stacks in ui.traceback()
Matt Harbison <matt_harbison@yahoo.com>
parents:
18669
diff
changeset
|
2071 exctb = traceback.format_tb(exc[2]) |
0062508b1900
ui: add support for fully printing chained exception stacks in ui.traceback()
Matt Harbison <matt_harbison@yahoo.com>
parents:
18669
diff
changeset
|
2072 exconly = traceback.format_exception_only(cause[0], cause[1]) |
0062508b1900
ui: add support for fully printing chained exception stacks in ui.traceback()
Matt Harbison <matt_harbison@yahoo.com>
parents:
18669
diff
changeset
|
2073 |
0062508b1900
ui: add support for fully printing chained exception stacks in ui.traceback()
Matt Harbison <matt_harbison@yahoo.com>
parents:
18669
diff
changeset
|
2074 # exclude frame where 'exc' was chained and rethrown from exctb |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2075 self.write_err( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2076 b'Traceback (most recent call last):\n', |
43877
e63b27fb0595
ui: convert exception data to bytes when printing chained exception info
Matt Harbison <matt_harbison@yahoo.com>
parents:
43876
diff
changeset
|
2077 encoding.strtolocal(''.join(exctb[:-1])), |
e63b27fb0595
ui: convert exception data to bytes when printing chained exception info
Matt Harbison <matt_harbison@yahoo.com>
parents:
43876
diff
changeset
|
2078 encoding.strtolocal(''.join(causetb)), |
e63b27fb0595
ui: convert exception data to bytes when printing chained exception info
Matt Harbison <matt_harbison@yahoo.com>
parents:
43876
diff
changeset
|
2079 encoding.strtolocal(''.join(exconly)), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2080 ) |
18965
0062508b1900
ui: add support for fully printing chained exception stacks in ui.traceback()
Matt Harbison <matt_harbison@yahoo.com>
parents:
18669
diff
changeset
|
2081 else: |
25568
c1ff82daed62
ui: flush stderr after printing a non-chained exception for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
25519
diff
changeset
|
2082 output = traceback.format_exception(exc[0], exc[1], exc[2]) |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43377
diff
changeset
|
2083 self.write_err(encoding.strtolocal(''.join(output))) |
18966
5572f688e0a9
ui: add 'force' parameter to traceback() to override the current print setting
Matt Harbison <matt_harbison@yahoo.com>
parents:
18965
diff
changeset
|
2084 return self.tracebackflag or force |
5660
3c80ecdc1bcd
Use VISUAL in addition to EDITOR when choosing the editor to use.
Osku Salerma <osku@iki.fi>
parents:
5613
diff
changeset
|
2085 |
3c80ecdc1bcd
Use VISUAL in addition to EDITOR when choosing the editor to use.
Osku Salerma <osku@iki.fi>
parents:
5613
diff
changeset
|
2086 def geteditor(self): |
3c80ecdc1bcd
Use VISUAL in addition to EDITOR when choosing the editor to use.
Osku Salerma <osku@iki.fi>
parents:
5613
diff
changeset
|
2087 '''return editor to use''' |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2088 if pycompat.sysplatform == b'plan9': |
16383
f5dd179bfa4a
plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
16373
diff
changeset
|
2089 # vi is the MIPS instruction simulator on Plan 9. We |
f5dd179bfa4a
plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
16373
diff
changeset
|
2090 # instead default to E to plumb commit messages to |
f5dd179bfa4a
plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
16373
diff
changeset
|
2091 # avoid confusion. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2092 editor = b'E' |
44594
c23877cb25a5
darwin: use vim, not vi, to avoid data-loss inducing posix behavior
Kyle Lippincott <spectral@google.com>
parents:
44126
diff
changeset
|
2093 elif pycompat.isdarwin: |
c23877cb25a5
darwin: use vim, not vi, to avoid data-loss inducing posix behavior
Kyle Lippincott <spectral@google.com>
parents:
44126
diff
changeset
|
2094 # vi on darwin is POSIX compatible to a fault, and that includes |
c23877cb25a5
darwin: use vim, not vi, to avoid data-loss inducing posix behavior
Kyle Lippincott <spectral@google.com>
parents:
44126
diff
changeset
|
2095 # exiting non-zero if you make any mistake when running an ex |
c23877cb25a5
darwin: use vim, not vi, to avoid data-loss inducing posix behavior
Kyle Lippincott <spectral@google.com>
parents:
44126
diff
changeset
|
2096 # command. Proof: `vi -c ':unknown' -c ':qa'; echo $?` produces 1, |
c23877cb25a5
darwin: use vim, not vi, to avoid data-loss inducing posix behavior
Kyle Lippincott <spectral@google.com>
parents:
44126
diff
changeset
|
2097 # while s/vi/vim/ doesn't. |
c23877cb25a5
darwin: use vim, not vi, to avoid data-loss inducing posix behavior
Kyle Lippincott <spectral@google.com>
parents:
44126
diff
changeset
|
2098 editor = b'vim' |
16383
f5dd179bfa4a
plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
16373
diff
changeset
|
2099 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2100 editor = b'vi' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2101 return encoding.environ.get(b"HGEDITOR") or self.config( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2102 b"ui", b"editor", editor |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2103 ) |
9153 | 2104 |
25499
0fa964d6fd48
progress: move all logic altering the ui object logic in mercurial.ui
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25498
diff
changeset
|
2105 @util.propertycache |
49794
25fe689a4a64
typing: add type hints related to progress bars in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49793
diff
changeset
|
2106 def _progbar(self) -> Optional[progress.progbar]: |
25499
0fa964d6fd48
progress: move all logic altering the ui object logic in mercurial.ui
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25498
diff
changeset
|
2107 """setup the progbar singleton to the ui object""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2108 if ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2109 self.quiet |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2110 or self.debugflag |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2111 or self.configbool(b'progress', b'disable') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2112 or not progress.shouldprint(self) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2113 ): |
25499
0fa964d6fd48
progress: move all logic altering the ui object logic in mercurial.ui
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25498
diff
changeset
|
2114 return None |
0fa964d6fd48
progress: move all logic altering the ui object logic in mercurial.ui
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25498
diff
changeset
|
2115 return getprogbar(self) |
0fa964d6fd48
progress: move all logic altering the ui object logic in mercurial.ui
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25498
diff
changeset
|
2116 |
49794
25fe689a4a64
typing: add type hints related to progress bars in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49793
diff
changeset
|
2117 def _progclear(self) -> None: |
25499
0fa964d6fd48
progress: move all logic altering the ui object logic in mercurial.ui
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25498
diff
changeset
|
2118 """clear progress bar output if any. use it before any output""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2119 if not haveprogbar(): # nothing loaded yet |
25499
0fa964d6fd48
progress: move all logic altering the ui object logic in mercurial.ui
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25498
diff
changeset
|
2120 return |
0fa964d6fd48
progress: move all logic altering the ui object logic in mercurial.ui
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25498
diff
changeset
|
2121 if self._progbar is not None and self._progbar.printed: |
0fa964d6fd48
progress: move all logic altering the ui object logic in mercurial.ui
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25498
diff
changeset
|
2122 self._progbar.clear() |
0fa964d6fd48
progress: move all logic altering the ui object logic in mercurial.ui
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25498
diff
changeset
|
2123 |
49794
25fe689a4a64
typing: add type hints related to progress bars in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49793
diff
changeset
|
2124 def makeprogress( |
25fe689a4a64
typing: add type hints related to progress bars in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49793
diff
changeset
|
2125 self, topic: bytes, unit: bytes = b"", total: Optional[int] = None |
25fe689a4a64
typing: add type hints related to progress bars in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49793
diff
changeset
|
2126 ) -> scmutil.progress: |
41210
929999d963b8
progress: specify updatebar() function by constructor argument
Yuya Nishihara <yuya@tcha.org>
parents:
41142
diff
changeset
|
2127 """Create a progress helper for the specified topic""" |
929999d963b8
progress: specify updatebar() function by constructor argument
Yuya Nishihara <yuya@tcha.org>
parents:
41142
diff
changeset
|
2128 if getattr(self._fmsgerr, 'structured', False): |
929999d963b8
progress: specify updatebar() function by constructor argument
Yuya Nishihara <yuya@tcha.org>
parents:
41142
diff
changeset
|
2129 # channel for machine-readable output with metadata, just send |
929999d963b8
progress: specify updatebar() function by constructor argument
Yuya Nishihara <yuya@tcha.org>
parents:
41142
diff
changeset
|
2130 # raw information |
929999d963b8
progress: specify updatebar() function by constructor argument
Yuya Nishihara <yuya@tcha.org>
parents:
41142
diff
changeset
|
2131 # TODO: consider porting some useful information (e.g. estimated |
929999d963b8
progress: specify updatebar() function by constructor argument
Yuya Nishihara <yuya@tcha.org>
parents:
41142
diff
changeset
|
2132 # time) from progbar. we might want to support update delay to |
929999d963b8
progress: specify updatebar() function by constructor argument
Yuya Nishihara <yuya@tcha.org>
parents:
41142
diff
changeset
|
2133 # reduce the cost of transferring progress messages. |
929999d963b8
progress: specify updatebar() function by constructor argument
Yuya Nishihara <yuya@tcha.org>
parents:
41142
diff
changeset
|
2134 def updatebar(topic, pos, item, unit, total): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2135 self._fmsgerr.write( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2136 None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2137 type=b'progress', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2138 topic=topic, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2139 pos=pos, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2140 item=item, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2141 unit=unit, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2142 total=total, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2143 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2144 |
41210
929999d963b8
progress: specify updatebar() function by constructor argument
Yuya Nishihara <yuya@tcha.org>
parents:
41142
diff
changeset
|
2145 elif self._progbar is not None: |
929999d963b8
progress: specify updatebar() function by constructor argument
Yuya Nishihara <yuya@tcha.org>
parents:
41142
diff
changeset
|
2146 updatebar = self._progbar.progress |
929999d963b8
progress: specify updatebar() function by constructor argument
Yuya Nishihara <yuya@tcha.org>
parents:
41142
diff
changeset
|
2147 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2148 |
41210
929999d963b8
progress: specify updatebar() function by constructor argument
Yuya Nishihara <yuya@tcha.org>
parents:
41142
diff
changeset
|
2149 def updatebar(topic, pos, item, unit, total): |
929999d963b8
progress: specify updatebar() function by constructor argument
Yuya Nishihara <yuya@tcha.org>
parents:
41142
diff
changeset
|
2150 pass |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2151 |
41210
929999d963b8
progress: specify updatebar() function by constructor argument
Yuya Nishihara <yuya@tcha.org>
parents:
41142
diff
changeset
|
2152 return scmutil.progress(self, updatebar, topic, unit, total) |
38345
bec1212eceaa
progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents:
38164
diff
changeset
|
2153 |
40730
55b053af7196
ui: manage logger instances and event filtering by core ui
Yuya Nishihara <yuya@tcha.org>
parents:
40678
diff
changeset
|
2154 def getlogger(self, name): |
55b053af7196
ui: manage logger instances and event filtering by core ui
Yuya Nishihara <yuya@tcha.org>
parents:
40678
diff
changeset
|
2155 """Returns a logger of the given name; or None if not registered""" |
55b053af7196
ui: manage logger instances and event filtering by core ui
Yuya Nishihara <yuya@tcha.org>
parents:
40678
diff
changeset
|
2156 return self._loggers.get(name) |
55b053af7196
ui: manage logger instances and event filtering by core ui
Yuya Nishihara <yuya@tcha.org>
parents:
40678
diff
changeset
|
2157 |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
2158 def setlogger(self, name, logger) -> None: |
40730
55b053af7196
ui: manage logger instances and event filtering by core ui
Yuya Nishihara <yuya@tcha.org>
parents:
40678
diff
changeset
|
2159 """Install logger which can be identified later by the given name |
55b053af7196
ui: manage logger instances and event filtering by core ui
Yuya Nishihara <yuya@tcha.org>
parents:
40678
diff
changeset
|
2160 |
55b053af7196
ui: manage logger instances and event filtering by core ui
Yuya Nishihara <yuya@tcha.org>
parents:
40678
diff
changeset
|
2161 More than one loggers can be registered. Use extension or module |
55b053af7196
ui: manage logger instances and event filtering by core ui
Yuya Nishihara <yuya@tcha.org>
parents:
40678
diff
changeset
|
2162 name to uniquely identify the logger instance. |
55b053af7196
ui: manage logger instances and event filtering by core ui
Yuya Nishihara <yuya@tcha.org>
parents:
40678
diff
changeset
|
2163 """ |
55b053af7196
ui: manage logger instances and event filtering by core ui
Yuya Nishihara <yuya@tcha.org>
parents:
40678
diff
changeset
|
2164 self._loggers[name] = logger |
55b053af7196
ui: manage logger instances and event filtering by core ui
Yuya Nishihara <yuya@tcha.org>
parents:
40678
diff
changeset
|
2165 |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
2166 def log(self, event, msgfmt, *msgargs, **opts) -> None: |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
2167 """hook for logging facility extensions |
11984 | 2168 |
40678
c72a81bc2e82
ui: unify argument name of ui.log()
Yuya Nishihara <yuya@tcha.org>
parents:
40602
diff
changeset
|
2169 event should be a readily-identifiable subsystem, which will |
11984 | 2170 allow filtering. |
26235
6c962145f523
ui: improve docs on ui.log
Augie Fackler <augie@google.com>
parents:
26189
diff
changeset
|
2171 |
40760
ffd574c144d2
ui: pass in formatted message to logger.log()
Yuya Nishihara <yuya@tcha.org>
parents:
40759
diff
changeset
|
2172 msgfmt should be a newline-terminated format string to log, and |
ffd574c144d2
ui: pass in formatted message to logger.log()
Yuya Nishihara <yuya@tcha.org>
parents:
40759
diff
changeset
|
2173 *msgargs are %-formatted into it. |
26235
6c962145f523
ui: improve docs on ui.log
Augie Fackler <augie@google.com>
parents:
26189
diff
changeset
|
2174 |
6c962145f523
ui: improve docs on ui.log
Augie Fackler <augie@google.com>
parents:
26189
diff
changeset
|
2175 **opts currently has no defined meanings. |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
2176 """ |
40730
55b053af7196
ui: manage logger instances and event filtering by core ui
Yuya Nishihara <yuya@tcha.org>
parents:
40678
diff
changeset
|
2177 if not self._loggers: |
55b053af7196
ui: manage logger instances and event filtering by core ui
Yuya Nishihara <yuya@tcha.org>
parents:
40678
diff
changeset
|
2178 return |
48935
2cce2fa5bcf7
py3: replace pycompat.itervalues(x) with x.values()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48933
diff
changeset
|
2179 activeloggers = [l for l in self._loggers.values() if l.tracked(event)] |
40730
55b053af7196
ui: manage logger instances and event filtering by core ui
Yuya Nishihara <yuya@tcha.org>
parents:
40678
diff
changeset
|
2180 if not activeloggers: |
55b053af7196
ui: manage logger instances and event filtering by core ui
Yuya Nishihara <yuya@tcha.org>
parents:
40678
diff
changeset
|
2181 return |
40760
ffd574c144d2
ui: pass in formatted message to logger.log()
Yuya Nishihara <yuya@tcha.org>
parents:
40759
diff
changeset
|
2182 msg = msgfmt % msgargs |
40761
691c68bc1222
ui: pass in bytes opts dict to logger.log()
Yuya Nishihara <yuya@tcha.org>
parents:
40760
diff
changeset
|
2183 opts = pycompat.byteskwargs(opts) |
40759
fdc6eb1d650d
blackbox: send debug message to logger by core ui
Yuya Nishihara <yuya@tcha.org>
parents:
40730
diff
changeset
|
2184 # guard against recursion from e.g. ui.debug() |
fdc6eb1d650d
blackbox: send debug message to logger by core ui
Yuya Nishihara <yuya@tcha.org>
parents:
40730
diff
changeset
|
2185 registeredloggers = self._loggers |
fdc6eb1d650d
blackbox: send debug message to logger by core ui
Yuya Nishihara <yuya@tcha.org>
parents:
40730
diff
changeset
|
2186 self._loggers = {} |
fdc6eb1d650d
blackbox: send debug message to logger by core ui
Yuya Nishihara <yuya@tcha.org>
parents:
40730
diff
changeset
|
2187 try: |
fdc6eb1d650d
blackbox: send debug message to logger by core ui
Yuya Nishihara <yuya@tcha.org>
parents:
40730
diff
changeset
|
2188 for logger in activeloggers: |
fdc6eb1d650d
blackbox: send debug message to logger by core ui
Yuya Nishihara <yuya@tcha.org>
parents:
40730
diff
changeset
|
2189 logger.log(self, event, msg, opts) |
fdc6eb1d650d
blackbox: send debug message to logger by core ui
Yuya Nishihara <yuya@tcha.org>
parents:
40730
diff
changeset
|
2190 finally: |
fdc6eb1d650d
blackbox: send debug message to logger by core ui
Yuya Nishihara <yuya@tcha.org>
parents:
40730
diff
changeset
|
2191 self._loggers = registeredloggers |
11984 | 2192 |
49795
f1e820cda2f5
typing: add type hints related to message output in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49794
diff
changeset
|
2193 def label(self, msg: bytes, label: bytes) -> bytes: |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
2194 """style msg based on supplied label |
10815
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
2195 |
31087
894bdcdc75df
color: move the 'colorlabel' call to the core 'ui' class
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31083
diff
changeset
|
2196 If some color mode is enabled, this will add the necessary control |
894bdcdc75df
color: move the 'colorlabel' call to the core 'ui' class
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31083
diff
changeset
|
2197 characters to apply such color. In addition, 'debug' color mode adds |
894bdcdc75df
color: move the 'colorlabel' call to the core 'ui' class
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31083
diff
changeset
|
2198 markup showing which label affects a piece of text. |
10815
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
2199 |
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
2200 ui.write(s, 'label') is equivalent to |
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
2201 ui.write(ui.label(s, 'label')). |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
2202 """ |
31087
894bdcdc75df
color: move the 'colorlabel' call to the core 'ui' class
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31083
diff
changeset
|
2203 if self._colormode is not None: |
894bdcdc75df
color: move the 'colorlabel' call to the core 'ui' class
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31083
diff
changeset
|
2204 return color.colorlabel(self, msg, label) |
10815
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
2205 return msg |
24250
9c32eea2ca04
ui: represent paths as classes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23269
diff
changeset
|
2206 |
49795
f1e820cda2f5
typing: add type hints related to message output in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49794
diff
changeset
|
2207 def develwarn( |
f1e820cda2f5
typing: add type hints related to message output in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49794
diff
changeset
|
2208 self, msg: bytes, stacklevel: int = 1, config: Optional[bytes] = None |
f1e820cda2f5
typing: add type hints related to message output in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49794
diff
changeset
|
2209 ) -> None: |
27274
82910fdc216f
ui: add a 'stacklevel' argument to 'develwarn'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27266
diff
changeset
|
2210 """issue a developer warning message |
82910fdc216f
ui: add a 'stacklevel' argument to 'develwarn'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27266
diff
changeset
|
2211 |
82910fdc216f
ui: add a 'stacklevel' argument to 'develwarn'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27266
diff
changeset
|
2212 Use 'stacklevel' to report the offender some layers further up in the |
82910fdc216f
ui: add a 'stacklevel' argument to 'develwarn'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27266
diff
changeset
|
2213 stack. |
82910fdc216f
ui: add a 'stacklevel' argument to 'develwarn'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27266
diff
changeset
|
2214 """ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2215 if not self.configbool(b'devel', b'all-warnings'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2216 if config is None or not self.configbool(b'devel', config): |
29095
3f33831a9202
develwarn: move config gating inside the develwarn function
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29082
diff
changeset
|
2217 return |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2218 msg = b'devel-warn: ' + msg |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2219 stacklevel += 1 # get in develwarn |
25629
52e5f68d8363
devel-warn: move the develwarn function as a method of the ui object
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25568
diff
changeset
|
2220 if self.tracebackflag: |
40543
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
2221 util.debugstacktrace(msg, stacklevel, self._ferr, self._fout) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2222 self.log( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2223 b'develwarn', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2224 b'%s at:\n%s' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2225 % (msg, b''.join(util.getstackframes(stacklevel))), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2226 ) |
25629
52e5f68d8363
devel-warn: move the develwarn function as a method of the ui object
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25568
diff
changeset
|
2227 else: |
52e5f68d8363
devel-warn: move the develwarn function as a method of the ui object
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25568
diff
changeset
|
2228 curframe = inspect.currentframe() |
52e5f68d8363
devel-warn: move the develwarn function as a method of the ui object
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25568
diff
changeset
|
2229 calframe = inspect.getouterframes(curframe, 2) |
36127
df1760b58fda
ui: convert stack traces to sysbytes before logging
Augie Fackler <augie@google.com>
parents:
36126
diff
changeset
|
2230 fname, lineno, fmsg = calframe[stacklevel][1:4] |
df1760b58fda
ui: convert stack traces to sysbytes before logging
Augie Fackler <augie@google.com>
parents:
36126
diff
changeset
|
2231 fname, fmsg = pycompat.sysbytes(fname), pycompat.sysbytes(fmsg) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2232 self.write_err(b'%s at: %s:%d (%s)\n' % (msg, fname, lineno, fmsg)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2233 self.log( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2234 b'develwarn', b'%s at: %s:%d (%s)\n', msg, fname, lineno, fmsg |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2235 ) |
43991
e3ce3731d621
ui: delete local variables instead of setting to `None`
Matt Harbison <matt_harbison@yahoo.com>
parents:
43910
diff
changeset
|
2236 |
e3ce3731d621
ui: delete local variables instead of setting to `None`
Matt Harbison <matt_harbison@yahoo.com>
parents:
43910
diff
changeset
|
2237 # avoid cycles |
e3ce3731d621
ui: delete local variables instead of setting to `None`
Matt Harbison <matt_harbison@yahoo.com>
parents:
43910
diff
changeset
|
2238 del curframe |
e3ce3731d621
ui: delete local variables instead of setting to `None`
Matt Harbison <matt_harbison@yahoo.com>
parents:
43910
diff
changeset
|
2239 del calframe |
25629
52e5f68d8363
devel-warn: move the develwarn function as a method of the ui object
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25568
diff
changeset
|
2240 |
49795
f1e820cda2f5
typing: add type hints related to message output in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49794
diff
changeset
|
2241 def deprecwarn( |
50253
444fa55f5dd2
style: rewrap `ui.deprecwarn` declaration
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49838
diff
changeset
|
2242 self, |
444fa55f5dd2
style: rewrap `ui.deprecwarn` declaration
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49838
diff
changeset
|
2243 msg: bytes, |
444fa55f5dd2
style: rewrap `ui.deprecwarn` declaration
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49838
diff
changeset
|
2244 version: bytes, |
444fa55f5dd2
style: rewrap `ui.deprecwarn` declaration
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49838
diff
changeset
|
2245 stacklevel: int = 2, |
49795
f1e820cda2f5
typing: add type hints related to message output in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49794
diff
changeset
|
2246 ) -> None: |
27275
f2cd240f2f7c
ui: add a 'deprecwarn' helper to issue deprecation warnings
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27274
diff
changeset
|
2247 """issue a deprecation warning |
f2cd240f2f7c
ui: add a 'deprecwarn' helper to issue deprecation warnings
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27274
diff
changeset
|
2248 |
f2cd240f2f7c
ui: add a 'deprecwarn' helper to issue deprecation warnings
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27274
diff
changeset
|
2249 - msg: message explaining what is deprecated and how to upgrade, |
f2cd240f2f7c
ui: add a 'deprecwarn' helper to issue deprecation warnings
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27274
diff
changeset
|
2250 - version: last version where the API will be supported, |
f2cd240f2f7c
ui: add a 'deprecwarn' helper to issue deprecation warnings
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27274
diff
changeset
|
2251 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2252 if not ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2253 self.configbool(b'devel', b'all-warnings') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2254 or self.configbool(b'devel', b'deprec-warn') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2255 ): |
29082
77de985d7c91
deprecation: gate deprecation warning behind devel configuration
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
28962
diff
changeset
|
2256 return |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2257 msg += ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2258 b"\n(compatibility will be dropped after Mercurial-%s," |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2259 b" update your code.)" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2260 ) % version |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2261 self.develwarn(msg, stacklevel=stacklevel, config=b'deprec-warn') |
25629
52e5f68d8363
devel-warn: move the develwarn function as a method of the ui object
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25568
diff
changeset
|
2262 |
30832
da5fa0f13a41
ui: introduce an experimental dict of exportable environment variables
Matt Harbison <matt_harbison@yahoo.com>
parents:
30814
diff
changeset
|
2263 def exportableenviron(self): |
da5fa0f13a41
ui: introduce an experimental dict of exportable environment variables
Matt Harbison <matt_harbison@yahoo.com>
parents:
30814
diff
changeset
|
2264 """The environment variables that are safe to export, e.g. through |
da5fa0f13a41
ui: introduce an experimental dict of exportable environment variables
Matt Harbison <matt_harbison@yahoo.com>
parents:
30814
diff
changeset
|
2265 hgweb. |
da5fa0f13a41
ui: introduce an experimental dict of exportable environment variables
Matt Harbison <matt_harbison@yahoo.com>
parents:
30814
diff
changeset
|
2266 """ |
da5fa0f13a41
ui: introduce an experimental dict of exportable environment variables
Matt Harbison <matt_harbison@yahoo.com>
parents:
30814
diff
changeset
|
2267 return self._exportableenviron |
da5fa0f13a41
ui: introduce an experimental dict of exportable environment variables
Matt Harbison <matt_harbison@yahoo.com>
parents:
30814
diff
changeset
|
2268 |
30480
b0a8337ba9af
ui: add configoverride context manager
Kostia Balytskyi <ikostia@fb.com>
parents:
30473
diff
changeset
|
2269 @contextlib.contextmanager |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
2270 def configoverride(self, overrides: _ConfigItems, source: bytes = b""): |
30480
b0a8337ba9af
ui: add configoverride context manager
Kostia Balytskyi <ikostia@fb.com>
parents:
30473
diff
changeset
|
2271 """Context manager for temporary config overrides |
b0a8337ba9af
ui: add configoverride context manager
Kostia Balytskyi <ikostia@fb.com>
parents:
30473
diff
changeset
|
2272 `overrides` must be a dict of the following structure: |
b0a8337ba9af
ui: add configoverride context manager
Kostia Balytskyi <ikostia@fb.com>
parents:
30473
diff
changeset
|
2273 {(section, name) : value}""" |
b0a8337ba9af
ui: add configoverride context manager
Kostia Balytskyi <ikostia@fb.com>
parents:
30473
diff
changeset
|
2274 backups = {} |
30537
4b0e6677eed1
ui: use try..finally in configoverride
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30519
diff
changeset
|
2275 try: |
4b0e6677eed1
ui: use try..finally in configoverride
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30519
diff
changeset
|
2276 for (section, name), value in overrides.items(): |
4b0e6677eed1
ui: use try..finally in configoverride
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30519
diff
changeset
|
2277 backups[(section, name)] = self.backupconfig(section, name) |
4b0e6677eed1
ui: use try..finally in configoverride
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30519
diff
changeset
|
2278 self.setconfig(section, name, value, source) |
4b0e6677eed1
ui: use try..finally in configoverride
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30519
diff
changeset
|
2279 yield |
4b0e6677eed1
ui: use try..finally in configoverride
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30519
diff
changeset
|
2280 finally: |
4b0e6677eed1
ui: use try..finally in configoverride
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30519
diff
changeset
|
2281 for __, backup in backups.items(): |
4b0e6677eed1
ui: use try..finally in configoverride
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30519
diff
changeset
|
2282 self.restoreconfig(backup) |
4b0e6677eed1
ui: use try..finally in configoverride
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30519
diff
changeset
|
2283 # just restoring ui.quiet config to the previous value is not enough |
4b0e6677eed1
ui: use try..finally in configoverride
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30519
diff
changeset
|
2284 # as it does not update ui.quiet class member |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2285 if (b'ui', b'quiet') in overrides: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2286 self.fixconfig(section=b'ui') |
30480
b0a8337ba9af
ui: add configoverride context manager
Kostia Balytskyi <ikostia@fb.com>
parents:
30473
diff
changeset
|
2287 |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
2288 def estimatememory(self) -> Optional[int]: |
45061
02b17231f6c3
util: provide a helper function to estimate RAM size
Joerg Sonnenberger <joerg@bec.de>
parents:
45033
diff
changeset
|
2289 """Provide an estimate for the available system memory in Bytes. |
02b17231f6c3
util: provide a helper function to estimate RAM size
Joerg Sonnenberger <joerg@bec.de>
parents:
45033
diff
changeset
|
2290 |
02b17231f6c3
util: provide a helper function to estimate RAM size
Joerg Sonnenberger <joerg@bec.de>
parents:
45033
diff
changeset
|
2291 This can be overriden via ui.available-memory. It returns None, if |
02b17231f6c3
util: provide a helper function to estimate RAM size
Joerg Sonnenberger <joerg@bec.de>
parents:
45033
diff
changeset
|
2292 no estimate can be computed. |
02b17231f6c3
util: provide a helper function to estimate RAM size
Joerg Sonnenberger <joerg@bec.de>
parents:
45033
diff
changeset
|
2293 """ |
02b17231f6c3
util: provide a helper function to estimate RAM size
Joerg Sonnenberger <joerg@bec.de>
parents:
45033
diff
changeset
|
2294 value = self.config(b'ui', b'available-memory') |
02b17231f6c3
util: provide a helper function to estimate RAM size
Joerg Sonnenberger <joerg@bec.de>
parents:
45033
diff
changeset
|
2295 if value is not None: |
02b17231f6c3
util: provide a helper function to estimate RAM size
Joerg Sonnenberger <joerg@bec.de>
parents:
45033
diff
changeset
|
2296 try: |
02b17231f6c3
util: provide a helper function to estimate RAM size
Joerg Sonnenberger <joerg@bec.de>
parents:
45033
diff
changeset
|
2297 return util.sizetoint(value) |
02b17231f6c3
util: provide a helper function to estimate RAM size
Joerg Sonnenberger <joerg@bec.de>
parents:
45033
diff
changeset
|
2298 except error.ParseError: |
02b17231f6c3
util: provide a helper function to estimate RAM size
Joerg Sonnenberger <joerg@bec.de>
parents:
45033
diff
changeset
|
2299 raise error.ConfigError( |
02b17231f6c3
util: provide a helper function to estimate RAM size
Joerg Sonnenberger <joerg@bec.de>
parents:
45033
diff
changeset
|
2300 _(b"ui.available-memory value is invalid ('%s')") % value |
02b17231f6c3
util: provide a helper function to estimate RAM size
Joerg Sonnenberger <joerg@bec.de>
parents:
45033
diff
changeset
|
2301 ) |
02b17231f6c3
util: provide a helper function to estimate RAM size
Joerg Sonnenberger <joerg@bec.de>
parents:
45033
diff
changeset
|
2302 return util._estimatememory() |
02b17231f6c3
util: provide a helper function to estimate RAM size
Joerg Sonnenberger <joerg@bec.de>
parents:
45033
diff
changeset
|
2303 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2304 |
25498
7a5335ed7e1a
progress: move the singleton logic to the ui module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25363
diff
changeset
|
2305 # we instantiate one globally shared progress bar to avoid |
7a5335ed7e1a
progress: move the singleton logic to the ui module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25363
diff
changeset
|
2306 # competing progress bars when multiple UI objects get created |
49794
25fe689a4a64
typing: add type hints related to progress bars in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49793
diff
changeset
|
2307 _progresssingleton: Optional[progress.progbar] = None |
25498
7a5335ed7e1a
progress: move the singleton logic to the ui module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25363
diff
changeset
|
2308 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2309 |
49794
25fe689a4a64
typing: add type hints related to progress bars in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49793
diff
changeset
|
2310 def getprogbar(ui: ui) -> progress.progbar: |
25498
7a5335ed7e1a
progress: move the singleton logic to the ui module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25363
diff
changeset
|
2311 global _progresssingleton |
7a5335ed7e1a
progress: move the singleton logic to the ui module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25363
diff
changeset
|
2312 if _progresssingleton is None: |
7a5335ed7e1a
progress: move the singleton logic to the ui module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25363
diff
changeset
|
2313 # passing 'ui' object to the singleton is fishy, |
7a5335ed7e1a
progress: move the singleton logic to the ui module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25363
diff
changeset
|
2314 # this is how the extension used to work but feel free to rework it. |
7a5335ed7e1a
progress: move the singleton logic to the ui module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25363
diff
changeset
|
2315 _progresssingleton = progress.progbar(ui) |
7a5335ed7e1a
progress: move the singleton logic to the ui module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25363
diff
changeset
|
2316 return _progresssingleton |
34351
0e4bed5c5c38
ui: check for progress singleton when clearing progress bar (issue5684)
Mark Thomas <mbthomas@fb.com>
parents:
33755
diff
changeset
|
2317 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2318 |
49794
25fe689a4a64
typing: add type hints related to progress bars in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49793
diff
changeset
|
2319 def haveprogbar() -> bool: |
34351
0e4bed5c5c38
ui: check for progress singleton when clearing progress bar (issue5684)
Mark Thomas <mbthomas@fb.com>
parents:
33755
diff
changeset
|
2320 return _progresssingleton is not None |
40547
840cd57cde32
ui: add config knob to redirect status messages to stderr (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40543
diff
changeset
|
2321 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2322 |
49797
0449fb7729d7
typing: add trivial type hints to mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49795
diff
changeset
|
2323 def _selectmsgdests(ui: ui): |
40547
840cd57cde32
ui: add config knob to redirect status messages to stderr (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40543
diff
changeset
|
2324 name = ui.config(b'ui', b'message-output') |
40589
054d0fcba2c4
commandserver: add experimental option to use separate message channel
Yuya Nishihara <yuya@tcha.org>
parents:
40587
diff
changeset
|
2325 if name == b'channel': |
054d0fcba2c4
commandserver: add experimental option to use separate message channel
Yuya Nishihara <yuya@tcha.org>
parents:
40587
diff
changeset
|
2326 if ui.fmsg: |
054d0fcba2c4
commandserver: add experimental option to use separate message channel
Yuya Nishihara <yuya@tcha.org>
parents:
40587
diff
changeset
|
2327 return ui.fmsg, ui.fmsg |
054d0fcba2c4
commandserver: add experimental option to use separate message channel
Yuya Nishihara <yuya@tcha.org>
parents:
40587
diff
changeset
|
2328 else: |
054d0fcba2c4
commandserver: add experimental option to use separate message channel
Yuya Nishihara <yuya@tcha.org>
parents:
40587
diff
changeset
|
2329 # fall back to ferr if channel isn't ready so that status/error |
054d0fcba2c4
commandserver: add experimental option to use separate message channel
Yuya Nishihara <yuya@tcha.org>
parents:
40587
diff
changeset
|
2330 # messages can be printed |
054d0fcba2c4
commandserver: add experimental option to use separate message channel
Yuya Nishihara <yuya@tcha.org>
parents:
40587
diff
changeset
|
2331 return ui.ferr, ui.ferr |
40547
840cd57cde32
ui: add config knob to redirect status messages to stderr (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40543
diff
changeset
|
2332 if name == b'stdio': |
840cd57cde32
ui: add config knob to redirect status messages to stderr (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40543
diff
changeset
|
2333 return ui.fout, ui.ferr |
840cd57cde32
ui: add config knob to redirect status messages to stderr (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40543
diff
changeset
|
2334 if name == b'stderr': |
840cd57cde32
ui: add config knob to redirect status messages to stderr (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40543
diff
changeset
|
2335 return ui.ferr, ui.ferr |
840cd57cde32
ui: add config knob to redirect status messages to stderr (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40543
diff
changeset
|
2336 raise error.Abort(b'invalid ui.message-output destination: %s' % name) |
40590
83dd8c63a0c6
ui: extract helpers to write message with type or label
Yuya Nishihara <yuya@tcha.org>
parents:
40589
diff
changeset
|
2337 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2338 |
49795
f1e820cda2f5
typing: add type hints related to message output in mercurial/ui.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49794
diff
changeset
|
2339 def _writemsgwith(write, dest, *args: bytes, **opts: _MsgOpts) -> None: |
40590
83dd8c63a0c6
ui: extract helpers to write message with type or label
Yuya Nishihara <yuya@tcha.org>
parents:
40589
diff
changeset
|
2340 """Write ui message with the given ui._write*() function |
83dd8c63a0c6
ui: extract helpers to write message with type or label
Yuya Nishihara <yuya@tcha.org>
parents:
40589
diff
changeset
|
2341 |
83dd8c63a0c6
ui: extract helpers to write message with type or label
Yuya Nishihara <yuya@tcha.org>
parents:
40589
diff
changeset
|
2342 The specified message type is translated to 'ui.<type>' label if the dest |
83dd8c63a0c6
ui: extract helpers to write message with type or label
Yuya Nishihara <yuya@tcha.org>
parents:
40589
diff
changeset
|
2343 isn't a structured channel, so that the message will be colorized. |
83dd8c63a0c6
ui: extract helpers to write message with type or label
Yuya Nishihara <yuya@tcha.org>
parents:
40589
diff
changeset
|
2344 """ |
83dd8c63a0c6
ui: extract helpers to write message with type or label
Yuya Nishihara <yuya@tcha.org>
parents:
40589
diff
changeset
|
2345 # TODO: maybe change 'type' to a mandatory option |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43377
diff
changeset
|
2346 if 'type' in opts and not getattr(dest, 'structured', False): |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43377
diff
changeset
|
2347 opts['label'] = opts.get('label', b'') + b' ui.%s' % opts.pop('type') |
40590
83dd8c63a0c6
ui: extract helpers to write message with type or label
Yuya Nishihara <yuya@tcha.org>
parents:
40589
diff
changeset
|
2348 write(dest, *args, **opts) |