Mercurial > hg
annotate mercurial/ui.py @ 47072:4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Since the dawn of time, people have been forced to rely to lossy introspection
of the index filename to determine what the purpose and role of the revlog they
encounter is. This is hacky, error prone, inflexible, abstraction-leaky,
<insert-your-own-complaints-here>.
In f63299ee7e4d Raphaël introduced a new attribute to track this information:
`revlog_kind`. However it is initialized in an odd place and various instances
end up not having it set. In addition is only tracking some of the information
we end up having to introspect in various pieces of code.
So we add a new attribute that holds more data and is more strictly enforced.
This work is done in collaboration with Raphaël.
The `revlog_kind` one will be removed/adapted in the next changeset. We expect
to be able to clean up various existing piece of code and to simplify coming
work around the newer revlog format.
Differential Revision: https://phab.mercurial-scm.org/D10352
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Tue, 06 Apr 2021 05:20:24 +0200 |
parents | 9ea75ea23534 |
children | b0e92313107e |
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 |
25989
2cc4e8385661
ui: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
8 from __future__ import absolute_import |
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 |
2cc4e8385661
ui: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
14 import getpass |
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
|
15 import inspect |
25989
2cc4e8385661
ui: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
16 import os |
27392
00aa37c65e0a
ui: try to handle $$ more robustly in prompts (issue4970)
Matt Mackall <mpm@selenic.com>
parents:
26820
diff
changeset
|
17 import re |
30992
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
18 import signal |
25989
2cc4e8385661
ui: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
19 import socket |
30992
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
20 import subprocess |
25989
2cc4e8385661
ui: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
21 import sys |
2cc4e8385661
ui: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
22 import traceback |
2cc4e8385661
ui: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
23 |
2cc4e8385661
ui: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
24 from .i18n import _ |
2cc4e8385661
ui: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
25 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
|
26 from .pycompat import ( |
43089
c59eb1560c44
py3: manually import getattr where it is needed
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43087
diff
changeset
|
27 getattr, |
43087
66f2cc210a29
py3: manually import pycompat.setattr where it is needed
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43085
diff
changeset
|
28 open, |
66f2cc210a29
py3: manually import pycompat.setattr where it is needed
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43085
diff
changeset
|
29 ) |
25989
2cc4e8385661
ui: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
30 |
2cc4e8385661
ui: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
31 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
|
32 color, |
25989
2cc4e8385661
ui: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
33 config, |
32984
6d983e8af49c
configitems: introduce a central registry for config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32967
diff
changeset
|
34 configitems, |
30277
e9fca89c6d58
py3: use encoding.environ in ui.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29978
diff
changeset
|
35 encoding, |
25989
2cc4e8385661
ui: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
36 error, |
2cc4e8385661
ui: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
37 formatter, |
40994
ab92e2111408
ui: install logger that sends debug.extensions messages to stderr
Yuya Nishihara <yuya@tcha.org>
parents:
40761
diff
changeset
|
38 loggingutil, |
25989
2cc4e8385661
ui: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
39 progress, |
30519
20a42325fdef
py3: use pycompat.getcwd() instead of os.getcwd()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30480
diff
changeset
|
40 pycompat, |
31679
0f8ba0bc1154
rcutil: move scmutil.*rcpath to rcutil (API)
Jun Wu <quark@fb.com>
parents:
31624
diff
changeset
|
41 rcutil, |
25989
2cc4e8385661
ui: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
42 scmutil, |
2cc4e8385661
ui: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
43 util, |
2cc4e8385661
ui: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
44 ) |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36910
diff
changeset
|
45 from .utils import ( |
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36910
diff
changeset
|
46 dateutil, |
37119
d4a2e0d5d042
procutil: bulk-replace util.std* to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
37084
diff
changeset
|
47 procutil, |
44030
5ac0e6f19eb4
ui: refactor `readconfig()` into a form that can consume resources
Matt Harbison <matt_harbison@yahoo.com>
parents:
44021
diff
changeset
|
48 resourceutil, |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36910
diff
changeset
|
49 stringutil, |
46906
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46828
diff
changeset
|
50 urlutil, |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36910
diff
changeset
|
51 ) |
207 | 52 |
29378
fea71f66ebff
url: remember http password database in ui object
liscju <piotr.listkiewicz@gmail.com>
parents:
29366
diff
changeset
|
53 urlreq = util.urlreq |
fea71f66ebff
url: remember http password database in ui object
liscju <piotr.listkiewicz@gmail.com>
parents:
29366
diff
changeset
|
54 |
30979
fd598149112b
ui: time calls to ui.system
Simon Farnsworth <simonfar@fb.com>
parents:
30978
diff
changeset
|
55 # for use with str.translate(None, _keepalnum), to keep just alphanumerics |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
56 _keepalnum = b''.join( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
57 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
|
58 ) |
30979
fd598149112b
ui: time calls to ui.system
Simon Farnsworth <simonfar@fb.com>
parents:
30978
diff
changeset
|
59 |
32872
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
60 # The config knobs that will be altered (if unset) by ui.tweakdefaults. |
35911
704095e27c5c
py3: add b'' to tweakdefaults config string
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35900
diff
changeset
|
61 tweakrc = b""" |
32872
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
62 [ui] |
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
63 # 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
|
64 rollback = False |
35067
929858db4d22
tweakdefaults: turn on ui.statuscopies
Martin von Zweigbergk <martinvonz@google.com>
parents:
34957
diff
changeset
|
65 # Make `hg status` report copy information |
929858db4d22
tweakdefaults: turn on ui.statuscopies
Martin von Zweigbergk <martinvonz@google.com>
parents:
34957
diff
changeset
|
66 statuscopies = yes |
35306
03a83ace9816
ui: add curses interface to tweakdefaults
Augie Fackler <augie@google.com>
parents:
35186
diff
changeset
|
67 # 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
|
68 interface = curses |
41493
97ab4cbb342e
tweakdefaults: set ui.relative-paths instead of command.status.relative
Martin von Zweigbergk <martinvonz@google.com>
parents:
41484
diff
changeset
|
69 # 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
|
70 relative-paths = yes |
32872
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
71 |
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
72 [commands] |
38652
bfcd5c7cbf9a
grep: restore pre-9ef10437bb88 behavior, enable wdir search by tweakdefaults
Yuya Nishihara <yuya@tcha.org>
parents:
38623
diff
changeset
|
73 # 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
|
74 grep.all-files = True |
34707
6cd8d8203204
tweakdefaults: make commands.update.check be `noconflict`
Augie Fackler <augie@google.com>
parents:
34645
diff
changeset
|
75 # 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
|
76 update.check = noconflict |
36910
98487ad0cf8b
tweakdefaults: add commands.status.verbose to tweakefaults
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36834
diff
changeset
|
77 # Show conflicts information in `hg status` |
98487ad0cf8b
tweakdefaults: add commands.status.verbose to tweakefaults
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36834
diff
changeset
|
78 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
|
79 # 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
|
80 resolve.explicit-re-merge = True |
32872
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
81 |
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
82 [diff] |
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
83 git = 1 |
35307
4caafe280488
ui: add diff.showfunc to tweakdefaults
Augie Fackler <augie@google.com>
parents:
35306
diff
changeset
|
84 showfunc = 1 |
38623
92c845c097aa
tweakdefaults: enable word-diff by default
Augie Fackler <augie@google.com>
parents:
38575
diff
changeset
|
85 word-diff = 1 |
32872
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
86 """ |
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
87 |
22419
fdfc9faca273
ui: move samplehgrcs from config
Matt Mackall <mpm@selenic.com>
parents:
22291
diff
changeset
|
88 samplehgrcs = { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
89 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
|
90 [ui] |
fdfc9faca273
ui: move samplehgrcs from config
Matt Mackall <mpm@selenic.com>
parents:
22291
diff
changeset
|
91 # name and email, e.g. |
fdfc9faca273
ui: move samplehgrcs from config
Matt Mackall <mpm@selenic.com>
parents:
22291
diff
changeset
|
92 # username = Jane Doe <jdoe@example.com> |
fdfc9faca273
ui: move samplehgrcs from config
Matt Mackall <mpm@selenic.com>
parents:
22291
diff
changeset
|
93 username = |
fdfc9faca273
ui: move samplehgrcs from config
Matt Mackall <mpm@selenic.com>
parents:
22291
diff
changeset
|
94 |
34568
63c19b7fa100
ui: recommend tweakdefaults in the default hgrc template
Augie Fackler <augie@google.com>
parents:
34482
diff
changeset
|
95 # 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
|
96 # 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
|
97 # writing scripts! |
63c19b7fa100
ui: recommend tweakdefaults in the default hgrc template
Augie Fackler <augie@google.com>
parents:
34482
diff
changeset
|
98 # tweakdefaults = True |
63c19b7fa100
ui: recommend tweakdefaults in the default hgrc template
Augie Fackler <augie@google.com>
parents:
34482
diff
changeset
|
99 |
32093
4d438efb825a
color: reflect the new default in the example hgrc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32078
diff
changeset
|
100 # 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
|
101 # (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
|
102 # 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
|
103 |
32100
21eb863187ea
pager: advertise the config option in the default hgrc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32097
diff
changeset
|
104 # 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
|
105 # (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
|
106 # 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
|
107 |
22419
fdfc9faca273
ui: move samplehgrcs from config
Matt Mackall <mpm@selenic.com>
parents:
22291
diff
changeset
|
108 [extensions] |
41998
018acb7a3490
samplehgrcs: clarify which lines should be uncommented
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
41829
diff
changeset
|
109 # 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
|
110 # (see 'hg help extensions' for more info) |
22419
fdfc9faca273
ui: move samplehgrcs from config
Matt Mackall <mpm@selenic.com>
parents:
22291
diff
changeset
|
111 # |
41999
ba064f95175e
samplehgrcs: update the list of suggested extensions
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
41998
diff
changeset
|
112 # histedit = |
ba064f95175e
samplehgrcs: update the list of suggested extensions
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
41998
diff
changeset
|
113 # rebase = |
ba064f95175e
samplehgrcs: update the list of suggested extensions
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
41998
diff
changeset
|
114 # uncommit = |
32097
601bfcddccdc
config: drop pager from the recommended extension
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32096
diff
changeset
|
115 """, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
116 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
|
117 [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
|
118 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
|
119 |
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
|
120 # 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
|
121 # (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
|
122 # |
31064
4431add9aef9
ui: replace obsolete default-push with default:pushurl (issue5485)
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
30848
diff
changeset
|
123 # 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
|
124 # 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
|
125 # 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
|
126 |
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
|
127 [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
|
128 # 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
|
129 # 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
|
130 """, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
131 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
|
132 [paths] |
5a831e4e6d7a
config: give a more detailed sample repo config
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
22783
diff
changeset
|
133 # 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
|
134 # (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
|
135 # |
31064
4431add9aef9
ui: replace obsolete default-push with default:pushurl (issue5485)
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
30848
diff
changeset
|
136 # 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
|
137 # 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
|
138 # 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
|
139 # 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
|
140 |
5a831e4e6d7a
config: give a more detailed sample repo config
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
22783
diff
changeset
|
141 [ui] |
5a831e4e6d7a
config: give a more detailed sample repo config
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
22783
diff
changeset
|
142 # 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
|
143 # username = Jane Doe <jdoe@example.com> |
22419
fdfc9faca273
ui: move samplehgrcs from config
Matt Mackall <mpm@selenic.com>
parents:
22291
diff
changeset
|
144 """, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
145 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
|
146 |
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
|
147 [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
|
148 # 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
|
149 # (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
|
150 # 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
|
151 |
32100
21eb863187ea
pager: advertise the config option in the default hgrc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32097
diff
changeset
|
152 # 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
|
153 # (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
|
154 # 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
|
155 |
22419
fdfc9faca273
ui: move samplehgrcs from config
Matt Mackall <mpm@selenic.com>
parents:
22291
diff
changeset
|
156 [extensions] |
41998
018acb7a3490
samplehgrcs: clarify which lines should be uncommented
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
41829
diff
changeset
|
157 # 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
|
158 # (see 'hg help extensions' for more info) |
22419
fdfc9faca273
ui: move samplehgrcs from config
Matt Mackall <mpm@selenic.com>
parents:
22291
diff
changeset
|
159 # |
fdfc9faca273
ui: move samplehgrcs from config
Matt Mackall <mpm@selenic.com>
parents:
22291
diff
changeset
|
160 # blackbox = |
32096
726121fa86e1
config: use "churn" as an example extension
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32094
diff
changeset
|
161 # churn = |
32097
601bfcddccdc
config: drop pager from the recommended extension
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32096
diff
changeset
|
162 """, |
22419
fdfc9faca273
ui: move samplehgrcs from config
Matt Mackall <mpm@selenic.com>
parents:
22291
diff
changeset
|
163 } |
fdfc9faca273
ui: move samplehgrcs from config
Matt Mackall <mpm@selenic.com>
parents:
22291
diff
changeset
|
164 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
165 |
34482
75de5d456b60
ui: convert to/from Optional[bytes] to Optional[str] in password manager
Augie Fackler <augie@google.com>
parents:
34426
diff
changeset
|
166 def _maybestrurl(maybebytes): |
38575
152f4822d210
pycompat: move rapply() from util
Yuya Nishihara <yuya@tcha.org>
parents:
38526
diff
changeset
|
167 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
|
168 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
169 |
34482
75de5d456b60
ui: convert to/from Optional[bytes] to Optional[str] in password manager
Augie Fackler <augie@google.com>
parents:
34426
diff
changeset
|
170 def _maybebytesurl(maybestr): |
38575
152f4822d210
pycompat: move rapply() from util
Yuya Nishihara <yuya@tcha.org>
parents:
38526
diff
changeset
|
171 return pycompat.rapply(pycompat.bytesurl, maybestr) |
30945
8b83b626fb1e
ui: remove urllib2 from being imported early
Kyle Lippincott <spectral@google.com>
parents:
30932
diff
changeset
|
172 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
173 |
30945
8b83b626fb1e
ui: remove urllib2 from being imported early
Kyle Lippincott <spectral@google.com>
parents:
30932
diff
changeset
|
174 class httppasswordmgrdbproxy(object): |
8b83b626fb1e
ui: remove urllib2 from being imported early
Kyle Lippincott <spectral@google.com>
parents:
30932
diff
changeset
|
175 """Delays loading urllib2 until it's needed.""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
176 |
30945
8b83b626fb1e
ui: remove urllib2 from being imported early
Kyle Lippincott <spectral@google.com>
parents:
30932
diff
changeset
|
177 def __init__(self): |
8b83b626fb1e
ui: remove urllib2 from being imported early
Kyle Lippincott <spectral@google.com>
parents:
30932
diff
changeset
|
178 self._mgr = None |
8b83b626fb1e
ui: remove urllib2 from being imported early
Kyle Lippincott <spectral@google.com>
parents:
30932
diff
changeset
|
179 |
8b83b626fb1e
ui: remove urllib2 from being imported early
Kyle Lippincott <spectral@google.com>
parents:
30932
diff
changeset
|
180 def _get_mgr(self): |
8b83b626fb1e
ui: remove urllib2 from being imported early
Kyle Lippincott <spectral@google.com>
parents:
30932
diff
changeset
|
181 if self._mgr is None: |
8b83b626fb1e
ui: remove urllib2 from being imported early
Kyle Lippincott <spectral@google.com>
parents:
30932
diff
changeset
|
182 self._mgr = urlreq.httppasswordmgrwithdefaultrealm() |
8b83b626fb1e
ui: remove urllib2 from being imported early
Kyle Lippincott <spectral@google.com>
parents:
30932
diff
changeset
|
183 return self._mgr |
8b83b626fb1e
ui: remove urllib2 from being imported early
Kyle Lippincott <spectral@google.com>
parents:
30932
diff
changeset
|
184 |
34426
ae2fcf7af409
httppasswordmgrdbproxy: specify exact arguments
Augie Fackler <augie@google.com>
parents:
34367
diff
changeset
|
185 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
|
186 return self._get_mgr().add_password( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
187 _maybestrurl(realm), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
188 _maybestrurl(uris), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
189 _maybestrurl(user), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
190 _maybestrurl(passwd), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
191 ) |
30945
8b83b626fb1e
ui: remove urllib2 from being imported early
Kyle Lippincott <spectral@google.com>
parents:
30932
diff
changeset
|
192 |
34426
ae2fcf7af409
httppasswordmgrdbproxy: specify exact arguments
Augie Fackler <augie@google.com>
parents:
34367
diff
changeset
|
193 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
|
194 mgr = self._get_mgr() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
195 return _maybebytesurl( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
196 mgr.find_user_password(_maybestrurl(realm), _maybestrurl(uri)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
197 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
198 |
30945
8b83b626fb1e
ui: remove urllib2 from being imported early
Kyle Lippincott <spectral@google.com>
parents:
30932
diff
changeset
|
199 |
30992
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
200 def _catchterm(*args): |
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
201 raise error.SignalInterrupt |
30945
8b83b626fb1e
ui: remove urllib2 from being imported early
Kyle Lippincott <spectral@google.com>
parents:
30932
diff
changeset
|
202 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
203 |
32958
4a3f1d362e5f
config: explicitly track the use of the standard default value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32872
diff
changeset
|
204 # 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
|
205 # 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
|
206 _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
|
207 |
34882
e9f320a40b44
ui: move request exit handlers to global state
Saurabh Singh <singhsrb@fb.com>
parents:
34858
diff
changeset
|
208 # _reqexithandlers: callbacks run at the end of a request |
e9f320a40b44
ui: move request exit handlers to global state
Saurabh Singh <singhsrb@fb.com>
parents:
34858
diff
changeset
|
209 _reqexithandlers = [] |
e9f320a40b44
ui: move request exit handlers to global state
Saurabh Singh <singhsrb@fb.com>
parents:
34858
diff
changeset
|
210 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
211 |
1559
59b3639df0a9
Convert all classes to new-style classes by deriving them from object.
Eric Hopper <hopper@omnifarious.org>
parents:
1483
diff
changeset
|
212 class ui(object): |
8190
9b8ac5fb7760
ui: kill most users of parentui name and arg, replace with .copy()
Matt Mackall <mpm@selenic.com>
parents:
8189
diff
changeset
|
213 def __init__(self, src=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
|
214 """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
|
215 |
d83ca854fa21
ui: factor out ui.load() to create a ui without loading configs (API)
Yuya Nishihara <yuya@tcha.org>
parents:
30537
diff
changeset
|
216 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
|
217 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
|
218 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
|
219 """ |
21132
350dc24a553d
ui: pushbuffer can now also capture stderr
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20788
diff
changeset
|
220 # _buffers: used for temporary capture of output |
8202 | 221 self._buffers = [] |
27106
6ef17697b03d
ui: track label expansion when creating buffers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27068
diff
changeset
|
222 # 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
|
223 # 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
|
224 self._bufferstates = [] |
27106
6ef17697b03d
ui: track label expansion when creating buffers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27068
diff
changeset
|
225 # 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
|
226 # 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
|
227 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
|
228 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
|
229 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
|
230 self._knownconfig = configitems.coreitems |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
231 self._ocfg = config.config() # overlay |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
232 self._tcfg = config.config() # trusted |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
233 self._ucfg = config.config() # untrusted |
8478
d728f126c1b7
ui: use set instead of dict
Martin Geisler <mg@lazybytes.net>
parents:
8409
diff
changeset
|
234 self._trustusers = set() |
d728f126c1b7
ui: use set instead of dict
Martin Geisler <mg@lazybytes.net>
parents:
8409
diff
changeset
|
235 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
|
236 self.callhooks = True |
29109
e9ce33c642e8
ui: add an instance flag to hold --insecure bit
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29096
diff
changeset
|
237 # Insecure server connections requested. |
e9ce33c642e8
ui: add an instance flag to hold --insecure bit
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29096
diff
changeset
|
238 self.insecureconnections = False |
30976
e92daf156d5c
ui: provide a mechanism to track and log blocked time
Simon Farnsworth <simonfar@fb.com>
parents:
30945
diff
changeset
|
239 # Blocked time |
e92daf156d5c
ui: provide a mechanism to track and log blocked time
Simon Farnsworth <simonfar@fb.com>
parents:
30945
diff
changeset
|
240 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
|
241 # 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
|
242 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
|
243 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
|
244 self._styles = {} |
38526
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
38345
diff
changeset
|
245 self._uninterruptible = False |
45025
24b1a8eb73aa
ui: add option to timestamp status and diagnostic messages
Joerg Sonnenberger <joerg@bec.de>
parents:
44992
diff
changeset
|
246 self.showtimestamp = False |
8136
6b5522cb2ad2
ui: refactor option setting
Matt Mackall <mpm@selenic.com>
parents:
8135
diff
changeset
|
247 |
8190
9b8ac5fb7760
ui: kill most users of parentui name and arg, replace with .copy()
Matt Mackall <mpm@selenic.com>
parents:
8189
diff
changeset
|
248 if src: |
40543
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
249 self._fout = src._fout |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
250 self._ferr = src._ferr |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
251 self._fin = src._fin |
40587
5542bc9125c9
dispatch: pass around ui.fmsg channel
Yuya Nishihara <yuya@tcha.org>
parents:
40578
diff
changeset
|
252 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
|
253 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
|
254 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
|
255 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
|
256 self._loggers = src._loggers.copy() |
30992
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
257 self.pageractive = src.pageractive |
31026
9c827087df38
ui: rename neverpager to disablepager
Augie Fackler <augie@google.com>
parents:
31014
diff
changeset
|
258 self._disablepager = src._disablepager |
32872
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
259 self._tweaked = src._tweaked |
14612 | 260 |
8203 | 261 self._tcfg = src._tcfg.copy() |
262 self._ucfg = src._ucfg.copy() | |
263 self._ocfg = src._ocfg.copy() | |
8201
7cf2b987acd3
ui: trusted_users -> _trustusers, trusted_groups -> _trustgroups
Matt Mackall <mpm@selenic.com>
parents:
8200
diff
changeset
|
264 self._trustusers = src._trustusers.copy() |
7cf2b987acd3
ui: trusted_users -> _trustusers, trusted_groups -> _trustgroups
Matt Mackall <mpm@selenic.com>
parents:
8200
diff
changeset
|
265 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
|
266 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
|
267 self.callhooks = src.callhooks |
29109
e9ce33c642e8
ui: add an instance flag to hold --insecure bit
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29096
diff
changeset
|
268 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
|
269 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
|
270 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
|
271 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
|
272 |
8143
507c49e297e1
ui: simplify init, kill dupconfig
Matt Mackall <mpm@selenic.com>
parents:
8142
diff
changeset
|
273 self.fixconfig() |
29378
fea71f66ebff
url: remember http password database in ui object
liscju <piotr.listkiewicz@gmail.com>
parents:
29366
diff
changeset
|
274 |
fea71f66ebff
url: remember http password database in ui object
liscju <piotr.listkiewicz@gmail.com>
parents:
29366
diff
changeset
|
275 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
|
276 self._blockedtimes = src._blockedtimes |
8143
507c49e297e1
ui: simplify init, kill dupconfig
Matt Mackall <mpm@selenic.com>
parents:
8142
diff
changeset
|
277 else: |
40543
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
278 self._fout = procutil.stdout |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
279 self._ferr = procutil.stderr |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
280 self._fin = procutil.stdin |
40587
5542bc9125c9
dispatch: pass around ui.fmsg channel
Yuya Nishihara <yuya@tcha.org>
parents:
40578
diff
changeset
|
281 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
|
282 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
|
283 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
|
284 self._finoutredirected = False |
40730
55b053af7196
ui: manage logger instances and event filtering by core ui
Yuya Nishihara <yuya@tcha.org>
parents:
40678
diff
changeset
|
285 self._loggers = {} |
30992
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
286 self.pageractive = False |
31026
9c827087df38
ui: rename neverpager to disablepager
Augie Fackler <augie@google.com>
parents:
31014
diff
changeset
|
287 self._disablepager = False |
32872
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
288 self._tweaked = False |
14612 | 289 |
9887
38170eeed18c
ui: add environ property to access os.environ or wsgirequest.environ
Sune Foldager <cryo@cyanite.org>
parents:
9851
diff
changeset
|
290 # 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
|
291 self.environ = encoding.environ |
8222
d30a21594812
more whitespace cleanup and some other style nits
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8220
diff
changeset
|
292 |
30945
8b83b626fb1e
ui: remove urllib2 from being imported early
Kyle Lippincott <spectral@google.com>
parents:
30932
diff
changeset
|
293 self.httppasswordmgrdb = httppasswordmgrdbproxy() |
30976
e92daf156d5c
ui: provide a mechanism to track and log blocked time
Simon Farnsworth <simonfar@fb.com>
parents:
30945
diff
changeset
|
294 self._blockedtimes = collections.defaultdict(int) |
29378
fea71f66ebff
url: remember http password database in ui object
liscju <piotr.listkiewicz@gmail.com>
parents:
29366
diff
changeset
|
295 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
296 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
|
297 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
|
298 self._exportableenviron = self.environ |
da5fa0f13a41
ui: introduce an experimental dict of exportable environment variables
Matt Harbison <matt_harbison@yahoo.com>
parents:
30814
diff
changeset
|
299 else: |
da5fa0f13a41
ui: introduce an experimental dict of exportable environment variables
Matt Harbison <matt_harbison@yahoo.com>
parents:
30814
diff
changeset
|
300 self._exportableenviron = {} |
da5fa0f13a41
ui: introduce an experimental dict of exportable environment variables
Matt Harbison <matt_harbison@yahoo.com>
parents:
30814
diff
changeset
|
301 for k in allowed: |
da5fa0f13a41
ui: introduce an experimental dict of exportable environment variables
Matt Harbison <matt_harbison@yahoo.com>
parents:
30814
diff
changeset
|
302 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
|
303 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
|
304 |
46622
a3dced4b7b04
config: track the "level" of a value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46620
diff
changeset
|
305 def _new_source(self): |
a3dced4b7b04
config: track the "level" of a value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46620
diff
changeset
|
306 self._ocfg.new_source() |
a3dced4b7b04
config: track the "level" of a value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46620
diff
changeset
|
307 self._tcfg.new_source() |
a3dced4b7b04
config: track the "level" of a value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46620
diff
changeset
|
308 self._ucfg.new_source() |
a3dced4b7b04
config: track the "level" of a value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46620
diff
changeset
|
309 |
30559
d83ca854fa21
ui: factor out ui.load() to create a ui without loading configs (API)
Yuya Nishihara <yuya@tcha.org>
parents:
30537
diff
changeset
|
310 @classmethod |
d83ca854fa21
ui: factor out ui.load() to create a ui without loading configs (API)
Yuya Nishihara <yuya@tcha.org>
parents:
30537
diff
changeset
|
311 def load(cls): |
d83ca854fa21
ui: factor out ui.load() to create a ui without loading configs (API)
Yuya Nishihara <yuya@tcha.org>
parents:
30537
diff
changeset
|
312 """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
|
313 u = cls() |
31685
d83e51654c8a
rcutil: let environ override system configs (BC)
Jun Wu <quark@fb.com>
parents:
31683
diff
changeset
|
314 # 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
|
315 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
|
316 if t == b'path': |
31683
00e569a2da97
rcutil: let rccomponents return different types of configs (API)
Jun Wu <quark@fb.com>
parents:
31682
diff
changeset
|
317 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
|
318 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
|
319 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
|
320 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
|
321 u._new_source() |
31685
d83e51654c8a
rcutil: let environ override system configs (BC)
Jun Wu <quark@fb.com>
parents:
31683
diff
changeset
|
322 sections = set() |
d83e51654c8a
rcutil: let environ override system configs (BC)
Jun Wu <quark@fb.com>
parents:
31683
diff
changeset
|
323 for section, name, value, source in f: |
d83e51654c8a
rcutil: let environ override system configs (BC)
Jun Wu <quark@fb.com>
parents:
31683
diff
changeset
|
324 # do not set u._ocfg |
d83e51654c8a
rcutil: let environ override system configs (BC)
Jun Wu <quark@fb.com>
parents:
31683
diff
changeset
|
325 # 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
|
326 u._tcfg.set(section, name, value, source) |
d83e51654c8a
rcutil: let environ override system configs (BC)
Jun Wu <quark@fb.com>
parents:
31683
diff
changeset
|
327 u._ucfg.set(section, name, value, source) |
d83e51654c8a
rcutil: let environ override system configs (BC)
Jun Wu <quark@fb.com>
parents:
31683
diff
changeset
|
328 sections.add(section) |
d83e51654c8a
rcutil: let environ override system configs (BC)
Jun Wu <quark@fb.com>
parents:
31683
diff
changeset
|
329 for section in sections: |
d83e51654c8a
rcutil: let environ override system configs (BC)
Jun Wu <quark@fb.com>
parents:
31683
diff
changeset
|
330 u.fixconfig(section=section) |
31683
00e569a2da97
rcutil: let rccomponents return different types of configs (API)
Jun Wu <quark@fb.com>
parents:
31682
diff
changeset
|
331 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
332 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
|
333 u._maybetweakdefaults() |
46622
a3dced4b7b04
config: track the "level" of a value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46620
diff
changeset
|
334 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
|
335 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
|
336 |
32872
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
337 def _maybetweakdefaults(self): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
338 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
|
339 return |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
340 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
|
341 return |
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
342 |
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
343 # 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
|
344 # 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
|
345 # infinite recursion between setconfig and this method. |
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
346 # |
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
347 # 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
|
348 # avoid this weirdness. |
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
349 self._tweaked = True |
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
350 tmpcfg = config.config() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
351 tmpcfg.parse(b'<tweakdefaults>', tweakrc) |
32872
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
352 for section in tmpcfg: |
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
353 for name, value in tmpcfg.items(section): |
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
354 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
|
355 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
|
356 |
8189
d2899a856f9f
ui: replace parentui mechanism with repo.baseui
Matt Mackall <mpm@selenic.com>
parents:
8187
diff
changeset
|
357 def copy(self): |
8220
6e6ebeb52899
ui: ui.copy() now takes the ui class into account
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
8208
diff
changeset
|
358 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
|
359 |
29366
d269e7db2f55
ui: provide official way to reset internal state per command
Yuya Nishihara <yuya@tcha.org>
parents:
29109
diff
changeset
|
360 def resetstate(self): |
d269e7db2f55
ui: provide official way to reset internal state per command
Yuya Nishihara <yuya@tcha.org>
parents:
29109
diff
changeset
|
361 """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
|
362 if self._progbar: |
d269e7db2f55
ui: provide official way to reset internal state per command
Yuya Nishihara <yuya@tcha.org>
parents:
29109
diff
changeset
|
363 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
|
364 self.httppasswordmgrdb = httppasswordmgrdbproxy() |
29366
d269e7db2f55
ui: provide official way to reset internal state per command
Yuya Nishihara <yuya@tcha.org>
parents:
29109
diff
changeset
|
365 |
30976
e92daf156d5c
ui: provide a mechanism to track and log blocked time
Simon Farnsworth <simonfar@fb.com>
parents:
30945
diff
changeset
|
366 @contextlib.contextmanager |
e92daf156d5c
ui: provide a mechanism to track and log blocked time
Simon Farnsworth <simonfar@fb.com>
parents:
30945
diff
changeset
|
367 def timeblockedsection(self, key): |
30978
fdecd24ca4dc
ui: log time spent blocked on stdio
Simon Farnsworth <simonfar@fb.com>
parents:
30976
diff
changeset
|
368 # 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
|
369 starttime = util.timer() |
e92daf156d5c
ui: provide a mechanism to track and log blocked time
Simon Farnsworth <simonfar@fb.com>
parents:
30945
diff
changeset
|
370 try: |
e92daf156d5c
ui: provide a mechanism to track and log blocked time
Simon Farnsworth <simonfar@fb.com>
parents:
30945
diff
changeset
|
371 yield |
e92daf156d5c
ui: provide a mechanism to track and log blocked time
Simon Farnsworth <simonfar@fb.com>
parents:
30945
diff
changeset
|
372 finally: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
373 self._blockedtimes[key + b'_blocked'] += ( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
374 util.timer() - starttime |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
375 ) * 1000 |
29366
d269e7db2f55
ui: provide official way to reset internal state per command
Yuya Nishihara <yuya@tcha.org>
parents:
29109
diff
changeset
|
376 |
38526
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
38345
diff
changeset
|
377 @contextlib.contextmanager |
41076
8ecb17b7f432
procutil: correct spelling of uninterruptable -> uninterruptible
Kyle Lippincott <spectral@google.com>
parents:
41063
diff
changeset
|
378 def uninterruptible(self): |
38526
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
38345
diff
changeset
|
379 """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
|
380 |
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
38345
diff
changeset
|
381 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
|
382 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
|
383 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
|
384 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
|
385 """ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
386 enabled = self.configbool(b'experimental', b'nointerrupt') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
387 if enabled and self.configbool( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
388 b'experimental', b'nointerrupt-interactiveonly' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
389 ): |
38526
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
38345
diff
changeset
|
390 enabled = self.interactive() |
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
38345
diff
changeset
|
391 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
|
392 # 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
|
393 # 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
|
394 # block, do nothing. |
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
38345
diff
changeset
|
395 yield |
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
38345
diff
changeset
|
396 return |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
397 |
38526
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
38345
diff
changeset
|
398 def warn(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
399 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
|
400 self.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
401 _(b"press ^C again to terminate immediately (dangerous)\n") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
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 return True |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
404 |
41076
8ecb17b7f432
procutil: correct spelling of uninterruptable -> uninterruptible
Kyle Lippincott <spectral@google.com>
parents:
41063
diff
changeset
|
405 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
|
406 try: |
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
38345
diff
changeset
|
407 self._uninterruptible = True |
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
38345
diff
changeset
|
408 yield |
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
38345
diff
changeset
|
409 finally: |
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
38345
diff
changeset
|
410 self._uninterruptible = False |
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
38345
diff
changeset
|
411 |
16135 | 412 def formatter(self, topic, opts): |
32579
012e0da5b759
formatter: add option to redirect output to file object
Yuya Nishihara <yuya@tcha.org>
parents:
32462
diff
changeset
|
413 return formatter.formatter(self, self, topic, opts) |
16135 | 414 |
14859
dccecfaebdd2
ui: rename _is_trusted to _trusted
Matt Mackall <mpm@selenic.com>
parents:
14738
diff
changeset
|
415 def _trusted(self, fp, f): |
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
|
416 st = util.fstat(fp) |
8657
3fa92c618624
posix: do not use fstat in isowner
Martin Geisler <mg@lazybytes.net>
parents:
8656
diff
changeset
|
417 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
|
418 return True |
8141
e40b629bedd1
ui: cleanup _is_trusted a bit
Matt Mackall <mpm@selenic.com>
parents:
8140
diff
changeset
|
419 |
8201
7cf2b987acd3
ui: trusted_users -> _trustusers, trusted_groups -> _trustgroups
Matt Mackall <mpm@selenic.com>
parents:
8200
diff
changeset
|
420 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
|
421 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
|
422 return True |
e40b629bedd1
ui: cleanup _is_trusted a bit
Matt Mackall <mpm@selenic.com>
parents:
8140
diff
changeset
|
423 |
e40b629bedd1
ui: cleanup _is_trusted a bit
Matt Mackall <mpm@selenic.com>
parents:
8140
diff
changeset
|
424 user = util.username(st.st_uid) |
e40b629bedd1
ui: cleanup _is_trusted a bit
Matt Mackall <mpm@selenic.com>
parents:
8140
diff
changeset
|
425 group = util.groupname(st.st_gid) |
e40b629bedd1
ui: cleanup _is_trusted a bit
Matt Mackall <mpm@selenic.com>
parents:
8140
diff
changeset
|
426 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
|
427 return True |
e40b629bedd1
ui: cleanup _is_trusted a bit
Matt Mackall <mpm@selenic.com>
parents:
8140
diff
changeset
|
428 |
8204 | 429 if self._reportuntrusted: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
430 self.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
431 _( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
432 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
|
433 b'user %s, group %s\n' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
434 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
435 % (f, user, group) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
436 ) |
8141
e40b629bedd1
ui: cleanup _is_trusted a bit
Matt Mackall <mpm@selenic.com>
parents:
8140
diff
changeset
|
437 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
|
438 |
44030
5ac0e6f19eb4
ui: refactor `readconfig()` into a form that can consume resources
Matt Harbison <matt_harbison@yahoo.com>
parents:
44021
diff
changeset
|
439 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
|
440 self, name, root=None, trust=False, sections=None, remap=None |
5ac0e6f19eb4
ui: refactor `readconfig()` into a form that can consume resources
Matt Harbison <matt_harbison@yahoo.com>
parents:
44021
diff
changeset
|
441 ): |
5ac0e6f19eb4
ui: refactor `readconfig()` into a form that can consume resources
Matt Harbison <matt_harbison@yahoo.com>
parents:
44021
diff
changeset
|
442 try: |
5ac0e6f19eb4
ui: refactor `readconfig()` into a form that can consume resources
Matt Harbison <matt_harbison@yahoo.com>
parents:
44021
diff
changeset
|
443 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
|
444 except IOError: |
5ac0e6f19eb4
ui: refactor `readconfig()` into a form that can consume resources
Matt Harbison <matt_harbison@yahoo.com>
parents:
44021
diff
changeset
|
445 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
|
446 return |
5ac0e6f19eb4
ui: refactor `readconfig()` into a form that can consume resources
Matt Harbison <matt_harbison@yahoo.com>
parents:
44021
diff
changeset
|
447 raise |
5ac0e6f19eb4
ui: refactor `readconfig()` into a form that can consume resources
Matt Harbison <matt_harbison@yahoo.com>
parents:
44021
diff
changeset
|
448 |
5ac0e6f19eb4
ui: refactor `readconfig()` into a form that can consume resources
Matt Harbison <matt_harbison@yahoo.com>
parents:
44021
diff
changeset
|
449 self._readconfig( |
5ac0e6f19eb4
ui: refactor `readconfig()` into a form that can consume resources
Matt Harbison <matt_harbison@yahoo.com>
parents:
44021
diff
changeset
|
450 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
|
451 ) |
5ac0e6f19eb4
ui: refactor `readconfig()` into a form that can consume resources
Matt Harbison <matt_harbison@yahoo.com>
parents:
44021
diff
changeset
|
452 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
453 def readconfig( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
454 self, filename, root=None, trust=False, sections=None, remap=None |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
455 ): |
8142
912bfef12ba6
ui: fold readsections into readconfig
Matt Mackall <mpm@selenic.com>
parents:
8141
diff
changeset
|
456 try: |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43377
diff
changeset
|
457 fp = open(filename, 'rb') |
8142
912bfef12ba6
ui: fold readsections into readconfig
Matt Mackall <mpm@selenic.com>
parents:
8141
diff
changeset
|
458 except IOError: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
459 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
|
460 return |
912bfef12ba6
ui: fold readsections into readconfig
Matt Mackall <mpm@selenic.com>
parents:
8141
diff
changeset
|
461 raise |
8139 | 462 |
44030
5ac0e6f19eb4
ui: refactor `readconfig()` into a form that can consume resources
Matt Harbison <matt_harbison@yahoo.com>
parents:
44021
diff
changeset
|
463 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
|
464 |
5ac0e6f19eb4
ui: refactor `readconfig()` into a form that can consume resources
Matt Harbison <matt_harbison@yahoo.com>
parents:
44021
diff
changeset
|
465 def _readconfig( |
5ac0e6f19eb4
ui: refactor `readconfig()` into a form that can consume resources
Matt Harbison <matt_harbison@yahoo.com>
parents:
44021
diff
changeset
|
466 self, filename, fp, root=None, trust=False, sections=None, remap=None |
5ac0e6f19eb4
ui: refactor `readconfig()` into a form that can consume resources
Matt Harbison <matt_harbison@yahoo.com>
parents:
44021
diff
changeset
|
467 ): |
43910
c41ed5d4f770
config: close file even if we fail to read it
Martin von Zweigbergk <martinvonz@google.com>
parents:
43909
diff
changeset
|
468 with fp: |
c41ed5d4f770
config: close file even if we fail to read it
Martin von Zweigbergk <martinvonz@google.com>
parents:
43909
diff
changeset
|
469 cfg = config.config() |
c41ed5d4f770
config: close file even if we fail to read it
Martin von Zweigbergk <martinvonz@google.com>
parents:
43909
diff
changeset
|
470 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
|
471 |
43910
c41ed5d4f770
config: close file even if we fail to read it
Martin von Zweigbergk <martinvonz@google.com>
parents:
43909
diff
changeset
|
472 try: |
c41ed5d4f770
config: close file even if we fail to read it
Martin von Zweigbergk <martinvonz@google.com>
parents:
43909
diff
changeset
|
473 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
|
474 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
|
475 if trusted: |
c41ed5d4f770
config: close file even if we fail to read it
Martin von Zweigbergk <martinvonz@google.com>
parents:
43909
diff
changeset
|
476 raise |
45889
e5a0efd26f7a
config: clean up message about ignored untrusted config
Martin von Zweigbergk <martinvonz@google.com>
parents:
45877
diff
changeset
|
477 self.warn( |
e5a0efd26f7a
config: clean up message about ignored untrusted config
Martin von Zweigbergk <martinvonz@google.com>
parents:
45877
diff
changeset
|
478 _(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
|
479 ) |
3552
9b52239dc740
save settings from untrusted config files in a separate configparser
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3551
diff
changeset
|
480 |
44126
e2278581b1c6
config: add a function to insert non-file based, but overridable settings
Matt Harbison <matt_harbison@yahoo.com>
parents:
44031
diff
changeset
|
481 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
|
482 |
e2278581b1c6
config: add a function to insert non-file based, but overridable settings
Matt Harbison <matt_harbison@yahoo.com>
parents:
44031
diff
changeset
|
483 def applyconfig(self, configitems, source=b"", root=None): |
e2278581b1c6
config: add a function to insert non-file based, but overridable settings
Matt Harbison <matt_harbison@yahoo.com>
parents:
44031
diff
changeset
|
484 """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
|
485 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
|
486 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
|
487 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
|
488 |
e2278581b1c6
config: add a function to insert non-file based, but overridable settings
Matt Harbison <matt_harbison@yahoo.com>
parents:
44031
diff
changeset
|
489 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
|
490 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
|
491 """ |
e2278581b1c6
config: add a function to insert non-file based, but overridable settings
Matt Harbison <matt_harbison@yahoo.com>
parents:
44031
diff
changeset
|
492 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
|
493 |
e2278581b1c6
config: add a function to insert non-file based, but overridable settings
Matt Harbison <matt_harbison@yahoo.com>
parents:
44031
diff
changeset
|
494 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
|
495 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
|
496 |
e2278581b1c6
config: add a function to insert non-file based, but overridable settings
Matt Harbison <matt_harbison@yahoo.com>
parents:
44031
diff
changeset
|
497 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
|
498 |
e2278581b1c6
config: add a function to insert non-file based, but overridable settings
Matt Harbison <matt_harbison@yahoo.com>
parents:
44031
diff
changeset
|
499 def _applyconfig(self, cfg, trusted, root): |
10455
40dfd46d098f
ui: add HGPLAIN environment variable for easier scripting
Brodie Rao <me+hg@dackz.net>
parents:
10426
diff
changeset
|
500 if self.plain(): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
501 for k in ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
502 b'debug', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
503 b'fallbackencoding', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
504 b'quiet', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
505 b'slash', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
506 b'logtemplate', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
507 b'message-output', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
508 b'statuscopies', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
509 b'style', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
510 b'traceback', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
511 b'verbose', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
512 ): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
513 if k in cfg[b'ui']: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
514 del cfg[b'ui'][k] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
515 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
|
516 del cfg[b'defaults'][k] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
517 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
|
518 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
|
519 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
|
520 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
|
521 # 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
|
522 if self.plain(b'alias'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
523 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
|
524 del cfg[b'alias'][k] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
525 if self.plain(b'revsetalias'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
526 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
|
527 del cfg[b'revsetalias'][k] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
528 if self.plain(b'templatealias'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
529 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
|
530 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
|
531 |
8142
912bfef12ba6
ui: fold readsections into readconfig
Matt Mackall <mpm@selenic.com>
parents:
8141
diff
changeset
|
532 if trusted: |
8203 | 533 self._tcfg.update(cfg) |
534 self._tcfg.update(self._ocfg) | |
535 self._ucfg.update(cfg) | |
536 self._ucfg.update(self._ocfg) | |
8139 | 537 |
3347
bce7c1b4c1c8
ui.py: normalize settings every time the configuration changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3346
diff
changeset
|
538 if root is None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
539 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
|
540 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
|
541 |
12764
ad2506f097d3
ui: only fix config if the relevant section has changed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12689
diff
changeset
|
542 def fixconfig(self, root=None, section=None): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
543 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
|
544 # expand vars and ~ |
ad2506f097d3
ui: only fix config if the relevant section has changed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12689
diff
changeset
|
545 # 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
|
546 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
|
547 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
|
548 for n, p in c.items(b'paths'): |
29412
b62bce819d0c
ui: don't fixup [paths] sub-options
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29378
diff
changeset
|
549 # Ignore sub-options. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
550 if b':' in n: |
29412
b62bce819d0c
ui: don't fixup [paths] sub-options
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29378
diff
changeset
|
551 continue |
12764
ad2506f097d3
ui: only fix config if the relevant section has changed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12689
diff
changeset
|
552 if not p: |
ad2506f097d3
ui: only fix config if the relevant section has changed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12689
diff
changeset
|
553 continue |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
554 if b'%%' in p: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
555 s = self.configsource(b'paths', n) or b'none' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
556 self.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
557 _(b"(deprecated '%%' in path %s=%s from %s)\n") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
558 % (n, p, s) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
559 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
560 p = p.replace(b'%%', b'%') |
12764
ad2506f097d3
ui: only fix config if the relevant section has changed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12689
diff
changeset
|
561 p = util.expandpath(p) |
46907
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
562 if not urlutil.hasscheme(p) and not os.path.isabs(p): |
12764
ad2506f097d3
ui: only fix config if the relevant section has changed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12689
diff
changeset
|
563 p = os.path.normpath(os.path.join(root, p)) |
46620
7621ab4005bf
config: use a new `alter` method in `fixconfig`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46487
diff
changeset
|
564 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
|
565 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
566 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
|
567 # 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
|
568 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
|
569 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
|
570 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
|
571 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
|
572 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
|
573 self.quiet = self.verbose = False |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
574 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
|
575 b"ui", b"report_untrusted" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
576 ) |
45025
24b1a8eb73aa
ui: add option to timestamp status and diagnostic messages
Joerg Sonnenberger <joerg@bec.de>
parents:
44992
diff
changeset
|
577 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
|
578 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
|
579 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
|
580 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
581 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
|
582 # update trust information |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
583 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
|
584 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
|
585 |
40994
ab92e2111408
ui: install logger that sends debug.extensions messages to stderr
Yuya Nishihara <yuya@tcha.org>
parents:
40761
diff
changeset
|
586 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
|
587 tracked = set() |
ab92e2111408
ui: install logger that sends debug.extensions messages to stderr
Yuya Nishihara <yuya@tcha.org>
parents:
40761
diff
changeset
|
588 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
|
589 tracked.add(b'extension') |
ab92e2111408
ui: install logger that sends debug.extensions messages to stderr
Yuya Nishihara <yuya@tcha.org>
parents:
40761
diff
changeset
|
590 if tracked: |
ab92e2111408
ui: install logger that sends debug.extensions messages to stderr
Yuya Nishihara <yuya@tcha.org>
parents:
40761
diff
changeset
|
591 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
|
592 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
|
593 |
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
|
594 def backupconfig(self, section, item): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
595 return ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
596 self._ocfg.backup(section, item), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
597 self._tcfg.backup(section, item), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
598 self._ucfg.backup(section, item), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
599 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
600 |
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
|
601 def restoreconfig(self, data): |
69e792cf7851
config: have a way to backup and restore value in config
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15407
diff
changeset
|
602 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
|
603 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
|
604 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
|
605 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
606 def setconfig(self, section, name, value, source=b''): |
20787
be179da10d5f
config: backout 77f1f206e135 - 743daa601445 removed the only use of overlay
Mads Kiilerich <madski@unity3d.com>
parents:
20606
diff
changeset
|
607 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
|
608 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
|
609 self.fixconfig(section=section) |
32872
9fcb6df413c9
ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com>
parents:
32579
diff
changeset
|
610 self._maybetweakdefaults() |
960 | 611 |
8199 | 612 def _data(self, untrusted): |
8203 | 613 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
|
614 |
8182
b97abc7c1135
showconfig: show source file and line with --debug
Matt Mackall <mpm@selenic.com>
parents:
8175
diff
changeset
|
615 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
|
616 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
|
617 |
32958
4a3f1d362e5f
config: explicitly track the use of the standard default value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32872
diff
changeset
|
618 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
|
619 """return the plain string version of a config""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
620 value = self._config( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
621 section, name, default=default, untrusted=untrusted |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
622 ) |
33058
1aa05203f7f6
config: extract the core config logic into a private method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32989
diff
changeset
|
623 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
|
624 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
|
625 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
|
626 |
1aa05203f7f6
config: extract the core config logic into a private method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32989
diff
changeset
|
627 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
|
628 value = itemdefault = default |
33329
e714159860fd
configitems: add alias support in config
David Demelier <demelier.david@gmail.com>
parents:
33150
diff
changeset
|
629 item = self._knownconfig.get(section, {}).get(name) |
e714159860fd
configitems: add alias support in config
David Demelier <demelier.david@gmail.com>
parents:
33150
diff
changeset
|
630 alternates = [(section, name)] |
e714159860fd
configitems: add alias support in config
David Demelier <demelier.david@gmail.com>
parents:
33150
diff
changeset
|
631 |
e714159860fd
configitems: add alias support in config
David Demelier <demelier.david@gmail.com>
parents:
33150
diff
changeset
|
632 if item is not None: |
e714159860fd
configitems: add alias support in config
David Demelier <demelier.david@gmail.com>
parents:
33150
diff
changeset
|
633 alternates.extend(item.alias) |
34947
ff2110eadbfa
configitems: relax warning about unwanted default value
Yuya Nishihara <yuya@tcha.org>
parents:
34882
diff
changeset
|
634 if callable(item.default): |
ff2110eadbfa
configitems: relax warning about unwanted default value
Yuya Nishihara <yuya@tcha.org>
parents:
34882
diff
changeset
|
635 itemdefault = item.default() |
ff2110eadbfa
configitems: relax warning about unwanted default value
Yuya Nishihara <yuya@tcha.org>
parents:
34882
diff
changeset
|
636 else: |
ff2110eadbfa
configitems: relax warning about unwanted default value
Yuya Nishihara <yuya@tcha.org>
parents:
34882
diff
changeset
|
637 itemdefault = item.default |
34858
85a2db47ad50
configitems: adds a developer warning when accessing undeclared configuration
Boris Feld <boris.feld@octobus.net>
parents:
34849
diff
changeset
|
638 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
639 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
|
640 msg %= (section, name) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
641 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
|
642 |
e714159860fd
configitems: add alias support in config
David Demelier <demelier.david@gmail.com>
parents:
33150
diff
changeset
|
643 if default is _unset: |
e714159860fd
configitems: add alias support in config
David Demelier <demelier.david@gmail.com>
parents:
33150
diff
changeset
|
644 if item is None: |
e714159860fd
configitems: add alias support in config
David Demelier <demelier.david@gmail.com>
parents:
33150
diff
changeset
|
645 value = default |
33471
d74141ccfd8b
configitems: handle case were the default value is not static
Boris Feld <boris.feld@octobus.net>
parents:
33329
diff
changeset
|
646 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
|
647 value = None |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
648 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
|
649 msg %= (section, name) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
650 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
|
651 else: |
34947
ff2110eadbfa
configitems: relax warning about unwanted default value
Yuya Nishihara <yuya@tcha.org>
parents:
34882
diff
changeset
|
652 value = itemdefault |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
653 elif ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
654 item is not None |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
655 and item.default is not configitems.dynamicdefault |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
656 and default != itemdefault |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
657 ): |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
658 msg = ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
659 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
|
660 b"config item: '%s.%s' '%s'" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
661 ) |
36126
8f5c7f906f9b
ui: use pycompat.bytestr() to get a bytes-repr of config default
Augie Fackler <augie@google.com>
parents:
35961
diff
changeset
|
662 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
|
663 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
|
664 |
46623
b91a695b3b08
config: use level to properly deal with value priority
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46622
diff
changeset
|
665 candidates = [] |
b91a695b3b08
config: use level to properly deal with value priority
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46622
diff
changeset
|
666 config = self._data(untrusted) |
33329
e714159860fd
configitems: add alias support in config
David Demelier <demelier.david@gmail.com>
parents:
33150
diff
changeset
|
667 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
|
668 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
|
669 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
|
670 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
|
671 if candidates: |
b91a695b3b08
config: use level to properly deal with value priority
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46622
diff
changeset
|
672 |
b91a695b3b08
config: use level to properly deal with value priority
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46622
diff
changeset
|
673 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
|
674 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
|
675 |
b91a695b3b08
config: use level to properly deal with value priority
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46622
diff
changeset
|
676 value = max(candidates, key=level)[2] |
15035
cc669e4fec95
ui: allow alternatives for config options
Matt Mackall <mpm@selenic.com>
parents:
15002
diff
changeset
|
677 |
8204 | 678 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
|
679 for s, n in alternates: |
e714159860fd
configitems: add alias support in config
David Demelier <demelier.david@gmail.com>
parents:
33150
diff
changeset
|
680 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
|
681 if uvalue is not None and uvalue != value: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
682 self.debug( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
683 b"ignoring untrusted configuration option " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
684 b"%s.%s = %s\n" % (s, n, uvalue) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
685 ) |
3552
9b52239dc740
save settings from untrusted config files in a separate configparser
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3551
diff
changeset
|
686 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
|
687 |
46267
b9b37418ac7e
ui: add a "config_default" method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46030
diff
changeset
|
688 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
|
689 """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
|
690 |
b9b37418ac7e
ui: add a "config_default" method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46030
diff
changeset
|
691 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
|
692 callable was not called. |
b9b37418ac7e
ui: add a "config_default" method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46030
diff
changeset
|
693 """ |
b9b37418ac7e
ui: add a "config_default" method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46030
diff
changeset
|
694 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
|
695 |
b9b37418ac7e
ui: add a "config_default" method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46030
diff
changeset
|
696 if item is None: |
b9b37418ac7e
ui: add a "config_default" method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46030
diff
changeset
|
697 raise KeyError((section, name)) |
b9b37418ac7e
ui: add a "config_default" method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46030
diff
changeset
|
698 return item.default |
b9b37418ac7e
ui: add a "config_default" method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46030
diff
changeset
|
699 |
32967
cd2fd1765654
config: use the new '_unset' value for 'configsuboptions'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32966
diff
changeset
|
700 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
|
701 """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
|
702 |
dccbebcff075
ui: add method to return option and all sub-options
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27153
diff
changeset
|
703 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
|
704 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
|
705 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
|
706 |
dccbebcff075
ui: add method to return option and all sub-options
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27153
diff
changeset
|
707 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
|
708 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
|
709 """ |
32966
61a8321c9962
config: use the 'config' method in 'configsuboptions'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32965
diff
changeset
|
710 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
|
711 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
|
712 sub = {} |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
713 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
|
714 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
|
715 if k.startswith(prefix): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
716 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
|
717 |
dccbebcff075
ui: add method to return option and all sub-options
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27153
diff
changeset
|
718 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
|
719 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
|
720 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
|
721 if uvalue is not None and uvalue != v: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
722 self.debug( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
723 b'ignoring untrusted configuration option ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
724 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
|
725 ) |
27252
dccbebcff075
ui: add method to return option and all sub-options
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27153
diff
changeset
|
726 |
dccbebcff075
ui: add method to return option and all sub-options
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27153
diff
changeset
|
727 return main, sub |
dccbebcff075
ui: add method to return option and all sub-options
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27153
diff
changeset
|
728 |
32965
36e16797df32
config: use the new '_unset' value for 'configpath'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32964
diff
changeset
|
729 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
|
730 """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
|
731 file""" |
13238 | 732 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
|
733 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
|
734 return None |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
735 if not os.path.isabs(v) or b"://" not in v: |
13238 | 736 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
|
737 if b':' in src: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
738 base = os.path.dirname(src.rsplit(b':')[0]) |
13238 | 739 v = os.path.join(base, os.path.expanduser(v)) |
740 return v | |
741 | |
32959
b39dafe681df
config: use the new '_unset' value for 'configbool'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32958
diff
changeset
|
742 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
|
743 """parse a configuration element as a boolean |
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
744 |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
745 >>> 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
|
746 >>> 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
|
747 >>> u.configbool(s, b'true') |
14171
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
748 True |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
749 >>> 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
|
750 >>> u.configbool(s, b'false') |
14171
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
751 False |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
752 >>> u.configbool(s, b'unknown') |
14171
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
753 False |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
754 >>> u.configbool(s, b'unknown', True) |
14171
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
755 True |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
756 >>> 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
|
757 >>> u.configbool(s, b'invalid') |
14171
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
758 Traceback (most recent call last): |
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
759 ... |
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
760 ConfigError: foo.invalid is not a boolean ('somevalue') |
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
761 """ |
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
762 |
33059
1dc2ffe0123b
config: use '_config' within 'configbool'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33058
diff
changeset
|
763 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
|
764 if v is None: |
33059
1dc2ffe0123b
config: use '_config' within 'configbool'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33058
diff
changeset
|
765 return v |
1dc2ffe0123b
config: use '_config' within 'configbool'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33058
diff
changeset
|
766 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
|
767 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
|
768 return False |
8144
fca54469480e
ui: introduce new config parser
Matt Mackall <mpm@selenic.com>
parents:
8143
diff
changeset
|
769 return default |
10243
cd3e5c47d663
ui: just return it if it's already a bool
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
10220
diff
changeset
|
770 if isinstance(v, bool): |
cd3e5c47d663
ui: just return it if it's already a bool
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
10220
diff
changeset
|
771 return v |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36910
diff
changeset
|
772 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
|
773 if b is None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
774 raise error.ConfigError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
775 _(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
|
776 ) |
12087
a88a4720c2f0
parsebool: create new function and use it for config parsing
Augie Fackler <durin42@gmail.com>
parents:
11984
diff
changeset
|
777 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
|
778 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
779 def configwith( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
780 self, convert, section, name, default=_unset, desc=None, untrusted=False |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
781 ): |
30926
120682fce099
ui: add a configwith method
Bryan O'Sullivan <bryano@fb.com>
parents:
30925
diff
changeset
|
782 """parse a configuration element with a conversion function |
120682fce099
ui: add a configwith method
Bryan O'Sullivan <bryano@fb.com>
parents:
30925
diff
changeset
|
783 |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
784 >>> 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
|
785 >>> 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
|
786 >>> u.configwith(float, s, b'float1') |
30926
120682fce099
ui: add a configwith method
Bryan O'Sullivan <bryano@fb.com>
parents:
30925
diff
changeset
|
787 42.0 |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
788 >>> 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
|
789 >>> u.configwith(float, s, b'float2') |
30932 | 790 -4.25 |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
791 >>> 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
|
792 7.0 |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
793 >>> 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
|
794 >>> u.configwith(float, s, b'invalid') |
30926
120682fce099
ui: add a configwith method
Bryan O'Sullivan <bryano@fb.com>
parents:
30925
diff
changeset
|
795 Traceback (most recent call last): |
120682fce099
ui: add a configwith method
Bryan O'Sullivan <bryano@fb.com>
parents:
30925
diff
changeset
|
796 ... |
120682fce099
ui: add a configwith method
Bryan O'Sullivan <bryano@fb.com>
parents:
30925
diff
changeset
|
797 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
|
798 >>> 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
|
799 Traceback (most recent call last): |
120682fce099
ui: add a configwith method
Bryan O'Sullivan <bryano@fb.com>
parents:
30925
diff
changeset
|
800 ... |
120682fce099
ui: add a configwith method
Bryan O'Sullivan <bryano@fb.com>
parents:
30925
diff
changeset
|
801 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
|
802 """ |
120682fce099
ui: add a configwith method
Bryan O'Sullivan <bryano@fb.com>
parents:
30925
diff
changeset
|
803 |
32960
6ff6eb33f353
config: use the new '_unset' value for 'configwith'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32959
diff
changeset
|
804 v = self.config(section, name, default, untrusted) |
30926
120682fce099
ui: add a configwith method
Bryan O'Sullivan <bryano@fb.com>
parents:
30925
diff
changeset
|
805 if v is None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
806 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
|
807 try: |
120682fce099
ui: add a configwith method
Bryan O'Sullivan <bryano@fb.com>
parents:
30925
diff
changeset
|
808 return convert(v) |
32462
bb18728ea617
util: raise ParseError when parsing dates (BC)
Boris Feld <boris.feld@octobus.net>
parents:
32449
diff
changeset
|
809 except (ValueError, error.ParseError): |
30926
120682fce099
ui: add a configwith method
Bryan O'Sullivan <bryano@fb.com>
parents:
30925
diff
changeset
|
810 if desc is None: |
34208
0a2fd3bfc704
py3: convert function name to bytes in ui.configwith()
Yuya Nishihara <yuya@tcha.org>
parents:
34131
diff
changeset
|
811 desc = pycompat.sysbytes(convert.__name__) |
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 valid %s ('%s')") % (section, name, desc, v) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
814 ) |
30926
120682fce099
ui: add a configwith method
Bryan O'Sullivan <bryano@fb.com>
parents:
30925
diff
changeset
|
815 |
32961
24111157f967
config: use the new '_unset' value for 'configint'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32960
diff
changeset
|
816 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
|
817 """parse a configuration element as an integer |
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
818 |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
819 >>> 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
|
820 >>> 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
|
821 >>> u.configint(s, b'int1') |
14171
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
822 42 |
34131
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'int2', b'-42') |
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
824 >>> u.configint(s, b'int2') |
14171
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
825 -42 |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
826 >>> u.configint(s, b'unknown', 7) |
14171
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
827 7 |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
828 >>> 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
|
829 >>> u.configint(s, b'invalid') |
14171
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
830 Traceback (most recent call last): |
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
831 ... |
30927
8fa3ab6221b9
ui: rewrite configint in terms of configwith
Bryan O'Sullivan <bryano@fb.com>
parents:
30926
diff
changeset
|
832 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
|
833 """ |
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
834 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
835 return self.configwith( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
836 int, section, name, default, b'integer', untrusted |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
837 ) |
14171
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
838 |
32962
0bf986cfa82b
config: use the new '_unset' value for 'configbytes'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32961
diff
changeset
|
839 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
|
840 """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
|
841 |
2c4cd1c42365
ui: add a configbytes method, for space configuration
Bryan O'Sullivan <bryano@fb.com>
parents:
18966
diff
changeset
|
842 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
|
843 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
|
844 |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
845 >>> 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
|
846 >>> 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
|
847 >>> 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
|
848 42 |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
849 >>> 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
|
850 >>> 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
|
851 43520 |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
852 >>> 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
|
853 7340032 |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
854 >>> 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
|
855 >>> 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
|
856 Traceback (most recent call last): |
2c4cd1c42365
ui: add a configbytes method, for space configuration
Bryan O'Sullivan <bryano@fb.com>
parents:
18966
diff
changeset
|
857 ... |
2c4cd1c42365
ui: add a configbytes method, for space configuration
Bryan O'Sullivan <bryano@fb.com>
parents:
18966
diff
changeset
|
858 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
|
859 """ |
2c4cd1c42365
ui: add a configbytes method, for space configuration
Bryan O'Sullivan <bryano@fb.com>
parents:
18966
diff
changeset
|
860 |
33060
e70cbae4c4e6
config: use '_config' within 'configbytes'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33059
diff
changeset
|
861 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
|
862 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
|
863 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
|
864 default = 0 |
19195
9311cd5c09ed
ui: use util.sizetoint in configbytes
Bryan O'Sullivan <bryano@fb.com>
parents:
19085
diff
changeset
|
865 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
|
866 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
|
867 return value |
19065
2c4cd1c42365
ui: add a configbytes method, for space configuration
Bryan O'Sullivan <bryano@fb.com>
parents:
18966
diff
changeset
|
868 try: |
19195
9311cd5c09ed
ui: use util.sizetoint in configbytes
Bryan O'Sullivan <bryano@fb.com>
parents:
19085
diff
changeset
|
869 return util.sizetoint(value) |
9311cd5c09ed
ui: use util.sizetoint in configbytes
Bryan O'Sullivan <bryano@fb.com>
parents:
19085
diff
changeset
|
870 except error.ParseError: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
871 raise error.ConfigError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
872 _(b"%s.%s is not a byte quantity ('%s')") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
873 % (section, name, value) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
874 ) |
19065
2c4cd1c42365
ui: add a configbytes method, for space configuration
Bryan O'Sullivan <bryano@fb.com>
parents:
18966
diff
changeset
|
875 |
32963
88b3a38d39e3
config: use the new '_unset' value for 'configlist'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32962
diff
changeset
|
876 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
|
877 """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
|
878 strings |
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
879 |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
880 >>> 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
|
881 >>> 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
|
882 >>> u.configlist(s, b'list1') |
14171
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
883 ['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
|
884 >>> 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
|
885 >>> 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
|
886 ['this', 'is', 'a small', 'test'] |
14171
fa2b596db182
ui: add configint function and tests
Sune Foldager <cryo@cyanite.org>
parents:
14076
diff
changeset
|
887 """ |
31481
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31479
diff
changeset
|
888 # default is not always a list |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
889 v = self.configwith( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
890 config.parselist, section, name, default, b'list', untrusted |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
891 ) |
32963
88b3a38d39e3
config: use the new '_unset' value for 'configlist'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32962
diff
changeset
|
892 if isinstance(v, bytes): |
88b3a38d39e3
config: use the new '_unset' value for 'configlist'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32962
diff
changeset
|
893 return config.parselist(v) |
88b3a38d39e3
config: use the new '_unset' value for 'configlist'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32962
diff
changeset
|
894 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
|
895 return [] |
88b3a38d39e3
config: use the new '_unset' value for 'configlist'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32962
diff
changeset
|
896 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
|
897 |
32964
6599b7372387
config: use the new '_unset' value for 'configdate'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32963
diff
changeset
|
898 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
|
899 """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
|
900 |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
901 >>> 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
|
902 >>> 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
|
903 >>> 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
|
904 (0, 0) |
420e93b0d9dc
ui: add the possiblity to get a date config field
Boris Feld <boris.feld@octobus.net>
parents:
32105
diff
changeset
|
905 """ |
420e93b0d9dc
ui: add the possiblity to get a date config field
Boris Feld <boris.feld@octobus.net>
parents:
32105
diff
changeset
|
906 if self.config(section, name, default, untrusted): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
907 return self.configwith( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
908 dateutil.parsedate, section, name, default, b'date', untrusted |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
909 ) |
32964
6599b7372387
config: use the new '_unset' value for 'configdate'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32963
diff
changeset
|
910 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
|
911 return None |
32408
420e93b0d9dc
ui: add the possiblity to get a date config field
Boris Feld <boris.feld@octobus.net>
parents:
32105
diff
changeset
|
912 return default |
420e93b0d9dc
ui: add the possiblity to get a date config field
Boris Feld <boris.feld@octobus.net>
parents:
32105
diff
changeset
|
913 |
42672
51a2e3102db2
config: add defaultvalue template keyword
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42561
diff
changeset
|
914 def configdefault(self, section, name): |
51a2e3102db2
config: add defaultvalue template keyword
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42561
diff
changeset
|
915 """returns the default value of the config item""" |
51a2e3102db2
config: add defaultvalue template keyword
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42561
diff
changeset
|
916 item = self._knownconfig.get(section, {}).get(name) |
51a2e3102db2
config: add defaultvalue template keyword
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42561
diff
changeset
|
917 itemdefault = None |
51a2e3102db2
config: add defaultvalue template keyword
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42561
diff
changeset
|
918 if item is not None: |
51a2e3102db2
config: add defaultvalue template keyword
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42561
diff
changeset
|
919 if callable(item.default): |
51a2e3102db2
config: add defaultvalue template keyword
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42561
diff
changeset
|
920 itemdefault = item.default() |
51a2e3102db2
config: add defaultvalue template keyword
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42561
diff
changeset
|
921 else: |
51a2e3102db2
config: add defaultvalue template keyword
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42561
diff
changeset
|
922 itemdefault = item.default |
51a2e3102db2
config: add defaultvalue template keyword
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42561
diff
changeset
|
923 return itemdefault |
51a2e3102db2
config: add defaultvalue template keyword
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42561
diff
changeset
|
924 |
27696
e70c97cc9243
config: add hasconfig method and supporting plumbing
Bryan O'Sullivan <bos@serpentine.com>
parents:
27563
diff
changeset
|
925 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
|
926 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
|
927 |
4487
1b5b98837bb5
ui: Rename has_config to has_section.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4258
diff
changeset
|
928 def has_section(self, section, untrusted=False): |
2343
af81d8770620
add ui.has_config method.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2335
diff
changeset
|
929 '''tell whether section exists in config.''' |
8199 | 930 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
|
931 |
27253
f43988e5954c
ui: optionally ignore sub-options from configitems()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27252
diff
changeset
|
932 def configitems(self, section, untrusted=False, ignoresub=False): |
8199 | 933 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
|
934 if ignoresub: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
935 items = [i for i in items if b':' not in i[0]] |
8204 | 936 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
|
937 for k, v in self._ucfg.items(section): |
8203 | 938 if self._tcfg.get(section, k) != v: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
939 self.debug( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
940 b"ignoring untrusted configuration option " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
941 b"%s.%s = %s\n" % (section, k, v) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
942 ) |
8144
fca54469480e
ui: introduce new config parser
Matt Mackall <mpm@selenic.com>
parents:
8143
diff
changeset
|
943 return items |
285 | 944 |
3552
9b52239dc740
save settings from untrusted config files in a separate configparser
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3551
diff
changeset
|
945 def walkconfig(self, untrusted=False): |
8203 | 946 cfg = self._data(untrusted) |
947 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
|
948 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
|
949 yield section, name, value |
1028
25e7ea0f2cff
Add commands.debugconfig.
Bryan O'Sullivan <bos@serpentine.com>
parents:
981
diff
changeset
|
950 |
14372
be0daa0eeb3e
ui: test plain mode against exceptions
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
14171
diff
changeset
|
951 def plain(self, feature=None): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
952 """is plain mode active? |
11325
22a737306ba5
ui: document the formatted(), interactive() & plain() functions.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11324
diff
changeset
|
953 |
13849
9f97de157aad
HGPLAIN: allow exceptions to plain mode, like i18n, via HGPLAINEXCEPT
Brodie Rao <brodie@bitheap.org>
parents:
13827
diff
changeset
|
954 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
|
955 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
|
956 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
|
957 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
|
958 |
9f97de157aad
HGPLAIN: allow exceptions to plain mode, like i18n, via HGPLAINEXCEPT
Brodie Rao <brodie@bitheap.org>
parents:
13827
diff
changeset
|
959 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
|
960 `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
|
961 |
14372
be0daa0eeb3e
ui: test plain mode against exceptions
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
14171
diff
changeset
|
962 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
|
963 - 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
|
964 - 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
|
965 - True otherwise |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
966 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
967 if ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
968 b'HGPLAIN' not in encoding.environ |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
969 and b'HGPLAINEXCEPT' not in encoding.environ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
970 ): |
13849
9f97de157aad
HGPLAIN: allow exceptions to plain mode, like i18n, via HGPLAINEXCEPT
Brodie Rao <brodie@bitheap.org>
parents:
13827
diff
changeset
|
971 return False |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
972 exceptions = ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
973 encoding.environ.get(b'HGPLAINEXCEPT', b'').strip().split(b',') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
974 ) |
35170
c9740b69b9b7
dispatch: add HGPLAIN=+strictflags to restrict early parsing of global options
Yuya Nishihara <yuya@tcha.org>
parents:
34947
diff
changeset
|
975 # 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
|
976 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
|
977 b',' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
978 ): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
979 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
|
980 if feature and exceptions: |
be0daa0eeb3e
ui: test plain mode against exceptions
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
14171
diff
changeset
|
981 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
|
982 return True |
10455
40dfd46d098f
ui: add HGPLAIN environment variable for easier scripting
Brodie Rao <me+hg@dackz.net>
parents:
10426
diff
changeset
|
983 |
34849
9f2891fb426c
ui: add the possibility to returns None as username in ui
Boris Feld <boris.feld@octobus.net>
parents:
34707
diff
changeset
|
984 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
|
985 """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
|
986 |
c577689006fa
Adapted behaviour of ui.username() to documentation and mention it explicitly:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1984
diff
changeset
|
987 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
|
988 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
|
989 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
|
990 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
|
991 ($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
|
992 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
|
993 """ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
994 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
|
995 if user is None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
996 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
|
997 if user is not None: |
d6dbd5e4ee72
ui.username(): expand environment variables in username configuration value.
Chad Dombrova <chadrik@gmail.com>
parents:
11036
diff
changeset
|
998 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
|
999 if user is None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1000 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
|
1001 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
|
1002 return user |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1003 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
|
1004 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
|
1005 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
|
1006 try: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1007 user = b'%s@%s' % ( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1008 procutil.getuser(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1009 encoding.strtolocal(socket.getfqdn()), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1010 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1011 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
|
1012 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
|
1013 pass |
78a0dd93db0b
Abort on empty username so specifying a username can be forced.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3984
diff
changeset
|
1014 if not user: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1015 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1016 _(b'no username supplied'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1017 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
|
1018 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1019 if b"\n" in user: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1020 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1021 _(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
|
1022 ) |
1985
c577689006fa
Adapted behaviour of ui.username() to documentation and mention it explicitly:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1984
diff
changeset
|
1023 return user |
608
d2994b5298fb
Add username/merge/editor to .hgrc
Matt Mackall <mpm@selenic.com>
parents:
565
diff
changeset
|
1024 |
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
|
1025 def shortuser(self, 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
|
1026 """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
|
1027 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
|
1028 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
|
1029 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
|
1030 |
2494
73ac95671788
push, outgoing, bundle: fall back to "default" if "default-push" not defined
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2470
diff
changeset
|
1031 def expandpath(self, loc, default=None): |
1892
622ee75cb4c9
Directory names take precedence over symbolic names consistently.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1882
diff
changeset
|
1032 """Return repository location relative to cwd or from [paths]""" |
46965
b03527bdac01
ui: deprecated `ui.expandpath`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46907
diff
changeset
|
1033 msg = b'ui.expandpath is deprecated, use `get_*` functions from urlutil' |
b03527bdac01
ui: deprecated `ui.expandpath`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46907
diff
changeset
|
1034 self.deprecwarn(msg, b'6.0') |
26189
663fbc336e22
ui: change default path fallback mechanism (issue4796)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26076
diff
changeset
|
1035 try: |
46720
66fb04552122
ui: pass a `ui` object to `paths.getpath`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46623
diff
changeset
|
1036 p = self.getpath(loc) |
26189
663fbc336e22
ui: change default path fallback mechanism (issue4796)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26076
diff
changeset
|
1037 if p: |
663fbc336e22
ui: change default path fallback mechanism (issue4796)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26076
diff
changeset
|
1038 return p.rawloc |
663fbc336e22
ui: change default path fallback mechanism (issue4796)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26076
diff
changeset
|
1039 except error.RepoError: |
663fbc336e22
ui: change default path fallback mechanism (issue4796)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26076
diff
changeset
|
1040 pass |
663fbc336e22
ui: change default path fallback mechanism (issue4796)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26076
diff
changeset
|
1041 |
663fbc336e22
ui: change default path fallback mechanism (issue4796)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26076
diff
changeset
|
1042 if default: |
663fbc336e22
ui: change default path fallback mechanism (issue4796)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26076
diff
changeset
|
1043 try: |
46720
66fb04552122
ui: pass a `ui` object to `paths.getpath`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46623
diff
changeset
|
1044 p = self.getpath(default) |
26189
663fbc336e22
ui: change default path fallback mechanism (issue4796)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26076
diff
changeset
|
1045 if p: |
663fbc336e22
ui: change default path fallback mechanism (issue4796)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26076
diff
changeset
|
1046 return p.rawloc |
663fbc336e22
ui: change default path fallback mechanism (issue4796)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26076
diff
changeset
|
1047 except error.RepoError: |
663fbc336e22
ui: change default path fallback mechanism (issue4796)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26076
diff
changeset
|
1048 pass |
663fbc336e22
ui: change default path fallback mechanism (issue4796)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26076
diff
changeset
|
1049 |
24250
9c32eea2ca04
ui: represent paths as classes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23269
diff
changeset
|
1050 return loc |
9c32eea2ca04
ui: represent paths as classes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23269
diff
changeset
|
1051 |
9c32eea2ca04
ui: represent paths as classes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23269
diff
changeset
|
1052 @util.propertycache |
9c32eea2ca04
ui: represent paths as classes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23269
diff
changeset
|
1053 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
|
1054 return urlutil.paths(self) |
506 | 1055 |
46720
66fb04552122
ui: pass a `ui` object to `paths.getpath`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46623
diff
changeset
|
1056 def getpath(self, *args, **kwargs): |
66fb04552122
ui: pass a `ui` object to `paths.getpath`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46623
diff
changeset
|
1057 """see paths.getpath for details |
66fb04552122
ui: pass a `ui` object to `paths.getpath`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46623
diff
changeset
|
1058 |
66fb04552122
ui: pass a `ui` object to `paths.getpath`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46623
diff
changeset
|
1059 This method exist as `getpath` need a ui for potential warning message. |
66fb04552122
ui: pass a `ui` object to `paths.getpath`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46623
diff
changeset
|
1060 """ |
47029
9ea75ea23534
urlutil: deprecate `getpath`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46965
diff
changeset
|
1061 msg = b'ui.getpath is deprecated, use `get_*` functions from urlutil' |
9ea75ea23534
urlutil: deprecate `getpath`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46965
diff
changeset
|
1062 self.deprecwarn(msg, '6.0') |
46720
66fb04552122
ui: pass a `ui` object to `paths.getpath`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46623
diff
changeset
|
1063 return self.paths.getpath(self, *args, **kwargs) |
66fb04552122
ui: pass a `ui` object to `paths.getpath`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46623
diff
changeset
|
1064 |
40543
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1065 @property |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1066 def fout(self): |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1067 return self._fout |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1068 |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1069 @fout.setter |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1070 def fout(self, f): |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1071 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
|
1072 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
|
1073 |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1074 @property |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1075 def ferr(self): |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1076 return self._ferr |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1077 |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1078 @ferr.setter |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1079 def ferr(self, f): |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1080 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
|
1081 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
|
1082 |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1083 @property |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1084 def fin(self): |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1085 return self._fin |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1086 |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1087 @fin.setter |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1088 def fin(self, f): |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1089 self._fin = f |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1090 |
40587
5542bc9125c9
dispatch: pass around ui.fmsg channel
Yuya Nishihara <yuya@tcha.org>
parents:
40578
diff
changeset
|
1091 @property |
5542bc9125c9
dispatch: pass around ui.fmsg channel
Yuya Nishihara <yuya@tcha.org>
parents:
40578
diff
changeset
|
1092 def fmsg(self): |
5542bc9125c9
dispatch: pass around ui.fmsg channel
Yuya Nishihara <yuya@tcha.org>
parents:
40578
diff
changeset
|
1093 """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
|
1094 fout/ferr are used""" |
5542bc9125c9
dispatch: pass around ui.fmsg channel
Yuya Nishihara <yuya@tcha.org>
parents:
40578
diff
changeset
|
1095 return self._fmsg |
5542bc9125c9
dispatch: pass around ui.fmsg channel
Yuya Nishihara <yuya@tcha.org>
parents:
40578
diff
changeset
|
1096 |
5542bc9125c9
dispatch: pass around ui.fmsg channel
Yuya Nishihara <yuya@tcha.org>
parents:
40578
diff
changeset
|
1097 @fmsg.setter |
5542bc9125c9
dispatch: pass around ui.fmsg channel
Yuya Nishihara <yuya@tcha.org>
parents:
40578
diff
changeset
|
1098 def fmsg(self, f): |
5542bc9125c9
dispatch: pass around ui.fmsg channel
Yuya Nishihara <yuya@tcha.org>
parents:
40578
diff
changeset
|
1099 self._fmsg = f |
5542bc9125c9
dispatch: pass around ui.fmsg channel
Yuya Nishihara <yuya@tcha.org>
parents:
40578
diff
changeset
|
1100 self._fmsgout, self._fmsgerr = _selectmsgdests(self) |
5542bc9125c9
dispatch: pass around ui.fmsg channel
Yuya Nishihara <yuya@tcha.org>
parents:
40578
diff
changeset
|
1101 |
27106
6ef17697b03d
ui: track label expansion when creating buffers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27068
diff
changeset
|
1102 def pushbuffer(self, error=False, subproc=False, labeled=False): |
23139
e53f6b72a0e4
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
23053
diff
changeset
|
1103 """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
|
1104 |
24848
2f88821856eb
ui: allow capture of subprocess output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24687
diff
changeset
|
1105 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
|
1106 |
2f88821856eb
ui: allow capture of subprocess output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24687
diff
changeset
|
1107 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
|
1108 captured too. |
10815
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
1109 |
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
1110 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
|
1111 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
|
1112 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
|
1113 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
|
1114 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
|
1115 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
|
1116 """ |
8202 | 1117 self._buffers.append([]) |
27106
6ef17697b03d
ui: track label expansion when creating buffers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27068
diff
changeset
|
1118 self._bufferstates.append((error, subproc, labeled)) |
6ef17697b03d
ui: track label expansion when creating buffers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27068
diff
changeset
|
1119 self._bufferapplylabels = labeled |
3737
9f5c46c50118
add a simple nested buffering scheme to ui
Matt Mackall <mpm@selenic.com>
parents:
3721
diff
changeset
|
1120 |
27109
a93d53f79e6e
ui: remove labeled argument from popbuffer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27106
diff
changeset
|
1121 def popbuffer(self): |
a93d53f79e6e
ui: remove labeled argument from popbuffer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27106
diff
changeset
|
1122 '''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
|
1123 self._bufferstates.pop() |
27106
6ef17697b03d
ui: track label expansion when creating buffers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27068
diff
changeset
|
1124 if self._bufferstates: |
6ef17697b03d
ui: track label expansion when creating buffers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27068
diff
changeset
|
1125 self._bufferapplylabels = self._bufferstates[-1][2] |
6ef17697b03d
ui: track label expansion when creating buffers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27068
diff
changeset
|
1126 else: |
6ef17697b03d
ui: track label expansion when creating buffers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27068
diff
changeset
|
1127 self._bufferapplylabels = None |
6ef17697b03d
ui: track label expansion when creating buffers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27068
diff
changeset
|
1128 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1129 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
|
1130 |
40541
c2aea007130b
ui: add inner function to select write destination
Yuya Nishihara <yuya@tcha.org>
parents:
40540
diff
changeset
|
1131 def _isbuffered(self, dest): |
40543
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1132 if dest is self._fout: |
40541
c2aea007130b
ui: add inner function to select write destination
Yuya Nishihara <yuya@tcha.org>
parents:
40540
diff
changeset
|
1133 return bool(self._buffers) |
40543
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1134 if dest is self._ferr: |
40541
c2aea007130b
ui: add inner function to select write destination
Yuya Nishihara <yuya@tcha.org>
parents:
40540
diff
changeset
|
1135 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
|
1136 return False |
c2aea007130b
ui: add inner function to select write destination
Yuya Nishihara <yuya@tcha.org>
parents:
40540
diff
changeset
|
1137 |
35961
0ff41ced4c12
diff: improve ui.write performance when not coloring on Windows
Joerg Sonnenberger <joerg@bec.de>
parents:
35957
diff
changeset
|
1138 def canwritewithoutlabels(self): |
0ff41ced4c12
diff: improve ui.write performance when not coloring on Windows
Joerg Sonnenberger <joerg@bec.de>
parents:
35957
diff
changeset
|
1139 '''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
|
1140 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
|
1141 return True |
0ff41ced4c12
diff: improve ui.write performance when not coloring on Windows
Joerg Sonnenberger <joerg@bec.de>
parents:
35957
diff
changeset
|
1142 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
|
1143 |
0ff41ced4c12
diff: improve ui.write performance when not coloring on Windows
Joerg Sonnenberger <joerg@bec.de>
parents:
35957
diff
changeset
|
1144 def canbatchlabeledwrites(self): |
0ff41ced4c12
diff: improve ui.write performance when not coloring on Windows
Joerg Sonnenberger <joerg@bec.de>
parents:
35957
diff
changeset
|
1145 '''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
|
1146 # 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
|
1147 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
|
1148 |
10815
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
1149 def write(self, *args, **opts): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1150 """write args to output |
10815
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
1151 |
31091
ad074f900907
color: move 'write' logic to the core ui class
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31090
diff
changeset
|
1152 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
|
1153 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
|
1154 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
|
1155 |
31091
ad074f900907
color: move 'write' logic to the core ui class
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31090
diff
changeset
|
1156 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
|
1157 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
|
1158 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
|
1159 issues a label of "ui.debug". |
10815
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
1160 |
43265
82879e06c926
ui: option to preserve the progress bar
Joerg Sonnenberger <joerg@bec.de>
parents:
43118
diff
changeset
|
1161 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
|
1162 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
|
1163 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
|
1164 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
|
1165 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
|
1166 in a pipe. |
82879e06c926
ui: option to preserve the progress bar
Joerg Sonnenberger <joerg@bec.de>
parents:
43118
diff
changeset
|
1167 |
10815
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
1168 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
|
1169 "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
|
1170 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
|
1171 """ |
41306
b4a3abdc790d
ui: inline _write() into write() due to performance issue
Yuya Nishihara <yuya@tcha.org>
parents:
41305
diff
changeset
|
1172 dest = self._fout |
b4a3abdc790d
ui: inline _write() into write() due to performance issue
Yuya Nishihara <yuya@tcha.org>
parents:
41305
diff
changeset
|
1173 |
b4a3abdc790d
ui: inline _write() into write() due to performance issue
Yuya Nishihara <yuya@tcha.org>
parents:
41305
diff
changeset
|
1174 # 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
|
1175 if self._buffers: |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43377
diff
changeset
|
1176 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
|
1177 if label and self._bufferapplylabels: |
b4a3abdc790d
ui: inline _write() into write() due to performance issue
Yuya Nishihara <yuya@tcha.org>
parents:
41305
diff
changeset
|
1178 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
|
1179 else: |
b4a3abdc790d
ui: inline _write() into write() due to performance issue
Yuya Nishihara <yuya@tcha.org>
parents:
41305
diff
changeset
|
1180 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
|
1181 return |
e8273eaa0726
ui: inline _writenobuf() into write() due to performance issue
Yuya Nishihara <yuya@tcha.org>
parents:
41306
diff
changeset
|
1182 |
43265
82879e06c926
ui: option to preserve the progress bar
Joerg Sonnenberger <joerg@bec.de>
parents:
43118
diff
changeset
|
1183 # inlined _writenobuf() for speed |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43377
diff
changeset
|
1184 if not opts.get('keepprogressbar', False): |
43265
82879e06c926
ui: option to preserve the progress bar
Joerg Sonnenberger <joerg@bec.de>
parents:
43118
diff
changeset
|
1185 self._progclear() |
41307
e8273eaa0726
ui: inline _writenobuf() into write() due to performance issue
Yuya Nishihara <yuya@tcha.org>
parents:
41306
diff
changeset
|
1186 msg = b''.join(args) |
e8273eaa0726
ui: inline _writenobuf() into write() due to performance issue
Yuya Nishihara <yuya@tcha.org>
parents:
41306
diff
changeset
|
1187 |
e8273eaa0726
ui: inline _writenobuf() into write() due to performance issue
Yuya Nishihara <yuya@tcha.org>
parents:
41306
diff
changeset
|
1188 # 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
|
1189 starttime = util.timer() |
e8273eaa0726
ui: inline _writenobuf() into write() due to performance issue
Yuya Nishihara <yuya@tcha.org>
parents:
41306
diff
changeset
|
1190 try: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1191 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
|
1192 # 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
|
1193 # 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
|
1194 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
|
1195 else: |
e8273eaa0726
ui: inline _writenobuf() into write() due to performance issue
Yuya Nishihara <yuya@tcha.org>
parents:
41306
diff
changeset
|
1196 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
|
1197 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
|
1198 msg = self.label(msg, label) |
e8273eaa0726
ui: inline _writenobuf() into write() due to performance issue
Yuya Nishihara <yuya@tcha.org>
parents:
41306
diff
changeset
|
1199 dest.write(msg) |
e8273eaa0726
ui: inline _writenobuf() into write() due to performance issue
Yuya Nishihara <yuya@tcha.org>
parents:
41306
diff
changeset
|
1200 except IOError as err: |
e8273eaa0726
ui: inline _writenobuf() into write() due to performance issue
Yuya Nishihara <yuya@tcha.org>
parents:
41306
diff
changeset
|
1201 raise error.StdioError(err) |
e8273eaa0726
ui: inline _writenobuf() into write() due to performance issue
Yuya Nishihara <yuya@tcha.org>
parents:
41306
diff
changeset
|
1202 finally: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1203 self._blockedtimes[b'stdio_blocked'] += ( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1204 util.timer() - starttime |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1205 ) * 1000 |
40541
c2aea007130b
ui: add inner function to select write destination
Yuya Nishihara <yuya@tcha.org>
parents:
40540
diff
changeset
|
1206 |
c2aea007130b
ui: add inner function to select write destination
Yuya Nishihara <yuya@tcha.org>
parents:
40540
diff
changeset
|
1207 def write_err(self, *args, **opts): |
40543
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1208 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
|
1209 |
c2aea007130b
ui: add inner function to select write destination
Yuya Nishihara <yuya@tcha.org>
parents:
40540
diff
changeset
|
1210 def _write(self, dest, *args, **opts): |
41306
b4a3abdc790d
ui: inline _write() into write() due to performance issue
Yuya Nishihara <yuya@tcha.org>
parents:
41305
diff
changeset
|
1211 # 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
|
1212 if self._isbuffered(dest): |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43377
diff
changeset
|
1213 label = opts.get('label', b'') |
41305
ff927ecb12f9
ui: optimize buffered write with no label
Yuya Nishihara <yuya@tcha.org>
parents:
41285
diff
changeset
|
1214 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
|
1215 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
|
1216 else: |
ad074f900907
color: move 'write' logic to the core ui class
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31090
diff
changeset
|
1217 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
|
1218 else: |
40541
c2aea007130b
ui: add inner function to select write destination
Yuya Nishihara <yuya@tcha.org>
parents:
40540
diff
changeset
|
1219 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
|
1220 |
40538
c5e964f75bf7
ui: pass in file object to _writenobuf()
Yuya Nishihara <yuya@tcha.org>
parents:
40524
diff
changeset
|
1221 def _writenobuf(self, dest, *args, **opts): |
41307
e8273eaa0726
ui: inline _writenobuf() into write() due to performance issue
Yuya Nishihara <yuya@tcha.org>
parents:
41306
diff
changeset
|
1222 # update write() as well if you touch this code |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43377
diff
changeset
|
1223 if not opts.get('keepprogressbar', False): |
43265
82879e06c926
ui: option to preserve the progress bar
Joerg Sonnenberger <joerg@bec.de>
parents:
43118
diff
changeset
|
1224 self._progclear() |
40522
51091816a355
ui: simply concatenate messages before applying color labels
Yuya Nishihara <yuya@tcha.org>
parents:
40521
diff
changeset
|
1225 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
|
1226 |
31128
0bb3089fe735
ui: remove superfluous indent in _write()
Yuya Nishihara <yuya@tcha.org>
parents:
31124
diff
changeset
|
1227 # opencode timeblockedsection because this is a critical path |
0bb3089fe735
ui: remove superfluous indent in _write()
Yuya Nishihara <yuya@tcha.org>
parents:
31124
diff
changeset
|
1228 starttime = util.timer() |
0bb3089fe735
ui: remove superfluous indent in _write()
Yuya Nishihara <yuya@tcha.org>
parents:
31124
diff
changeset
|
1229 try: |
40543
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1230 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
|
1231 self._fout.flush() |
40589
054d0fcba2c4
commandserver: add experimental option to use separate message channel
Yuya Nishihara <yuya@tcha.org>
parents:
40587
diff
changeset
|
1232 if getattr(dest, 'structured', False): |
054d0fcba2c4
commandserver: add experimental option to use separate message channel
Yuya Nishihara <yuya@tcha.org>
parents:
40587
diff
changeset
|
1233 # 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
|
1234 # no extra colorization is necessary. |
054d0fcba2c4
commandserver: add experimental option to use separate message channel
Yuya Nishihara <yuya@tcha.org>
parents:
40587
diff
changeset
|
1235 dest.write(msg, **opts) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1236 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
|
1237 # 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
|
1238 # 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
|
1239 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
|
1240 else: |
0c7b2035a604
ui: indent _writenobuf() to prepare moving bits from _write() functions
Yuya Nishihara <yuya@tcha.org>
parents:
40522
diff
changeset
|
1241 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
|
1242 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
|
1243 msg = self.label(msg, label) |
40540
06e841e72523
ui: remove _write() and _write_err() functions
Yuya Nishihara <yuya@tcha.org>
parents:
40539
diff
changeset
|
1244 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
|
1245 # 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
|
1246 # including stdout. |
44992
484e04dc7f42
ui: replace `self._ferr` with identical `dest`
Manuel Jacob <me@manueljacob.de>
parents:
44661
diff
changeset
|
1247 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
|
1248 dest.flush() |
31961
db823e38a61c
stdio: raise StdioError if something goes wrong in ui._write
Bryan O'Sullivan <bryano@fb.com>
parents:
31958
diff
changeset
|
1249 except IOError as err: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1250 if dest is self._ferr and err.errno in ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1251 errno.EPIPE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1252 errno.EIO, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1253 errno.EBADF, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1254 ): |
40539
04a9dd8da959
ui: move pre/post processes from low-level write()s to _writenobuf()
Yuya Nishihara <yuya@tcha.org>
parents:
40538
diff
changeset
|
1255 # 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
|
1256 return |
31961
db823e38a61c
stdio: raise StdioError if something goes wrong in ui._write
Bryan O'Sullivan <bryano@fb.com>
parents:
31958
diff
changeset
|
1257 raise error.StdioError(err) |
31128
0bb3089fe735
ui: remove superfluous indent in _write()
Yuya Nishihara <yuya@tcha.org>
parents:
31124
diff
changeset
|
1258 finally: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1259 self._blockedtimes[b'stdio_blocked'] += ( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1260 util.timer() - starttime |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1261 ) * 1000 |
565 | 1262 |
40590
83dd8c63a0c6
ui: extract helpers to write message with type or label
Yuya Nishihara <yuya@tcha.org>
parents:
40589
diff
changeset
|
1263 def _writemsg(self, dest, *args, **opts): |
45025
24b1a8eb73aa
ui: add option to timestamp status and diagnostic messages
Joerg Sonnenberger <joerg@bec.de>
parents:
44992
diff
changeset
|
1264 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
|
1265 b'debug', |
24b1a8eb73aa
ui: add option to timestamp status and diagnostic messages
Joerg Sonnenberger <joerg@bec.de>
parents:
44992
diff
changeset
|
1266 b'error', |
24b1a8eb73aa
ui: add option to timestamp status and diagnostic messages
Joerg Sonnenberger <joerg@bec.de>
parents:
44992
diff
changeset
|
1267 b'note', |
24b1a8eb73aa
ui: add option to timestamp status and diagnostic messages
Joerg Sonnenberger <joerg@bec.de>
parents:
44992
diff
changeset
|
1268 b'status', |
24b1a8eb73aa
ui: add option to timestamp status and diagnostic messages
Joerg Sonnenberger <joerg@bec.de>
parents:
44992
diff
changeset
|
1269 b'warning', |
24b1a8eb73aa
ui: add option to timestamp status and diagnostic messages
Joerg Sonnenberger <joerg@bec.de>
parents:
44992
diff
changeset
|
1270 } |
24b1a8eb73aa
ui: add option to timestamp status and diagnostic messages
Joerg Sonnenberger <joerg@bec.de>
parents:
44992
diff
changeset
|
1271 if timestamp: |
24b1a8eb73aa
ui: add option to timestamp status and diagnostic messages
Joerg Sonnenberger <joerg@bec.de>
parents:
44992
diff
changeset
|
1272 args = ( |
45033
b4b6ff83ed9c
ui: fix Python 2.7 support for ui.timestamp-output
Joerg Sonnenberger <joerg@bec.de>
parents:
45025
diff
changeset
|
1273 b'[%s] ' |
b4b6ff83ed9c
ui: fix Python 2.7 support for ui.timestamp-output
Joerg Sonnenberger <joerg@bec.de>
parents:
45025
diff
changeset
|
1274 % 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
|
1275 ) + args |
40590
83dd8c63a0c6
ui: extract helpers to write message with type or label
Yuya Nishihara <yuya@tcha.org>
parents:
40589
diff
changeset
|
1276 _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
|
1277 if timestamp: |
24b1a8eb73aa
ui: add option to timestamp status and diagnostic messages
Joerg Sonnenberger <joerg@bec.de>
parents:
44992
diff
changeset
|
1278 dest.flush() |
40590
83dd8c63a0c6
ui: extract helpers to write message with type or label
Yuya Nishihara <yuya@tcha.org>
parents:
40589
diff
changeset
|
1279 |
83dd8c63a0c6
ui: extract helpers to write message with type or label
Yuya Nishihara <yuya@tcha.org>
parents:
40589
diff
changeset
|
1280 def _writemsgnobuf(self, dest, *args, **opts): |
83dd8c63a0c6
ui: extract helpers to write message with type or label
Yuya Nishihara <yuya@tcha.org>
parents:
40589
diff
changeset
|
1281 _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
|
1282 |
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
|
1283 def flush(self): |
30978
fdecd24ca4dc
ui: log time spent blocked on stdio
Simon Farnsworth <simonfar@fb.com>
parents:
30976
diff
changeset
|
1284 # 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
|
1285 starttime = util.timer() |
fdecd24ca4dc
ui: log time spent blocked on stdio
Simon Farnsworth <simonfar@fb.com>
parents:
30976
diff
changeset
|
1286 try: |
31963
1bfb9a63b98e
stdio: raise StdioError if something goes wrong in ui.flush
Bryan O'Sullivan <bryano@fb.com>
parents:
31962
diff
changeset
|
1287 try: |
40543
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1288 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
|
1289 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
|
1290 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
|
1291 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
|
1292 finally: |
1bfb9a63b98e
stdio: raise StdioError if something goes wrong in ui.flush
Bryan O'Sullivan <bryano@fb.com>
parents:
31962
diff
changeset
|
1293 try: |
40543
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1294 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
|
1295 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
|
1296 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
|
1297 raise error.StdioError(err) |
30978
fdecd24ca4dc
ui: log time spent blocked on stdio
Simon Farnsworth <simonfar@fb.com>
parents:
30976
diff
changeset
|
1298 finally: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1299 self._blockedtimes[b'stdio_blocked'] += ( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1300 util.timer() - starttime |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1301 ) * 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
|
1302 |
16751
2d432a1fc0db
ui: add _isatty method to easily disable cooked I/O
Matt Mackall <mpm@selenic.com>
parents:
16703
diff
changeset
|
1303 def _isatty(self, fh): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1304 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
|
1305 return False |
37120
a8a902d7176e
procutil: bulk-replace function calls to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
37119
diff
changeset
|
1306 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
|
1307 |
41285
cf8677cd7286
ui: proxy protect/restorestdio() calls to update internal flag
Yuya Nishihara <yuya@tcha.org>
parents:
41284
diff
changeset
|
1308 def protectfinout(self): |
cf8677cd7286
ui: proxy protect/restorestdio() calls to update internal flag
Yuya Nishihara <yuya@tcha.org>
parents:
41284
diff
changeset
|
1309 """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
|
1310 |
cf8677cd7286
ui: proxy protect/restorestdio() calls to update internal flag
Yuya Nishihara <yuya@tcha.org>
parents:
41284
diff
changeset
|
1311 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
|
1312 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
|
1313 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
|
1314 """ |
cf8677cd7286
ui: proxy protect/restorestdio() calls to update internal flag
Yuya Nishihara <yuya@tcha.org>
parents:
41284
diff
changeset
|
1315 if self._finoutredirected: |
cf8677cd7286
ui: proxy protect/restorestdio() calls to update internal flag
Yuya Nishihara <yuya@tcha.org>
parents:
41284
diff
changeset
|
1316 # 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
|
1317 # 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
|
1318 return self._fin, self._fout |
cf8677cd7286
ui: proxy protect/restorestdio() calls to update internal flag
Yuya Nishihara <yuya@tcha.org>
parents:
41284
diff
changeset
|
1319 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
|
1320 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
|
1321 return fin, fout |
cf8677cd7286
ui: proxy protect/restorestdio() calls to update internal flag
Yuya Nishihara <yuya@tcha.org>
parents:
41284
diff
changeset
|
1322 |
cf8677cd7286
ui: proxy protect/restorestdio() calls to update internal flag
Yuya Nishihara <yuya@tcha.org>
parents:
41284
diff
changeset
|
1323 def restorefinout(self, fin, fout): |
cf8677cd7286
ui: proxy protect/restorestdio() calls to update internal flag
Yuya Nishihara <yuya@tcha.org>
parents:
41284
diff
changeset
|
1324 """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
|
1325 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
|
1326 return |
cf8677cd7286
ui: proxy protect/restorestdio() calls to update internal flag
Yuya Nishihara <yuya@tcha.org>
parents:
41284
diff
changeset
|
1327 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
|
1328 # 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
|
1329 # 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
|
1330 self._finoutredirected = False |
cf8677cd7286
ui: proxy protect/restorestdio() calls to update internal flag
Yuya Nishihara <yuya@tcha.org>
parents:
41284
diff
changeset
|
1331 |
41284
b0e3f2d7c143
ui: move protectedstdio() context manager from procutil
Yuya Nishihara <yuya@tcha.org>
parents:
41225
diff
changeset
|
1332 @contextlib.contextmanager |
b0e3f2d7c143
ui: move protectedstdio() context manager from procutil
Yuya Nishihara <yuya@tcha.org>
parents:
41225
diff
changeset
|
1333 def protectedfinout(self): |
b0e3f2d7c143
ui: move protectedstdio() context manager from procutil
Yuya Nishihara <yuya@tcha.org>
parents:
41225
diff
changeset
|
1334 """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
|
1335 fin, fout = self.protectfinout() |
41284
b0e3f2d7c143
ui: move protectedstdio() context manager from procutil
Yuya Nishihara <yuya@tcha.org>
parents:
41225
diff
changeset
|
1336 try: |
b0e3f2d7c143
ui: move protectedstdio() context manager from procutil
Yuya Nishihara <yuya@tcha.org>
parents:
41225
diff
changeset
|
1337 yield fin, fout |
b0e3f2d7c143
ui: move protectedstdio() context manager from procutil
Yuya Nishihara <yuya@tcha.org>
parents:
41225
diff
changeset
|
1338 finally: |
41285
cf8677cd7286
ui: proxy protect/restorestdio() calls to update internal flag
Yuya Nishihara <yuya@tcha.org>
parents:
41284
diff
changeset
|
1339 self.restorefinout(fin, fout) |
41284
b0e3f2d7c143
ui: move protectedstdio() context manager from procutil
Yuya Nishihara <yuya@tcha.org>
parents:
41225
diff
changeset
|
1340 |
31026
9c827087df38
ui: rename neverpager to disablepager
Augie Fackler <augie@google.com>
parents:
31014
diff
changeset
|
1341 def disablepager(self): |
9c827087df38
ui: rename neverpager to disablepager
Augie Fackler <augie@google.com>
parents:
31014
diff
changeset
|
1342 self._disablepager = True |
30994
3ed6e43998df
ui: introduce neverpager() call
Augie Fackler <augie@google.com>
parents:
30992
diff
changeset
|
1343 |
30992
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1344 def pager(self, command): |
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1345 """Start a pager for subsequent command output. |
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1346 |
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1347 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
|
1348 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
|
1349 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
|
1350 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
|
1351 prompting the user or activating curses. |
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1352 |
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1353 Args: |
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1354 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
|
1355 not "history, "summary" not "summ", etc. |
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1356 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1357 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
|
1358 # 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
|
1359 return |
cc047a733f69
ui: enable pager always for explicit --pager=on (issue5580)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33585
diff
changeset
|
1360 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1361 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
|
1362 # 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
|
1363 # 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
|
1364 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
|
1365 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
|
1366 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
|
1367 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
|
1368 # 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
|
1369 # formatted() will need some adjustment. |
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1370 or not self.formatted() |
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1371 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
|
1372 or self._buffers |
30992
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1373 # 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
|
1374 or b'--debugger' in pycompat.sysargv |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1375 ): |
30992
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1376 # 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
|
1377 # 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
|
1378 # 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
|
1379 return |
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1380 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1381 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
|
1382 if not pagercmd: |
873ebdd6e84d
pager: do not try to run an empty pager command
Yuya Nishihara <yuya@tcha.org>
parents:
31062
diff
changeset
|
1383 return |
873ebdd6e84d
pager: do not try to run an empty pager command
Yuya Nishihara <yuya@tcha.org>
parents:
31062
diff
changeset
|
1384 |
31954
e518192d6bac
pager: set some environment variables if they're not set
Jun Wu <quark@fb.com>
parents:
31778
diff
changeset
|
1385 pagerenv = {} |
e518192d6bac
pager: set some environment variables if they're not set
Jun Wu <quark@fb.com>
parents:
31778
diff
changeset
|
1386 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
|
1387 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
|
1388 pagerenv[name] = value |
e518192d6bac
pager: set some environment variables if they're not set
Jun Wu <quark@fb.com>
parents:
31778
diff
changeset
|
1389 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1390 self.debug( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1391 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
|
1392 ) |
31490
8122cc5cb543
pager: flush outputs before firing pager process
Yuya Nishihara <yuya@tcha.org>
parents:
31481
diff
changeset
|
1393 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
|
1394 |
2d11d278279a
ui: defer setting pager related properties until the pager has spawned
Matt Harbison <matt_harbison@yahoo.com>
parents:
31688
diff
changeset
|
1395 wasformatted = self.formatted() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1396 if util.safehasattr(signal, b"SIGPIPE"): |
30992
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1397 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
|
1398 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
|
1399 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
|
1400 # 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
|
1401 # 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
|
1402 # 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
|
1403 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
|
1404 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
|
1405 |
c3ca0ad8ab9c
ui: rerun color.setup() once the pager has spawned to honor 'color.pagermode'
Matt Harbison <matt_harbison@yahoo.com>
parents:
31690
diff
changeset
|
1406 # 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
|
1407 # 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
|
1408 cm = self._colormode |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1409 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
|
1410 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
|
1411 else: |
2d11d278279a
ui: defer setting pager related properties until the pager has spawned
Matt Harbison <matt_harbison@yahoo.com>
parents:
31688
diff
changeset
|
1412 # 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
|
1413 # 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
|
1414 # 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
|
1415 self.disablepager() |
30992
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1416 |
31954
e518192d6bac
pager: set some environment variables if they're not set
Jun Wu <quark@fb.com>
parents:
31778
diff
changeset
|
1417 def _runpager(self, command, env=None): |
30992
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1418 """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
|
1419 |
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1420 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
|
1421 override how a pager is invoked. |
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1422 """ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1423 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
|
1424 # 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
|
1425 return False |
31478
9335dc6b2a9c
pager: avoid shell=True on subprocess.Popen for better errors (issue5491)
Augie Fackler <augie@google.com>
parents:
31472
diff
changeset
|
1426 # 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
|
1427 # 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
|
1428 # 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
|
1429 # 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
|
1430 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
|
1431 |
34645 | 1432 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
|
1433 # 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
|
1434 # 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
|
1435 # 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
|
1436 # `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
|
1437 # 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
|
1438 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
|
1439 if not fullcmd: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1440 self.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1441 _(b"missing pager command '%s', skipping pager\n") % command |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1442 ) |
31690
2d11d278279a
ui: defer setting pager related properties until the pager has spawned
Matt Harbison <matt_harbison@yahoo.com>
parents:
31688
diff
changeset
|
1443 return False |
31624
c60091fa1426
pager: improve support for various flavors of `more` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
31592
diff
changeset
|
1444 |
c60091fa1426
pager: improve support for various flavors of `more` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
31592
diff
changeset
|
1445 command = fullcmd |
c60091fa1426
pager: improve support for various flavors of `more` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
31592
diff
changeset
|
1446 |
31478
9335dc6b2a9c
pager: avoid shell=True on subprocess.Popen for better errors (issue5491)
Augie Fackler <augie@google.com>
parents:
31472
diff
changeset
|
1447 try: |
9335dc6b2a9c
pager: avoid shell=True on subprocess.Popen for better errors (issue5491)
Augie Fackler <augie@google.com>
parents:
31472
diff
changeset
|
1448 pager = subprocess.Popen( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1449 procutil.tonativestr(command), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1450 shell=shell, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1451 bufsize=-1, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1452 close_fds=procutil.closefds, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1453 stdin=subprocess.PIPE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1454 stdout=procutil.stdout, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1455 stderr=procutil.stderr, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1456 env=procutil.tonativeenv(procutil.shellenviron(env)), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1457 ) |
31478
9335dc6b2a9c
pager: avoid shell=True on subprocess.Popen for better errors (issue5491)
Augie Fackler <augie@google.com>
parents:
31472
diff
changeset
|
1458 except OSError as e: |
9335dc6b2a9c
pager: avoid shell=True on subprocess.Popen for better errors (issue5491)
Augie Fackler <augie@google.com>
parents:
31472
diff
changeset
|
1459 if e.errno == errno.ENOENT and not shell: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1460 self.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1461 _(b"missing pager command '%s', skipping pager\n") % command |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1462 ) |
31690
2d11d278279a
ui: defer setting pager related properties until the pager has spawned
Matt Harbison <matt_harbison@yahoo.com>
parents:
31688
diff
changeset
|
1463 return False |
31478
9335dc6b2a9c
pager: avoid shell=True on subprocess.Popen for better errors (issue5491)
Augie Fackler <augie@google.com>
parents:
31472
diff
changeset
|
1464 raise |
30992
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1465 |
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1466 # back up original file descriptors |
37119
d4a2e0d5d042
procutil: bulk-replace util.std* to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
37084
diff
changeset
|
1467 stdoutfd = os.dup(procutil.stdout.fileno()) |
d4a2e0d5d042
procutil: bulk-replace util.std* to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
37084
diff
changeset
|
1468 stderrfd = os.dup(procutil.stderr.fileno()) |
30992
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1469 |
37119
d4a2e0d5d042
procutil: bulk-replace util.std* to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
37084
diff
changeset
|
1470 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
|
1471 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
|
1472 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
|
1473 |
31958
de5c9d0e02ea
atexit: switch to home-grown implementation
Bryan O'Sullivan <bryano@fb.com>
parents:
31956
diff
changeset
|
1474 @self.atexit |
30992
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1475 def killpager(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1476 if util.safehasattr(signal, b"SIGINT"): |
30992
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1477 signal.signal(signal.SIGINT, signal.SIG_IGN) |
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1478 # restore original fds, closing pager.stdin copies in the process |
37119
d4a2e0d5d042
procutil: bulk-replace util.std* to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
37084
diff
changeset
|
1479 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
|
1480 os.dup2(stderrfd, procutil.stderr.fileno()) |
30992
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1481 pager.stdin.close() |
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1482 pager.wait() |
61b4122019d3
pager: move pager-initiating code into core
Augie Fackler <augie@google.com>
parents:
30980
diff
changeset
|
1483 |
31690
2d11d278279a
ui: defer setting pager related properties until the pager has spawned
Matt Harbison <matt_harbison@yahoo.com>
parents:
31688
diff
changeset
|
1484 return True |
2d11d278279a
ui: defer setting pager related properties until the pager has spawned
Matt Harbison <matt_harbison@yahoo.com>
parents:
31688
diff
changeset
|
1485 |
34882
e9f320a40b44
ui: move request exit handlers to global state
Saurabh Singh <singhsrb@fb.com>
parents:
34858
diff
changeset
|
1486 @property |
e9f320a40b44
ui: move request exit handlers to global state
Saurabh Singh <singhsrb@fb.com>
parents:
34858
diff
changeset
|
1487 def _exithandlers(self): |
e9f320a40b44
ui: move request exit handlers to global state
Saurabh Singh <singhsrb@fb.com>
parents:
34858
diff
changeset
|
1488 return _reqexithandlers |
e9f320a40b44
ui: move request exit handlers to global state
Saurabh Singh <singhsrb@fb.com>
parents:
34858
diff
changeset
|
1489 |
31956
c13ff31818b0
ui: add special-purpose atexit functionality
Bryan O'Sullivan <bryano@fb.com>
parents:
31954
diff
changeset
|
1490 def atexit(self, func, *args, **kwargs): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1491 """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
|
1492 |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1493 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
|
1494 self._exithandlers.append((func, args, kwargs)) |
c13ff31818b0
ui: add special-purpose atexit functionality
Bryan O'Sullivan <bryano@fb.com>
parents:
31954
diff
changeset
|
1495 return func |
c13ff31818b0
ui: add special-purpose atexit functionality
Bryan O'Sullivan <bryano@fb.com>
parents:
31954
diff
changeset
|
1496 |
28542
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1497 def interface(self, feature): |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1498 """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
|
1499 |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1500 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
|
1501 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
|
1502 |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1503 ui.interface.histedit = text |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1504 ui.interface.chunkselector = curses |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1505 |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1506 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
|
1507 |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1508 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
|
1509 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
|
1510 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
|
1511 |
30332
318a24b52eeb
spelling: fixes of non-dictionary words
Mads Kiilerich <madski@unity3d.com>
parents:
30314
diff
changeset
|
1512 Consider the following example: |
28542
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1513 ui.interface = curses |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1514 ui.interface.histedit = text |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1515 |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1516 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
|
1517 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
|
1518 """ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1519 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
|
1520 |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1521 featureinterfaces = { |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1522 b"chunkselector": [ |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1523 b"text", |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1524 b"curses", |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1525 ], |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1526 b"histedit": [ |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1527 b"text", |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1528 b"curses", |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1529 ], |
28542
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1530 } |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1531 |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1532 # Feature-specific interface |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1533 if feature not in featureinterfaces.keys(): |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1534 # Programming error, not user error |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1535 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
|
1536 |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1537 availableinterfaces = frozenset(featureinterfaces[feature]) |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1538 if alldefaults > availableinterfaces: |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1539 # 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
|
1540 # 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
|
1541 raise ValueError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1542 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
|
1543 ) |
28542
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1544 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1545 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
|
1546 return b"text" |
28542
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1547 |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1548 # 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
|
1549 defaultinterface = b"text" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1550 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
|
1551 if i in alldefaults: |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1552 defaultinterface = i |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1553 |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1554 choseninterface = defaultinterface |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1555 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
|
1556 if f in availableinterfaces: |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1557 choseninterface = f |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1558 |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1559 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
|
1560 if f is not None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1561 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
|
1562 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1563 self.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1564 _(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
|
1565 % (i, choseninterface) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1566 ) |
28542
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1567 if f is not None and choseninterface != f: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1568 self.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1569 _(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
|
1570 % (feature, f, choseninterface) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1571 ) |
28542
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1572 |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1573 return choseninterface |
71e12fc53b80
ui: add new config flag for interface selection
Simon Farnsworth <simonfar@fb.com>
parents:
28498
diff
changeset
|
1574 |
8208
32a2a1e244f1
ui: make interactive a method
Matt Mackall <mpm@selenic.com>
parents:
8206
diff
changeset
|
1575 def interactive(self): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1576 """is interactive input allowed? |
11325
22a737306ba5
ui: document the formatted(), interactive() & plain() functions.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11324
diff
changeset
|
1577 |
22a737306ba5
ui: document the formatted(), interactive() & plain() functions.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11324
diff
changeset
|
1578 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
|
1579 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
|
1580 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
|
1581 specified. |
22a737306ba5
ui: document the formatted(), interactive() & plain() functions.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11324
diff
changeset
|
1582 |
22a737306ba5
ui: document the formatted(), interactive() & plain() functions.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11324
diff
changeset
|
1583 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
|
1584 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
|
1585 to a terminal device. |
22a737306ba5
ui: document the formatted(), interactive() & plain() functions.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11324
diff
changeset
|
1586 |
22a737306ba5
ui: document the formatted(), interactive() & plain() functions.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11324
diff
changeset
|
1587 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
|
1588 """ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1589 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
|
1590 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
|
1591 # 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
|
1592 # 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
|
1593 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
|
1594 |
8538
6419bc7b3d9c
ui: honor interactive=off even if isatty()
Patrick Mezard <pmezard@gmail.com>
parents:
8527
diff
changeset
|
1595 return i |
8208
32a2a1e244f1
ui: make interactive a method
Matt Mackall <mpm@selenic.com>
parents:
8206
diff
changeset
|
1596 |
12689
c52c629ce19e
termwidth: move to ui.ui from util
Augie Fackler <durin42@gmail.com>
parents:
12665
diff
changeset
|
1597 def termwidth(self): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1598 """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
|
1599 if b'COLUMNS' in encoding.environ: |
12689
c52c629ce19e
termwidth: move to ui.ui from util
Augie Fackler <durin42@gmail.com>
parents:
12665
diff
changeset
|
1600 try: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1601 return int(encoding.environ[b'COLUMNS']) |
12689
c52c629ce19e
termwidth: move to ui.ui from util
Augie Fackler <durin42@gmail.com>
parents:
12665
diff
changeset
|
1602 except ValueError: |
c52c629ce19e
termwidth: move to ui.ui from util
Augie Fackler <durin42@gmail.com>
parents:
12665
diff
changeset
|
1603 pass |
30314
365812902904
scmutil: extend termwidth() to return terminal height, renamed to termsize()
Yuya Nishihara <yuya@tcha.org>
parents:
30310
diff
changeset
|
1604 return scmutil.termsize(self)[0] |
12689
c52c629ce19e
termwidth: move to ui.ui from util
Augie Fackler <durin42@gmail.com>
parents:
12665
diff
changeset
|
1605 |
11324
cdf6d861b207
ui: add ui.formatted configuration variable and accessor function.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11311
diff
changeset
|
1606 def formatted(self): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1607 """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
|
1608 |
22a737306ba5
ui: document the formatted(), interactive() & plain() functions.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11324
diff
changeset
|
1609 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
|
1610 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
|
1611 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
|
1612 utilities, e.g. `grep'. |
22a737306ba5
ui: document the formatted(), interactive() & plain() functions.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11324
diff
changeset
|
1613 |
22a737306ba5
ui: document the formatted(), interactive() & plain() functions.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11324
diff
changeset
|
1614 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
|
1615 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
|
1616 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
|
1617 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
|
1618 Mercurial or its extensions. |
22a737306ba5
ui: document the formatted(), interactive() & plain() functions.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11324
diff
changeset
|
1619 |
22a737306ba5
ui: document the formatted(), interactive() & plain() functions.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11324
diff
changeset
|
1620 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
|
1621 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
|
1622 """ |
11324
cdf6d861b207
ui: add ui.formatted configuration variable and accessor function.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11311
diff
changeset
|
1623 if self.plain(): |
cdf6d861b207
ui: add ui.formatted configuration variable and accessor function.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11311
diff
changeset
|
1624 return False |
cdf6d861b207
ui: add ui.formatted configuration variable and accessor function.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11311
diff
changeset
|
1625 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1626 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
|
1627 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
|
1628 # 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
|
1629 # 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
|
1630 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
|
1631 |
cdf6d861b207
ui: add ui.formatted configuration variable and accessor function.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11311
diff
changeset
|
1632 return i |
cdf6d861b207
ui: add ui.formatted configuration variable and accessor function.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11311
diff
changeset
|
1633 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1634 def _readline(self, prompt=b' ', promptopts=None): |
36795
9b513888ea23
ui: do not use rawinput() when we have to replace sys.stdin/stdout
Yuya Nishihara <yuya@tcha.org>
parents:
36794
diff
changeset
|
1635 # 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
|
1636 # 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
|
1637 # 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
|
1638 # 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
|
1639 usereadline = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1640 self._isatty(self._fin) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1641 and self._isatty(self._fout) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1642 and procutil.isstdin(self._fin) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1643 and procutil.isstdout(self._fout) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1644 ) |
36794
fa53a1d1f16e
ui: do not try readline support if fin/fout aren't standard streams
Yuya Nishihara <yuya@tcha.org>
parents:
36791
diff
changeset
|
1645 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
|
1646 try: |
ca0d02222d6a
ui: get readline and prompt to behave better depending on interactivity
Bryan O'Sullivan <bos@serpentine.com>
parents:
4729
diff
changeset
|
1647 # 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
|
1648 # available |
ca0d02222d6a
ui: get readline and prompt to behave better depending on interactivity
Bryan O'Sullivan <bos@serpentine.com>
parents:
4729
diff
changeset
|
1649 import readline |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1650 |
5036
ca0d02222d6a
ui: get readline and prompt to behave better depending on interactivity
Bryan O'Sullivan <bos@serpentine.com>
parents:
4729
diff
changeset
|
1651 # 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
|
1652 readline.read_history_file |
7496
0a27d0db256d
issue1419: catch strange readline import error on windows
Brendan Cully <brendan@kublai.com>
parents:
7320
diff
changeset
|
1653 # 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
|
1654 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
|
1655 usereadline = False |
14614
afccc64eea73
ui: use I/O descriptors internally
Idan Kamara <idankk86@gmail.com>
parents:
14612
diff
changeset
|
1656 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1657 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
|
1658 if not promptopts: |
2d428b859282
readline: provide styled prompt to readline (issue6070)
Kyle Lippincott <spectral@google.com>
parents:
41999
diff
changeset
|
1659 promptopts = {} |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1660 self._writemsgnobuf( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1661 self._fmsgout, prompt, type=b'prompt', **promptopts |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1662 ) |
42119
2d428b859282
readline: provide styled prompt to readline (issue6070)
Kyle Lippincott <spectral@google.com>
parents:
41999
diff
changeset
|
1663 self.flush() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1664 prompt = b' ' |
42119
2d428b859282
readline: provide styled prompt to readline (issue6070)
Kyle Lippincott <spectral@google.com>
parents:
41999
diff
changeset
|
1665 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1666 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
|
1667 |
22291
3b39e1522d8f
ui: add brief comment why raw_input() needs dummy ' ' prompt string
Yuya Nishihara <yuya@tcha.org>
parents:
22205
diff
changeset
|
1668 # 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
|
1669 # - http://bugs.python.org/issue12833 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1670 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
|
1671 if usereadline: |
43377
aaa046919043
ui: flush before prompting for input with readline
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43265
diff
changeset
|
1672 self.flush() |
43118
57efd5bd2ca2
py3: decode prompt string before calling rawinput
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43106
diff
changeset
|
1673 prompt = encoding.strfromlocal(prompt) |
42119
2d428b859282
readline: provide styled prompt to readline (issue6070)
Kyle Lippincott <spectral@google.com>
parents:
41999
diff
changeset
|
1674 line = encoding.strtolocal(pycompat.rawinput(prompt)) |
36796
aa0fc12743c7
ui: adjust Windows workaround to new _readline() code
Yuya Nishihara <yuya@tcha.org>
parents:
36795
diff
changeset
|
1675 # When stdin is in binary mode on Windows, it can cause |
aa0fc12743c7
ui: adjust Windows workaround to new _readline() code
Yuya Nishihara <yuya@tcha.org>
parents:
36795
diff
changeset
|
1676 # raw_input() to emit an extra trailing carriage return |
aa0fc12743c7
ui: adjust Windows workaround to new _readline() code
Yuya Nishihara <yuya@tcha.org>
parents:
36795
diff
changeset
|
1677 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
|
1678 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
|
1679 else: |
42119
2d428b859282
readline: provide styled prompt to readline (issue6070)
Kyle Lippincott <spectral@google.com>
parents:
41999
diff
changeset
|
1680 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
|
1681 self._fout.flush() |
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
1682 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
|
1683 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
|
1684 raise EOFError |
36834
1527f40de3b3
ui: remove any combinations of CR|LF from prompt response
Yuya Nishihara <yuya@tcha.org>
parents:
36796
diff
changeset
|
1685 line = line.rstrip(pycompat.oslinesep) |
14614
afccc64eea73
ui: use I/O descriptors internally
Idan Kamara <idankk86@gmail.com>
parents:
14612
diff
changeset
|
1686 |
5613
2e76e5a23c2b
workaround for raw_input() on Windows
Steve Borho <steve@borho.org>
parents:
5337
diff
changeset
|
1687 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
|
1688 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1689 def prompt(self, msg, default=b"y"): |
9048
86b4a9b0ddda
ui: extract choice from prompt
Simon Heimberg <simohe@besonet.ch>
parents:
8940
diff
changeset
|
1690 """Prompt user with msg, read response. |
86b4a9b0ddda
ui: extract choice from prompt
Simon Heimberg <simohe@besonet.ch>
parents:
8940
diff
changeset
|
1691 If ui is not interactive, the default is returned. |
5751 | 1692 """ |
40592
83e571ea06a9
commandserver: attach prompt default and choices to message
Yuya Nishihara <yuya@tcha.org>
parents:
40590
diff
changeset
|
1693 return self._prompt(msg, default=default) |
83e571ea06a9
commandserver: attach prompt default and choices to message
Yuya Nishihara <yuya@tcha.org>
parents:
40590
diff
changeset
|
1694 |
83e571ea06a9
commandserver: attach prompt default and choices to message
Yuya Nishihara <yuya@tcha.org>
parents:
40590
diff
changeset
|
1695 def _prompt(self, msg, **opts): |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43377
diff
changeset
|
1696 default = opts['default'] |
8208
32a2a1e244f1
ui: make interactive a method
Matt Mackall <mpm@selenic.com>
parents:
8206
diff
changeset
|
1697 if not self.interactive(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1698 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
|
1699 self._writemsg( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1700 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
|
1701 ) |
7320
8dca507e56ce
ui: log non-interactive default response to stdout when verbose
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
6862
diff
changeset
|
1702 return default |
9048
86b4a9b0ddda
ui: extract choice from prompt
Simon Heimberg <simohe@besonet.ch>
parents:
8940
diff
changeset
|
1703 try: |
42119
2d428b859282
readline: provide styled prompt to readline (issue6070)
Kyle Lippincott <spectral@google.com>
parents:
41999
diff
changeset
|
1704 r = self._readline(prompt=msg, promptopts=opts) |
9048
86b4a9b0ddda
ui: extract choice from prompt
Simon Heimberg <simohe@besonet.ch>
parents:
8940
diff
changeset
|
1705 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
|
1706 r = default |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1707 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
|
1708 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
|
1709 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
|
1710 ) |
9048
86b4a9b0ddda
ui: extract choice from prompt
Simon Heimberg <simohe@besonet.ch>
parents:
8940
diff
changeset
|
1711 return r |
86b4a9b0ddda
ui: extract choice from prompt
Simon Heimberg <simohe@besonet.ch>
parents:
8940
diff
changeset
|
1712 except EOFError: |
26896
5e46123e6c35
error: add structured exception for EOF at prompt
Siddharth Agarwal <sid0@fb.com>
parents:
26820
diff
changeset
|
1713 raise error.ResponseExpected() |
9048
86b4a9b0ddda
ui: extract choice from prompt
Simon Heimberg <simohe@besonet.ch>
parents:
8940
diff
changeset
|
1714 |
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
|
1715 @staticmethod |
e5803150ea1d
ui: add "extractchoices()" to share the logic to extract choices from prompt
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19886
diff
changeset
|
1716 def 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
|
1717 """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
|
1718 |
e5803150ea1d
ui: add "extractchoices()" to share the logic to extract choices from prompt
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19886
diff
changeset
|
1719 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
|
1720 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
|
1721 |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34054
diff
changeset
|
1722 >>> 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
|
1723 ('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
|
1724 >>> 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
|
1725 ('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
|
1726 >>> 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
|
1727 ('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
|
1728 """ |
27392
00aa37c65e0a
ui: try to handle $$ more robustly in prompts (issue4970)
Matt Mackall <mpm@selenic.com>
parents:
26820
diff
changeset
|
1729 |
00aa37c65e0a
ui: try to handle $$ more robustly in prompts (issue4970)
Matt Mackall <mpm@selenic.com>
parents:
26820
diff
changeset
|
1730 # 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
|
1731 # 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
|
1732 # 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
|
1733 # 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
|
1734 # 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
|
1735 m = re.match(br'(?s)(.+?)\$\$([^$]*&[^ $].*)', prompt) |
27392
00aa37c65e0a
ui: try to handle $$ more robustly in prompts (issue4970)
Matt Mackall <mpm@selenic.com>
parents:
26820
diff
changeset
|
1736 msg = m.group(1) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1737 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
|
1738 |
33714
d880a6bcef2f
ui: refactor extractchoices so it doesn't break on Python 3
Augie Fackler <augie@google.com>
parents:
33687
diff
changeset
|
1739 def choicetuple(s): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1740 ampidx = s.index(b'&') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1741 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
|
1742 |
33714
d880a6bcef2f
ui: refactor extractchoices so it doesn't break on Python 3
Augie Fackler <augie@google.com>
parents:
33687
diff
changeset
|
1743 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
|
1744 |
19226
c58b6ab4c26f
ui: merge prompt text components into a singe string
Matt Mackall <mpm@selenic.com>
parents:
19195
diff
changeset
|
1745 def promptchoice(self, prompt, default=0): |
c58b6ab4c26f
ui: merge prompt text components into a singe string
Matt Mackall <mpm@selenic.com>
parents:
19195
diff
changeset
|
1746 """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
|
1747 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
|
1748 |
c58b6ab4c26f
ui: merge prompt text components into a singe string
Matt Mackall <mpm@selenic.com>
parents:
19195
diff
changeset
|
1749 "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
|
1750 |
c58b6ab4c26f
ui: merge prompt text components into a singe string
Matt Mackall <mpm@selenic.com>
parents:
19195
diff
changeset
|
1751 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
|
1752 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
|
1753 returned. |
9048
86b4a9b0ddda
ui: extract choice from prompt
Simon Heimberg <simohe@besonet.ch>
parents:
8940
diff
changeset
|
1754 """ |
19226
c58b6ab4c26f
ui: merge prompt text components into a singe string
Matt Mackall <mpm@selenic.com>
parents:
19195
diff
changeset
|
1755 |
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
|
1756 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
|
1757 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
|
1758 while True: |
40592
83e571ea06a9
commandserver: attach prompt default and choices to message
Yuya Nishihara <yuya@tcha.org>
parents:
40590
diff
changeset
|
1759 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
|
1760 if r.lower() in resps: |
86b4a9b0ddda
ui: extract choice from prompt
Simon Heimberg <simohe@besonet.ch>
parents:
8940
diff
changeset
|
1761 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
|
1762 # 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
|
1763 self._writemsg(self._fmsgout, _(b"unrecognized response\n")) |
9048
86b4a9b0ddda
ui: extract choice from prompt
Simon Heimberg <simohe@besonet.ch>
parents:
8940
diff
changeset
|
1764 |
2281
7761597b5da3
prompt user for http authentication info
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2206
diff
changeset
|
1765 def getpass(self, prompt=None, default=None): |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1766 if not self.interactive(): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1767 return default |
7798
57fee79e5588
catch CTRL-D at password prompt
Steve Borho <steve@borho.org>
parents:
7600
diff
changeset
|
1768 try: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1769 self._writemsg( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1770 self._fmsgerr, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1771 prompt or _(b'password: '), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1772 type=b'prompt', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1773 password=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1774 ) |
21195
9336bc7dca8e
cmdserver: forcibly use L channel to read password input (issue3161)
Yuya Nishihara <yuya@tcha.org>
parents:
21132
diff
changeset
|
1775 # 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
|
1776 # 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
|
1777 with self.timeblockedsection(b'stdio'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1778 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
|
1779 l = self._fin.readline() |
30978
fdecd24ca4dc
ui: log time spent blocked on stdio
Simon Farnsworth <simonfar@fb.com>
parents:
30976
diff
changeset
|
1780 if not l: |
fdecd24ca4dc
ui: log time spent blocked on stdio
Simon Farnsworth <simonfar@fb.com>
parents:
30976
diff
changeset
|
1781 raise EOFError |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1782 return l.rstrip(b'\n') |
30978
fdecd24ca4dc
ui: log time spent blocked on stdio
Simon Farnsworth <simonfar@fb.com>
parents:
30976
diff
changeset
|
1783 else: |
46024
07b0a687c01a
ui: ensure `getpass()` returns bytes
Matt Harbison <matt_harbison@yahoo.com>
parents:
45758
diff
changeset
|
1784 return encoding.strtolocal(getpass.getpass('')) |
7798
57fee79e5588
catch CTRL-D at password prompt
Steve Borho <steve@borho.org>
parents:
7600
diff
changeset
|
1785 except EOFError: |
26896
5e46123e6c35
error: add structured exception for EOF at prompt
Siddharth Agarwal <sid0@fb.com>
parents:
26820
diff
changeset
|
1786 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
|
1787 |
10815
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
1788 def status(self, *msg, **opts): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1789 """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
|
1790 |
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
1791 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
|
1792 """ |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1793 if not self.quiet: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1794 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
|
1795 |
10815
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
1796 def warn(self, *msg, **opts): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1797 """write warning message to output (stderr) |
10815
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
1798 |
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
1799 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
|
1800 """ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1801 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
|
1802 |
afc4ad706f9c
dispatch: making all hg abortions be output with a specific label
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
38767
diff
changeset
|
1803 def error(self, *msg, **opts): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1804 """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
|
1805 |
afc4ad706f9c
dispatch: making all hg abortions be output with a specific label
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
38767
diff
changeset
|
1806 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
|
1807 """ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1808 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
|
1809 |
10815
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
1810 def note(self, *msg, **opts): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1811 """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
|
1812 |
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
1813 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
|
1814 """ |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1815 if self.verbose: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1816 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
|
1817 |
10815
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
1818 def debug(self, *msg, **opts): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1819 """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
|
1820 |
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
1821 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
|
1822 """ |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1823 if self.debugflag: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1824 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
|
1825 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
|
1826 |
43079
5209fc94b982
ui: define (write|status|warn|note)noi18n aliases
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43077
diff
changeset
|
1827 # Aliases to defeat check-code. |
5209fc94b982
ui: define (write|status|warn|note)noi18n aliases
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43077
diff
changeset
|
1828 statusnoi18n = status |
5209fc94b982
ui: define (write|status|warn|note)noi18n aliases
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43077
diff
changeset
|
1829 notenoi18n = note |
5209fc94b982
ui: define (write|status|warn|note)noi18n aliases
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43077
diff
changeset
|
1830 warnnoi18n = warn |
5209fc94b982
ui: define (write|status|warn|note)noi18n aliases
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43077
diff
changeset
|
1831 writenoi18n = write |
5209fc94b982
ui: define (write|status|warn|note)noi18n aliases
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43077
diff
changeset
|
1832 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1833 def edit( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1834 self, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1835 text, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1836 user, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1837 extra=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1838 editform=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1839 pending=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1840 repopath=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1841 action=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1842 ): |
34029
6e6452bc441d
editor: use an unambiguous path suffix for editor files
Michael Bolin <mbolin@fb.com>
parents:
34021
diff
changeset
|
1843 if action is None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1844 self.develwarn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1845 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
|
1846 b'parameter to ui.edit()' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1847 ) |
28635
87f92d6f0bc3
edit: allow to configure the suffix of the temporary filename
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
28633
diff
changeset
|
1848 extra_defaults = { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1849 b'prefix': b'editor', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1850 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
|
1851 } |
27153
3553e40d0770
ui: allow open editor with custom filename
Mykola Nikishov <mn@mn.com.ua>
parents:
27110
diff
changeset
|
1852 if extra is not None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1853 if extra.get(b'suffix') is not None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1854 self.develwarn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1855 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
|
1856 b'ignored by ui.edit()' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1857 ) |
27153
3553e40d0770
ui: allow open editor with custom filename
Mykola Nikishov <mn@mn.com.ua>
parents:
27110
diff
changeset
|
1858 extra_defaults.update(extra) |
3553e40d0770
ui: allow open editor with custom filename
Mykola Nikishov <mn@mn.com.ua>
parents:
27110
diff
changeset
|
1859 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
|
1860 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1861 if action == b'diff': |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1862 suffix = b'.diff' |
34054
3c82b14d2838
editor: file created for diff action should have .diff suffix
Michael Bolin <mbolin@fb.com>
parents:
34029
diff
changeset
|
1863 elif action: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1864 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
|
1865 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1866 suffix = extra[b'suffix'] |
34029
6e6452bc441d
editor: use an unambiguous path suffix for editor files
Michael Bolin <mbolin@fb.com>
parents:
34021
diff
changeset
|
1867 |
30848
7080652af6e6
ui: rename tmpdir parameter to more specific repopath
Sean Farley <sean@farley.io>
parents:
30835
diff
changeset
|
1868 rdir = None |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1869 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
|
1870 rdir = repopath |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1871 (fd, name) = pycompat.mkstemp( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1872 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
|
1873 ) |
1984
df7436f439a0
Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1983
diff
changeset
|
1874 try: |
43876
e5f69e3bb3f6
ui: use a context manager to handle file streams in edit()
Matt Harbison <matt_harbison@yahoo.com>
parents:
43787
diff
changeset
|
1875 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
|
1876 f.write(util.tonativeeol(text)) |
1984
df7436f439a0
Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1983
diff
changeset
|
1877 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1878 environ = {b'HGUSER': user} |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1879 if b'transplant_source' in extra: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1880 environ.update( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1881 {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
|
1882 ) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1883 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
|
1884 if label in extra: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1885 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
|
1886 break |
22205
9fa429723f26
ui: invoke editor for committing with HGEDITFORM environment variable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21955
diff
changeset
|
1887 if editform: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1888 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
|
1889 if pending: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1890 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
|
1891 |
5660
3c80ecdc1bcd
Use VISUAL in addition to EDITOR when choosing the editor to use.
Osku Salerma <osku@iki.fi>
parents:
5613
diff
changeset
|
1892 editor = self.geteditor() |
207 | 1893 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1894 self.system( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1895 b"%s \"%s\"" % (editor, name), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1896 environ=environ, |
45877
ac362d5a7893
errors: introduce CanceledError and use it in a few places
Martin von Zweigbergk <martinvonz@google.com>
parents:
45826
diff
changeset
|
1897 onerr=error.CanceledError, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1898 errprefix=_(b"edit failed"), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1899 blockedtag=b'editor', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1900 ) |
608
d2994b5298fb
Add username/merge/editor to .hgrc
Matt Mackall <mpm@selenic.com>
parents:
565
diff
changeset
|
1901 |
43876
e5f69e3bb3f6
ui: use a context manager to handle file streams in edit()
Matt Harbison <matt_harbison@yahoo.com>
parents:
43787
diff
changeset
|
1902 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
|
1903 t = util.fromnativeeol(f.read()) |
1984
df7436f439a0
Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1983
diff
changeset
|
1904 finally: |
df7436f439a0
Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1983
diff
changeset
|
1905 os.unlink(name) |
662
b55a78595ef6
Pass username to hgeditor, remove temporary file
Radoslaw "AstralStorm" Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
613
diff
changeset
|
1906 |
207 | 1907 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
|
1908 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1909 def system( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1910 self, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1911 cmd, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1912 environ=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1913 cwd=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1914 onerr=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1915 errprefix=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1916 blockedtag=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1917 ): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1918 """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
|
1919 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
|
1920 |
3f8f53190d6a
chg: deduplicate error handling of ui.system()
Yuya Nishihara <yuya@tcha.org>
parents:
31107
diff
changeset
|
1921 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
|
1922 object as exception. |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1923 """ |
30979
fd598149112b
ui: time calls to ui.system
Simon Farnsworth <simonfar@fb.com>
parents:
30978
diff
changeset
|
1924 if blockedtag is None: |
31535
d0f95ecca2ad
ui: restrict length of autogenerated blocked tags
Simon Farnsworth <simonfar@fb.com>
parents:
31532
diff
changeset
|
1925 # 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
|
1926 # the tail end instead |
d0f95ecca2ad
ui: restrict length of autogenerated blocked tags
Simon Farnsworth <simonfar@fb.com>
parents:
31532
diff
changeset
|
1927 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
|
1928 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
|
1929 out = self._fout |
25149
3f0744eeaeaf
cleanup: use __builtins__.any instead of util.any
Augie Fackler <augie@google.com>
parents:
25125
diff
changeset
|
1930 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
|
1931 out = self |
30979
fd598149112b
ui: time calls to ui.system
Simon Farnsworth <simonfar@fb.com>
parents:
30978
diff
changeset
|
1932 with self.timeblockedsection(blockedtag): |
31108
3f8f53190d6a
chg: deduplicate error handling of ui.system()
Yuya Nishihara <yuya@tcha.org>
parents:
31107
diff
changeset
|
1933 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
|
1934 if rc and onerr: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1935 errmsg = b'%s %s' % ( |
44581
b746a22349f9
ui: use "procutil.shellsplit" to parse command
Micha Wiedenmann <mw-u2@posteo.de>
parents:
44159
diff
changeset
|
1936 procutil.shellsplit(cmd)[0], |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1937 procutil.explainexit(rc), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1938 ) |
31108
3f8f53190d6a
chg: deduplicate error handling of ui.system()
Yuya Nishihara <yuya@tcha.org>
parents:
31107
diff
changeset
|
1939 if errprefix: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1940 errmsg = b'%s: %s' % (errprefix, errmsg) |
31108
3f8f53190d6a
chg: deduplicate error handling of ui.system()
Yuya Nishihara <yuya@tcha.org>
parents:
31107
diff
changeset
|
1941 raise onerr(errmsg) |
3f8f53190d6a
chg: deduplicate error handling of ui.system()
Yuya Nishihara <yuya@tcha.org>
parents:
31107
diff
changeset
|
1942 return rc |
31107
fbce78c58f1e
chg: refactor ui.system() to be partly overridden
Yuya Nishihara <yuya@tcha.org>
parents:
31106
diff
changeset
|
1943 |
31108
3f8f53190d6a
chg: deduplicate error handling of ui.system()
Yuya Nishihara <yuya@tcha.org>
parents:
31107
diff
changeset
|
1944 def _runsystem(self, cmd, environ, cwd, out): |
31107
fbce78c58f1e
chg: refactor ui.system() to be partly overridden
Yuya Nishihara <yuya@tcha.org>
parents:
31106
diff
changeset
|
1945 """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
|
1946 extensions like chg)""" |
37120
a8a902d7176e
procutil: bulk-replace function calls to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
37119
diff
changeset
|
1947 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
|
1948 |
18966
5572f688e0a9
ui: add 'force' parameter to traceback() to override the current print setting
Matt Harbison <matt_harbison@yahoo.com>
parents:
18965
diff
changeset
|
1949 def traceback(self, exc=None, force=False): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
1950 """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
|
1951 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
|
1952 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
|
1953 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
|
1954 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
|
1955 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
|
1956 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
|
1957 |
0062508b1900
ui: add support for fully printing chained exception stacks in ui.traceback()
Matt Harbison <matt_harbison@yahoo.com>
parents:
18669
diff
changeset
|
1958 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
|
1959 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
|
1960 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
|
1961 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
|
1962 |
0062508b1900
ui: add support for fully printing chained exception stacks in ui.traceback()
Matt Harbison <matt_harbison@yahoo.com>
parents:
18669
diff
changeset
|
1963 # 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
|
1964 self.write_err( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1965 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
|
1966 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
|
1967 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
|
1968 encoding.strtolocal(''.join(exconly)), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1969 ) |
18965
0062508b1900
ui: add support for fully printing chained exception stacks in ui.traceback()
Matt Harbison <matt_harbison@yahoo.com>
parents:
18669
diff
changeset
|
1970 else: |
25568
c1ff82daed62
ui: flush stderr after printing a non-chained exception for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
25519
diff
changeset
|
1971 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
|
1972 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
|
1973 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
|
1974 |
3c80ecdc1bcd
Use VISUAL in addition to EDITOR when choosing the editor to use.
Osku Salerma <osku@iki.fi>
parents:
5613
diff
changeset
|
1975 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
|
1976 '''return editor to use''' |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1977 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
|
1978 # 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
|
1979 # 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
|
1980 # avoid confusion. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1981 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
|
1982 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
|
1983 # 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
|
1984 # 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
|
1985 # 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
|
1986 # 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
|
1987 editor = b'vim' |
16383
f5dd179bfa4a
plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
16373
diff
changeset
|
1988 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1989 editor = b'vi' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1990 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
|
1991 b"ui", b"editor", editor |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1992 ) |
9153 | 1993 |
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
|
1994 @util.propertycache |
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
|
1995 def _progbar(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
|
1996 """setup the progbar singleton to the ui object""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1997 if ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1998 self.quiet |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
1999 or self.debugflag |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2000 or self.configbool(b'progress', b'disable') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2001 or not progress.shouldprint(self) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2002 ): |
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
|
2003 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
|
2004 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
|
2005 |
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
|
2006 def _progclear(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
|
2007 """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
|
2008 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
|
2009 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
|
2010 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
|
2011 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
|
2012 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2013 def makeprogress(self, topic, unit=b"", total=None): |
41210
929999d963b8
progress: specify updatebar() function by constructor argument
Yuya Nishihara <yuya@tcha.org>
parents:
41142
diff
changeset
|
2014 """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
|
2015 if getattr(self._fmsgerr, 'structured', False): |
929999d963b8
progress: specify updatebar() function by constructor argument
Yuya Nishihara <yuya@tcha.org>
parents:
41142
diff
changeset
|
2016 # 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
|
2017 # raw information |
929999d963b8
progress: specify updatebar() function by constructor argument
Yuya Nishihara <yuya@tcha.org>
parents:
41142
diff
changeset
|
2018 # 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
|
2019 # 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
|
2020 # reduce the cost of transferring progress messages. |
929999d963b8
progress: specify updatebar() function by constructor argument
Yuya Nishihara <yuya@tcha.org>
parents:
41142
diff
changeset
|
2021 def updatebar(topic, pos, item, unit, total): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2022 self._fmsgerr.write( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2023 None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2024 type=b'progress', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2025 topic=topic, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2026 pos=pos, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2027 item=item, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2028 unit=unit, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2029 total=total, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2030 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2031 |
41210
929999d963b8
progress: specify updatebar() function by constructor argument
Yuya Nishihara <yuya@tcha.org>
parents:
41142
diff
changeset
|
2032 elif self._progbar is not None: |
929999d963b8
progress: specify updatebar() function by constructor argument
Yuya Nishihara <yuya@tcha.org>
parents:
41142
diff
changeset
|
2033 updatebar = self._progbar.progress |
929999d963b8
progress: specify updatebar() function by constructor argument
Yuya Nishihara <yuya@tcha.org>
parents:
41142
diff
changeset
|
2034 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2035 |
41210
929999d963b8
progress: specify updatebar() function by constructor argument
Yuya Nishihara <yuya@tcha.org>
parents:
41142
diff
changeset
|
2036 def updatebar(topic, pos, item, unit, total): |
929999d963b8
progress: specify updatebar() function by constructor argument
Yuya Nishihara <yuya@tcha.org>
parents:
41142
diff
changeset
|
2037 pass |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2038 |
41210
929999d963b8
progress: specify updatebar() function by constructor argument
Yuya Nishihara <yuya@tcha.org>
parents:
41142
diff
changeset
|
2039 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
|
2040 |
40730
55b053af7196
ui: manage logger instances and event filtering by core ui
Yuya Nishihara <yuya@tcha.org>
parents:
40678
diff
changeset
|
2041 def getlogger(self, name): |
55b053af7196
ui: manage logger instances and event filtering by core ui
Yuya Nishihara <yuya@tcha.org>
parents:
40678
diff
changeset
|
2042 """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
|
2043 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
|
2044 |
55b053af7196
ui: manage logger instances and event filtering by core ui
Yuya Nishihara <yuya@tcha.org>
parents:
40678
diff
changeset
|
2045 def setlogger(self, name, logger): |
55b053af7196
ui: manage logger instances and event filtering by core ui
Yuya Nishihara <yuya@tcha.org>
parents:
40678
diff
changeset
|
2046 """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
|
2047 |
55b053af7196
ui: manage logger instances and event filtering by core ui
Yuya Nishihara <yuya@tcha.org>
parents:
40678
diff
changeset
|
2048 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
|
2049 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
|
2050 """ |
55b053af7196
ui: manage logger instances and event filtering by core ui
Yuya Nishihara <yuya@tcha.org>
parents:
40678
diff
changeset
|
2051 self._loggers[name] = logger |
55b053af7196
ui: manage logger instances and event filtering by core ui
Yuya Nishihara <yuya@tcha.org>
parents:
40678
diff
changeset
|
2052 |
40760
ffd574c144d2
ui: pass in formatted message to logger.log()
Yuya Nishihara <yuya@tcha.org>
parents:
40759
diff
changeset
|
2053 def log(self, event, msgfmt, *msgargs, **opts): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
2054 """hook for logging facility extensions |
11984 | 2055 |
40678
c72a81bc2e82
ui: unify argument name of ui.log()
Yuya Nishihara <yuya@tcha.org>
parents:
40602
diff
changeset
|
2056 event should be a readily-identifiable subsystem, which will |
11984 | 2057 allow filtering. |
26235
6c962145f523
ui: improve docs on ui.log
Augie Fackler <augie@google.com>
parents:
26189
diff
changeset
|
2058 |
40760
ffd574c144d2
ui: pass in formatted message to logger.log()
Yuya Nishihara <yuya@tcha.org>
parents:
40759
diff
changeset
|
2059 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
|
2060 *msgargs are %-formatted into it. |
26235
6c962145f523
ui: improve docs on ui.log
Augie Fackler <augie@google.com>
parents:
26189
diff
changeset
|
2061 |
6c962145f523
ui: improve docs on ui.log
Augie Fackler <augie@google.com>
parents:
26189
diff
changeset
|
2062 **opts currently has no defined meanings. |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
2063 """ |
40730
55b053af7196
ui: manage logger instances and event filtering by core ui
Yuya Nishihara <yuya@tcha.org>
parents:
40678
diff
changeset
|
2064 if not self._loggers: |
55b053af7196
ui: manage logger instances and event filtering by core ui
Yuya Nishihara <yuya@tcha.org>
parents:
40678
diff
changeset
|
2065 return |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2066 activeloggers = [ |
43104
74802979dd9d
py3: define and use pycompat.itervalues()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43089
diff
changeset
|
2067 l for l in pycompat.itervalues(self._loggers) if l.tracked(event) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2068 ] |
40730
55b053af7196
ui: manage logger instances and event filtering by core ui
Yuya Nishihara <yuya@tcha.org>
parents:
40678
diff
changeset
|
2069 if not activeloggers: |
55b053af7196
ui: manage logger instances and event filtering by core ui
Yuya Nishihara <yuya@tcha.org>
parents:
40678
diff
changeset
|
2070 return |
40760
ffd574c144d2
ui: pass in formatted message to logger.log()
Yuya Nishihara <yuya@tcha.org>
parents:
40759
diff
changeset
|
2071 msg = msgfmt % msgargs |
40761
691c68bc1222
ui: pass in bytes opts dict to logger.log()
Yuya Nishihara <yuya@tcha.org>
parents:
40760
diff
changeset
|
2072 opts = pycompat.byteskwargs(opts) |
40759
fdc6eb1d650d
blackbox: send debug message to logger by core ui
Yuya Nishihara <yuya@tcha.org>
parents:
40730
diff
changeset
|
2073 # 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
|
2074 registeredloggers = self._loggers |
fdc6eb1d650d
blackbox: send debug message to logger by core ui
Yuya Nishihara <yuya@tcha.org>
parents:
40730
diff
changeset
|
2075 self._loggers = {} |
fdc6eb1d650d
blackbox: send debug message to logger by core ui
Yuya Nishihara <yuya@tcha.org>
parents:
40730
diff
changeset
|
2076 try: |
fdc6eb1d650d
blackbox: send debug message to logger by core ui
Yuya Nishihara <yuya@tcha.org>
parents:
40730
diff
changeset
|
2077 for logger in activeloggers: |
fdc6eb1d650d
blackbox: send debug message to logger by core ui
Yuya Nishihara <yuya@tcha.org>
parents:
40730
diff
changeset
|
2078 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
|
2079 finally: |
fdc6eb1d650d
blackbox: send debug message to logger by core ui
Yuya Nishihara <yuya@tcha.org>
parents:
40730
diff
changeset
|
2080 self._loggers = registeredloggers |
11984 | 2081 |
10815
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
2082 def label(self, msg, label): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
2083 """style msg based on supplied label |
10815
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
2084 |
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
|
2085 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
|
2086 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
|
2087 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
|
2088 |
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
2089 ui.write(s, 'label') is equivalent to |
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
2090 ui.write(ui.label(s, 'label')). |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45929
diff
changeset
|
2091 """ |
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
|
2092 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
|
2093 return color.colorlabel(self, msg, label) |
10815
32b213b9b22c
ui: add ui.write() output labeling API
Brodie Rao <brodie@bitheap.org>
parents:
10567
diff
changeset
|
2094 return msg |
24250
9c32eea2ca04
ui: represent paths as classes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23269
diff
changeset
|
2095 |
29095
3f33831a9202
develwarn: move config gating inside the develwarn function
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29082
diff
changeset
|
2096 def develwarn(self, msg, stacklevel=1, config=None): |
27274
82910fdc216f
ui: add a 'stacklevel' argument to 'develwarn'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27266
diff
changeset
|
2097 """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
|
2098 |
82910fdc216f
ui: add a 'stacklevel' argument to 'develwarn'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27266
diff
changeset
|
2099 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
|
2100 stack. |
82910fdc216f
ui: add a 'stacklevel' argument to 'develwarn'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27266
diff
changeset
|
2101 """ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2102 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
|
2103 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
|
2104 return |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2105 msg = b'devel-warn: ' + msg |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2106 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
|
2107 if self.tracebackflag: |
40543
7bffbbe03e90
ui: hide fin/fout/ferr attributes behind @property functions
Yuya Nishihara <yuya@tcha.org>
parents:
40542
diff
changeset
|
2108 util.debugstacktrace(msg, stacklevel, self._ferr, self._fout) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2109 self.log( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2110 b'develwarn', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2111 b'%s at:\n%s' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2112 % (msg, b''.join(util.getstackframes(stacklevel))), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2113 ) |
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
|
2114 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
|
2115 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
|
2116 calframe = inspect.getouterframes(curframe, 2) |
36127
df1760b58fda
ui: convert stack traces to sysbytes before logging
Augie Fackler <augie@google.com>
parents:
36126
diff
changeset
|
2117 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
|
2118 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
|
2119 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
|
2120 self.log( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2121 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
|
2122 ) |
43991
e3ce3731d621
ui: delete local variables instead of setting to `None`
Matt Harbison <matt_harbison@yahoo.com>
parents:
43910
diff
changeset
|
2123 |
e3ce3731d621
ui: delete local variables instead of setting to `None`
Matt Harbison <matt_harbison@yahoo.com>
parents:
43910
diff
changeset
|
2124 # avoid cycles |
e3ce3731d621
ui: delete local variables instead of setting to `None`
Matt Harbison <matt_harbison@yahoo.com>
parents:
43910
diff
changeset
|
2125 del curframe |
e3ce3731d621
ui: delete local variables instead of setting to `None`
Matt Harbison <matt_harbison@yahoo.com>
parents:
43910
diff
changeset
|
2126 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
|
2127 |
35923
efbd04238029
cmdutil: convert _revertprefetch() to a generic stored file hook (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
35911
diff
changeset
|
2128 def deprecwarn(self, msg, version, stacklevel=2): |
27275
f2cd240f2f7c
ui: add a 'deprecwarn' helper to issue deprecation warnings
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27274
diff
changeset
|
2129 """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
|
2130 |
f2cd240f2f7c
ui: add a 'deprecwarn' helper to issue deprecation warnings
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27274
diff
changeset
|
2131 - 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
|
2132 - 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
|
2133 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2134 if not ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2135 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
|
2136 or self.configbool(b'devel', b'deprec-warn') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2137 ): |
29082
77de985d7c91
deprecation: gate deprecation warning behind devel configuration
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
28962
diff
changeset
|
2138 return |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2139 msg += ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2140 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
|
2141 b" update your code.)" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2142 ) % version |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2143 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
|
2144 |
30832
da5fa0f13a41
ui: introduce an experimental dict of exportable environment variables
Matt Harbison <matt_harbison@yahoo.com>
parents:
30814
diff
changeset
|
2145 def exportableenviron(self): |
da5fa0f13a41
ui: introduce an experimental dict of exportable environment variables
Matt Harbison <matt_harbison@yahoo.com>
parents:
30814
diff
changeset
|
2146 """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
|
2147 hgweb. |
da5fa0f13a41
ui: introduce an experimental dict of exportable environment variables
Matt Harbison <matt_harbison@yahoo.com>
parents:
30814
diff
changeset
|
2148 """ |
da5fa0f13a41
ui: introduce an experimental dict of exportable environment variables
Matt Harbison <matt_harbison@yahoo.com>
parents:
30814
diff
changeset
|
2149 return self._exportableenviron |
da5fa0f13a41
ui: introduce an experimental dict of exportable environment variables
Matt Harbison <matt_harbison@yahoo.com>
parents:
30814
diff
changeset
|
2150 |
30480
b0a8337ba9af
ui: add configoverride context manager
Kostia Balytskyi <ikostia@fb.com>
parents:
30473
diff
changeset
|
2151 @contextlib.contextmanager |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2152 def configoverride(self, overrides, source=b""): |
30480
b0a8337ba9af
ui: add configoverride context manager
Kostia Balytskyi <ikostia@fb.com>
parents:
30473
diff
changeset
|
2153 """Context manager for temporary config overrides |
b0a8337ba9af
ui: add configoverride context manager
Kostia Balytskyi <ikostia@fb.com>
parents:
30473
diff
changeset
|
2154 `overrides` must be a dict of the following structure: |
b0a8337ba9af
ui: add configoverride context manager
Kostia Balytskyi <ikostia@fb.com>
parents:
30473
diff
changeset
|
2155 {(section, name) : value}""" |
b0a8337ba9af
ui: add configoverride context manager
Kostia Balytskyi <ikostia@fb.com>
parents:
30473
diff
changeset
|
2156 backups = {} |
30537
4b0e6677eed1
ui: use try..finally in configoverride
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30519
diff
changeset
|
2157 try: |
4b0e6677eed1
ui: use try..finally in configoverride
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30519
diff
changeset
|
2158 for (section, name), value in overrides.items(): |
4b0e6677eed1
ui: use try..finally in configoverride
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30519
diff
changeset
|
2159 backups[(section, name)] = self.backupconfig(section, name) |
4b0e6677eed1
ui: use try..finally in configoverride
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30519
diff
changeset
|
2160 self.setconfig(section, name, value, source) |
4b0e6677eed1
ui: use try..finally in configoverride
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30519
diff
changeset
|
2161 yield |
4b0e6677eed1
ui: use try..finally in configoverride
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30519
diff
changeset
|
2162 finally: |
4b0e6677eed1
ui: use try..finally in configoverride
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30519
diff
changeset
|
2163 for __, backup in backups.items(): |
4b0e6677eed1
ui: use try..finally in configoverride
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30519
diff
changeset
|
2164 self.restoreconfig(backup) |
4b0e6677eed1
ui: use try..finally in configoverride
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30519
diff
changeset
|
2165 # 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
|
2166 # 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
|
2167 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
|
2168 self.fixconfig(section=b'ui') |
30480
b0a8337ba9af
ui: add configoverride context manager
Kostia Balytskyi <ikostia@fb.com>
parents:
30473
diff
changeset
|
2169 |
45061
02b17231f6c3
util: provide a helper function to estimate RAM size
Joerg Sonnenberger <joerg@bec.de>
parents:
45033
diff
changeset
|
2170 def estimatememory(self): |
02b17231f6c3
util: provide a helper function to estimate RAM size
Joerg Sonnenberger <joerg@bec.de>
parents:
45033
diff
changeset
|
2171 """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
|
2172 |
02b17231f6c3
util: provide a helper function to estimate RAM size
Joerg Sonnenberger <joerg@bec.de>
parents:
45033
diff
changeset
|
2173 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
|
2174 no estimate can be computed. |
02b17231f6c3
util: provide a helper function to estimate RAM size
Joerg Sonnenberger <joerg@bec.de>
parents:
45033
diff
changeset
|
2175 """ |
02b17231f6c3
util: provide a helper function to estimate RAM size
Joerg Sonnenberger <joerg@bec.de>
parents:
45033
diff
changeset
|
2176 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
|
2177 if value is not None: |
02b17231f6c3
util: provide a helper function to estimate RAM size
Joerg Sonnenberger <joerg@bec.de>
parents:
45033
diff
changeset
|
2178 try: |
02b17231f6c3
util: provide a helper function to estimate RAM size
Joerg Sonnenberger <joerg@bec.de>
parents:
45033
diff
changeset
|
2179 return util.sizetoint(value) |
02b17231f6c3
util: provide a helper function to estimate RAM size
Joerg Sonnenberger <joerg@bec.de>
parents:
45033
diff
changeset
|
2180 except error.ParseError: |
02b17231f6c3
util: provide a helper function to estimate RAM size
Joerg Sonnenberger <joerg@bec.de>
parents:
45033
diff
changeset
|
2181 raise error.ConfigError( |
02b17231f6c3
util: provide a helper function to estimate RAM size
Joerg Sonnenberger <joerg@bec.de>
parents:
45033
diff
changeset
|
2182 _(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
|
2183 ) |
02b17231f6c3
util: provide a helper function to estimate RAM size
Joerg Sonnenberger <joerg@bec.de>
parents:
45033
diff
changeset
|
2184 return util._estimatememory() |
02b17231f6c3
util: provide a helper function to estimate RAM size
Joerg Sonnenberger <joerg@bec.de>
parents:
45033
diff
changeset
|
2185 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2186 |
25498
7a5335ed7e1a
progress: move the singleton logic to the ui module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25363
diff
changeset
|
2187 # 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
|
2188 # competing progress bars when multiple UI objects get created |
7a5335ed7e1a
progress: move the singleton logic to the ui module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25363
diff
changeset
|
2189 _progresssingleton = None |
7a5335ed7e1a
progress: move the singleton logic to the ui module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25363
diff
changeset
|
2190 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2191 |
25498
7a5335ed7e1a
progress: move the singleton logic to the ui module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25363
diff
changeset
|
2192 def getprogbar(ui): |
7a5335ed7e1a
progress: move the singleton logic to the ui module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25363
diff
changeset
|
2193 global _progresssingleton |
7a5335ed7e1a
progress: move the singleton logic to the ui module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25363
diff
changeset
|
2194 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
|
2195 # 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
|
2196 # 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
|
2197 _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
|
2198 return _progresssingleton |
34351
0e4bed5c5c38
ui: check for progress singleton when clearing progress bar (issue5684)
Mark Thomas <mbthomas@fb.com>
parents:
33755
diff
changeset
|
2199 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2200 |
34351
0e4bed5c5c38
ui: check for progress singleton when clearing progress bar (issue5684)
Mark Thomas <mbthomas@fb.com>
parents:
33755
diff
changeset
|
2201 def haveprogbar(): |
0e4bed5c5c38
ui: check for progress singleton when clearing progress bar (issue5684)
Mark Thomas <mbthomas@fb.com>
parents:
33755
diff
changeset
|
2202 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
|
2203 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2204 |
40547
840cd57cde32
ui: add config knob to redirect status messages to stderr (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40543
diff
changeset
|
2205 def _selectmsgdests(ui): |
840cd57cde32
ui: add config knob to redirect status messages to stderr (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40543
diff
changeset
|
2206 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
|
2207 if name == b'channel': |
054d0fcba2c4
commandserver: add experimental option to use separate message channel
Yuya Nishihara <yuya@tcha.org>
parents:
40587
diff
changeset
|
2208 if ui.fmsg: |
054d0fcba2c4
commandserver: add experimental option to use separate message channel
Yuya Nishihara <yuya@tcha.org>
parents:
40587
diff
changeset
|
2209 return ui.fmsg, ui.fmsg |
054d0fcba2c4
commandserver: add experimental option to use separate message channel
Yuya Nishihara <yuya@tcha.org>
parents:
40587
diff
changeset
|
2210 else: |
054d0fcba2c4
commandserver: add experimental option to use separate message channel
Yuya Nishihara <yuya@tcha.org>
parents:
40587
diff
changeset
|
2211 # 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
|
2212 # messages can be printed |
054d0fcba2c4
commandserver: add experimental option to use separate message channel
Yuya Nishihara <yuya@tcha.org>
parents:
40587
diff
changeset
|
2213 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
|
2214 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
|
2215 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
|
2216 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
|
2217 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
|
2218 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
|
2219 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42672
diff
changeset
|
2220 |
40590
83dd8c63a0c6
ui: extract helpers to write message with type or label
Yuya Nishihara <yuya@tcha.org>
parents:
40589
diff
changeset
|
2221 def _writemsgwith(write, dest, *args, **opts): |
83dd8c63a0c6
ui: extract helpers to write message with type or label
Yuya Nishihara <yuya@tcha.org>
parents:
40589
diff
changeset
|
2222 """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
|
2223 |
83dd8c63a0c6
ui: extract helpers to write message with type or label
Yuya Nishihara <yuya@tcha.org>
parents:
40589
diff
changeset
|
2224 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
|
2225 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
|
2226 """ |
83dd8c63a0c6
ui: extract helpers to write message with type or label
Yuya Nishihara <yuya@tcha.org>
parents:
40589
diff
changeset
|
2227 # 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
|
2228 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
|
2229 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
|
2230 write(dest, *args, **opts) |