Mercurial > public > mercurial-scm > hg-stable
annotate mercurial/dispatch.py @ 52759:8780d5707812
dispatch: restore `--config` can't be abbreviated message in case of ambiguity
This feels kind of gross, in part because it's a surprising amount of code for
a specific edge case, and in part because it assumes some implementation
details. But I don't see a better way, since `getopt.long_has_args()` will
create a list of all known long options that start with the current option, and
raise errors of this type if the list is either empty or has more than one
element. There's not a programmatic way to tell the difference between these
two aside from parsing the message, so we replicate the check here and raise
the expected exception in the case of ambiguity. Otherwise, the original
expection is re-raised.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Thu, 06 Feb 2025 00:56:25 -0500 |
parents | 25b344f2aeef |
children |
rev | line source |
---|---|
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1 # dispatch.py - command dispatching for mercurial |
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
2 # |
46819
d4ba4d51f85f
contributor: change mentions of mpm to olivia
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46414
diff
changeset
|
3 # Copyright 2005-2007 Olivia Mackall <olivia@selenic.com> |
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
4 # |
8225
46293a0c7e9f
updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents:
8206
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. |
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
7 |
51901
f4733654f144
typing: add `from __future__ import annotations` to most files
Matt Harbison <matt_harbison@yahoo.com>
parents:
51900
diff
changeset
|
8 from __future__ import annotations |
25932
d491f289045f
dispatch: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25834
diff
changeset
|
9 |
d491f289045f
dispatch: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25834
diff
changeset
|
10 import errno |
30581
541949a10a68
fancyopts: switch from fancyopts.getopt.* to getopt.*
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30564
diff
changeset
|
11 import getopt |
44655
02fa5392bab6
dispatch: force \n for newlines on sys.std* streams (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
44470
diff
changeset
|
12 import io |
25932
d491f289045f
dispatch: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25834
diff
changeset
|
13 import os |
d491f289045f
dispatch: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25834
diff
changeset
|
14 import pdb |
d491f289045f
dispatch: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25834
diff
changeset
|
15 import re |
d491f289045f
dispatch: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25834
diff
changeset
|
16 import signal |
d491f289045f
dispatch: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25834
diff
changeset
|
17 import sys |
d491f289045f
dispatch: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25834
diff
changeset
|
18 import traceback |
d491f289045f
dispatch: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25834
diff
changeset
|
19 |
52758
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
20 from typing import ( |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
21 Iterable, |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
22 ) |
25932
d491f289045f
dispatch: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25834
diff
changeset
|
23 |
d491f289045f
dispatch: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25834
diff
changeset
|
24 from .i18n import _ |
d491f289045f
dispatch: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25834
diff
changeset
|
25 |
39283
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
26 from hgdemandimport import tracing |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
27 |
25932
d491f289045f
dispatch: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25834
diff
changeset
|
28 from . import ( |
d491f289045f
dispatch: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25834
diff
changeset
|
29 cmdutil, |
30657
b2be4ccaff1d
color: load 'colortable' from extension using an 'extraloader'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30591
diff
changeset
|
30 color, |
25932
d491f289045f
dispatch: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25834
diff
changeset
|
31 commands, |
52758
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
32 config as configmod, |
25932
d491f289045f
dispatch: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25834
diff
changeset
|
33 demandimport, |
d491f289045f
dispatch: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25834
diff
changeset
|
34 encoding, |
d491f289045f
dispatch: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25834
diff
changeset
|
35 error, |
d491f289045f
dispatch: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25834
diff
changeset
|
36 extensions, |
d491f289045f
dispatch: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25834
diff
changeset
|
37 fancyopts, |
31080
ab20491b1760
dispatch: rearrange 'unknown command' code to better employ pager
Augie Fackler <augie@google.com>
parents:
31047
diff
changeset
|
38 help, |
25932
d491f289045f
dispatch: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25834
diff
changeset
|
39 hg, |
d491f289045f
dispatch: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25834
diff
changeset
|
40 hook, |
29792
2654a0aac80d
profiling: move profiling code from dispatch.py (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29773
diff
changeset
|
41 profiling, |
30477
7f2b18c34c02
py3: use pycompat.sysargv in dispatch.run()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30411
diff
changeset
|
42 pycompat, |
40490
444861dc1e55
help: displaying documented aliases by default
rdamazio@google.com
parents:
40402
diff
changeset
|
43 registrar, |
30529
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30528
diff
changeset
|
44 scmutil, |
25932
d491f289045f
dispatch: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25834
diff
changeset
|
45 ui as uimod, |
d491f289045f
dispatch: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25834
diff
changeset
|
46 util, |
d491f289045f
dispatch: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25834
diff
changeset
|
47 ) |
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
48 |
52447
0a81f3ef054c
config: move `rcutil` module under a new `mercurial.configuration` module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51901
diff
changeset
|
49 from .configuration import rcutil |
37087
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36752
diff
changeset
|
50 from .utils import ( |
37122
d4a2e0d5d042
procutil: bulk-replace util.std* to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
37087
diff
changeset
|
51 procutil, |
37087
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36752
diff
changeset
|
52 stringutil, |
46957
e7d082e4ace6
dispatch: use the new API to resolve --repository
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46819
diff
changeset
|
53 urlutil, |
37087
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36752
diff
changeset
|
54 ) |
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36752
diff
changeset
|
55 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
56 |
49037
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
49004
diff
changeset
|
57 class request: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
58 def __init__( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
59 self, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
60 args, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
61 ui=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
62 repo=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
63 fin=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
64 fout=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
65 ferr=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
66 fmsg=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
67 prereposetups=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
68 ): |
14438
08bfec2ef031
dispatch: wrap dispatch related information in a request class
Idan Kamara <idankk86@gmail.com>
parents:
14286
diff
changeset
|
69 self.args = args |
14439
80c599eee3f3
dispatch: use the request to store the ui object
Idan Kamara <idankk86@gmail.com>
parents:
14438
diff
changeset
|
70 self.ui = ui |
14510
eccbb9980ada
dispatch: add repo to the request
Idan Kamara <idankk86@gmail.com>
parents:
14439
diff
changeset
|
71 self.repo = repo |
14438
08bfec2ef031
dispatch: wrap dispatch related information in a request class
Idan Kamara <idankk86@gmail.com>
parents:
14286
diff
changeset
|
72 |
14613
ea8938d3a5aa
dispatch: add I/O descriptors to the request
Idan Kamara <idankk86@gmail.com>
parents:
14601
diff
changeset
|
73 # input/output/error streams |
ea8938d3a5aa
dispatch: add I/O descriptors to the request
Idan Kamara <idankk86@gmail.com>
parents:
14601
diff
changeset
|
74 self.fin = fin |
ea8938d3a5aa
dispatch: add I/O descriptors to the request
Idan Kamara <idankk86@gmail.com>
parents:
14601
diff
changeset
|
75 self.fout = fout |
ea8938d3a5aa
dispatch: add I/O descriptors to the request
Idan Kamara <idankk86@gmail.com>
parents:
14601
diff
changeset
|
76 self.ferr = ferr |
40634
5542bc9125c9
dispatch: pass around ui.fmsg channel
Yuya Nishihara <yuya@tcha.org>
parents:
40490
diff
changeset
|
77 # separate stream for status/error messages |
5542bc9125c9
dispatch: pass around ui.fmsg channel
Yuya Nishihara <yuya@tcha.org>
parents:
40490
diff
changeset
|
78 self.fmsg = fmsg |
14613
ea8938d3a5aa
dispatch: add I/O descriptors to the request
Idan Kamara <idankk86@gmail.com>
parents:
14601
diff
changeset
|
79 |
35233
6e6d0a5b88e6
dispatch: replace _earlyreq*() with new fancyopts-based parser
Yuya Nishihara <yuya@tcha.org>
parents:
35232
diff
changeset
|
80 # remember options pre-parsed by _earlyparseopts() |
34982
d9aba3730d30
dispatch: abort if early boolean options can't be parsed
Yuya Nishihara <yuya@tcha.org>
parents:
34981
diff
changeset
|
81 self.earlyoptions = {} |
d9aba3730d30
dispatch: abort if early boolean options can't be parsed
Yuya Nishihara <yuya@tcha.org>
parents:
34981
diff
changeset
|
82 |
32418
71e735bd8170
dispatch: make request accept additional reposetups
Jun Wu <quark@fb.com>
parents:
32416
diff
changeset
|
83 # reposetups which run before extensions, useful for chg to pre-fill |
71e735bd8170
dispatch: make request accept additional reposetups
Jun Wu <quark@fb.com>
parents:
32416
diff
changeset
|
84 # low-level repo state (for example, changelog) before extensions. |
71e735bd8170
dispatch: make request accept additional reposetups
Jun Wu <quark@fb.com>
parents:
32416
diff
changeset
|
85 self.prereposetups = prereposetups or [] |
71e735bd8170
dispatch: make request accept additional reposetups
Jun Wu <quark@fb.com>
parents:
32416
diff
changeset
|
86 |
40402
106adc261492
logtoprocess: sends the canonical command name to the subprocess
Boris Feld <boris.feld@octobus.net>
parents:
39823
diff
changeset
|
87 # store the parsed and canonical command |
106adc261492
logtoprocess: sends the canonical command name to the subprocess
Boris Feld <boris.feld@octobus.net>
parents:
39823
diff
changeset
|
88 self.canonical_command = None |
106adc261492
logtoprocess: sends the canonical command name to the subprocess
Boris Feld <boris.feld@octobus.net>
parents:
39823
diff
changeset
|
89 |
51858
460e80488cf0
typing: lock in correct changes from pytype 2023.04.11 -> 2023.06.16
Matt Harbison <matt_harbison@yahoo.com>
parents:
51380
diff
changeset
|
90 def _runexithandlers(self) -> None: |
31956
c13ff31818b0
ui: add special-purpose atexit functionality
Bryan O'Sullivan <bryano@fb.com>
parents:
31634
diff
changeset
|
91 exc = None |
c13ff31818b0
ui: add special-purpose atexit functionality
Bryan O'Sullivan <bryano@fb.com>
parents:
31634
diff
changeset
|
92 handlers = self.ui._exithandlers |
c13ff31818b0
ui: add special-purpose atexit functionality
Bryan O'Sullivan <bryano@fb.com>
parents:
31634
diff
changeset
|
93 try: |
c13ff31818b0
ui: add special-purpose atexit functionality
Bryan O'Sullivan <bryano@fb.com>
parents:
31634
diff
changeset
|
94 while handlers: |
c13ff31818b0
ui: add special-purpose atexit functionality
Bryan O'Sullivan <bryano@fb.com>
parents:
31634
diff
changeset
|
95 func, args, kwargs = handlers.pop() |
c13ff31818b0
ui: add special-purpose atexit functionality
Bryan O'Sullivan <bryano@fb.com>
parents:
31634
diff
changeset
|
96 try: |
c13ff31818b0
ui: add special-purpose atexit functionality
Bryan O'Sullivan <bryano@fb.com>
parents:
31634
diff
changeset
|
97 func(*args, **kwargs) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
98 except: # re-raises below |
31956
c13ff31818b0
ui: add special-purpose atexit functionality
Bryan O'Sullivan <bryano@fb.com>
parents:
31634
diff
changeset
|
99 if exc is None: |
c13ff31818b0
ui: add special-purpose atexit functionality
Bryan O'Sullivan <bryano@fb.com>
parents:
31634
diff
changeset
|
100 exc = sys.exc_info()[1] |
43080
86e4daa2d54c
cleanup: mark some ui.(status|note|warn|write) calls as not needing i18n
Augie Fackler <augie@google.com>
parents:
43077
diff
changeset
|
101 self.ui.warnnoi18n(b'error in exit handlers:\n') |
31956
c13ff31818b0
ui: add special-purpose atexit functionality
Bryan O'Sullivan <bryano@fb.com>
parents:
31634
diff
changeset
|
102 self.ui.traceback(force=True) |
c13ff31818b0
ui: add special-purpose atexit functionality
Bryan O'Sullivan <bryano@fb.com>
parents:
31634
diff
changeset
|
103 finally: |
c13ff31818b0
ui: add special-purpose atexit functionality
Bryan O'Sullivan <bryano@fb.com>
parents:
31634
diff
changeset
|
104 if exc is not None: |
c13ff31818b0
ui: add special-purpose atexit functionality
Bryan O'Sullivan <bryano@fb.com>
parents:
31634
diff
changeset
|
105 raise exc |
c13ff31818b0
ui: add special-purpose atexit functionality
Bryan O'Sullivan <bryano@fb.com>
parents:
31634
diff
changeset
|
106 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
107 |
46102
49b6910217f9
dispatch: move IOError handling and flushing of streams to `dispatch()`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46087
diff
changeset
|
108 def _flushstdio(ui, err): |
46087
ac9de799d390
commandserver: handle IOError related to flushing of streams
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46085
diff
changeset
|
109 status = None |
ac9de799d390
commandserver: handle IOError related to flushing of streams
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46085
diff
changeset
|
110 # In all cases we try to flush stdio streams. |
50951
d718eddf01d9
safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50604
diff
changeset
|
111 if hasattr(ui, 'fout'): |
46087
ac9de799d390
commandserver: handle IOError related to flushing of streams
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46085
diff
changeset
|
112 assert ui is not None # help pytype |
ac9de799d390
commandserver: handle IOError related to flushing of streams
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46085
diff
changeset
|
113 assert ui.fout is not None # help pytype |
ac9de799d390
commandserver: handle IOError related to flushing of streams
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46085
diff
changeset
|
114 try: |
ac9de799d390
commandserver: handle IOError related to flushing of streams
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46085
diff
changeset
|
115 ui.fout.flush() |
52665
24ee91ba9aa8
pyupgrade: drop usage of py3 aliases for `OSError`
Matt Harbison <matt_harbison@yahoo.com>
parents:
52457
diff
changeset
|
116 except OSError as e: |
46087
ac9de799d390
commandserver: handle IOError related to flushing of streams
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46085
diff
changeset
|
117 err = e |
ac9de799d390
commandserver: handle IOError related to flushing of streams
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46085
diff
changeset
|
118 status = -1 |
ac9de799d390
commandserver: handle IOError related to flushing of streams
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46085
diff
changeset
|
119 |
50951
d718eddf01d9
safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50604
diff
changeset
|
120 if hasattr(ui, 'ferr'): |
46087
ac9de799d390
commandserver: handle IOError related to flushing of streams
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46085
diff
changeset
|
121 assert ui is not None # help pytype |
ac9de799d390
commandserver: handle IOError related to flushing of streams
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46085
diff
changeset
|
122 assert ui.ferr is not None # help pytype |
ac9de799d390
commandserver: handle IOError related to flushing of streams
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46085
diff
changeset
|
123 try: |
ac9de799d390
commandserver: handle IOError related to flushing of streams
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46085
diff
changeset
|
124 if err is not None and err.errno != errno.EPIPE: |
ac9de799d390
commandserver: handle IOError related to flushing of streams
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46085
diff
changeset
|
125 ui.ferr.write( |
ac9de799d390
commandserver: handle IOError related to flushing of streams
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46085
diff
changeset
|
126 b'abort: %s\n' % encoding.strtolocal(err.strerror) |
ac9de799d390
commandserver: handle IOError related to flushing of streams
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46085
diff
changeset
|
127 ) |
ac9de799d390
commandserver: handle IOError related to flushing of streams
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46085
diff
changeset
|
128 ui.ferr.flush() |
ac9de799d390
commandserver: handle IOError related to flushing of streams
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46085
diff
changeset
|
129 # There's not much we can do about an I/O error here. So (possibly) |
ac9de799d390
commandserver: handle IOError related to flushing of streams
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46085
diff
changeset
|
130 # change the status code and move on. |
52665
24ee91ba9aa8
pyupgrade: drop usage of py3 aliases for `OSError`
Matt Harbison <matt_harbison@yahoo.com>
parents:
52457
diff
changeset
|
131 except OSError: |
46087
ac9de799d390
commandserver: handle IOError related to flushing of streams
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46085
diff
changeset
|
132 status = -1 |
ac9de799d390
commandserver: handle IOError related to flushing of streams
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46085
diff
changeset
|
133 |
ac9de799d390
commandserver: handle IOError related to flushing of streams
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46085
diff
changeset
|
134 return status |
ac9de799d390
commandserver: handle IOError related to flushing of streams
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46085
diff
changeset
|
135 |
ac9de799d390
commandserver: handle IOError related to flushing of streams
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46085
diff
changeset
|
136 |
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
137 def run(): |
43807
be8552f25cab
cleanup: fix docstring formatting
Matt Harbison <matt_harbison@yahoo.com>
parents:
43746
diff
changeset
|
138 """run the command in sys.argv""" |
31960
71dcd4a4fa2f
stdio: catch StdioError in dispatch.run and clean up appropriately
Bryan O'Sullivan <bryano@fb.com>
parents:
31958
diff
changeset
|
139 try: |
45101
9e6b86a8f438
dispatch: indent run() function
Yuya Nishihara <yuya@tcha.org>
parents:
44655
diff
changeset
|
140 initstdio() |
9e6b86a8f438
dispatch: indent run() function
Yuya Nishihara <yuya@tcha.org>
parents:
44655
diff
changeset
|
141 with tracing.log('parse args into request'): |
9e6b86a8f438
dispatch: indent run() function
Yuya Nishihara <yuya@tcha.org>
parents:
44655
diff
changeset
|
142 req = request(pycompat.sysargv[1:]) |
38037
e9c588802529
dispatch: minor code refactor
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37988
diff
changeset
|
143 |
46102
49b6910217f9
dispatch: move IOError handling and flushing of streams to `dispatch()`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46087
diff
changeset
|
144 status = dispatch(req) |
45101
9e6b86a8f438
dispatch: indent run() function
Yuya Nishihara <yuya@tcha.org>
parents:
44655
diff
changeset
|
145 _silencestdio() |
45102
efcc87d37f4d
dispatch: handle late KeyboardInterrupt occurred in run()
Yuya Nishihara <yuya@tcha.org>
parents:
45101
diff
changeset
|
146 except KeyboardInterrupt: |
efcc87d37f4d
dispatch: handle late KeyboardInterrupt occurred in run()
Yuya Nishihara <yuya@tcha.org>
parents:
45101
diff
changeset
|
147 # Catch early/late KeyboardInterrupt as last ditch. Here nothing will |
efcc87d37f4d
dispatch: handle late KeyboardInterrupt occurred in run()
Yuya Nishihara <yuya@tcha.org>
parents:
45101
diff
changeset
|
148 # be printed to console to avoid another IOError/KeyboardInterrupt. |
efcc87d37f4d
dispatch: handle late KeyboardInterrupt occurred in run()
Yuya Nishihara <yuya@tcha.org>
parents:
45101
diff
changeset
|
149 status = -1 |
31960
71dcd4a4fa2f
stdio: catch StdioError in dispatch.run and clean up appropriately
Bryan O'Sullivan <bryano@fb.com>
parents:
31958
diff
changeset
|
150 sys.exit(status & 255) |
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
151 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
152 |
48982
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
153 def initstdio(): |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
154 # stdio streams on Python 3 are io.TextIOWrapper instances proxying another |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
155 # buffer. These streams will normalize \n to \r\n by default. Mercurial's |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
156 # preferred mechanism for writing output (ui.write()) uses io.BufferedWriter |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
157 # instances, which write to the underlying stdio file descriptor in binary |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
158 # mode. ui.write() uses \n for line endings and no line ending normalization |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
159 # is attempted through this interface. This "just works," even if the system |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
160 # preferred line ending is not \n. |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
161 # |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
162 # But some parts of Mercurial (e.g. hooks) can still send data to sys.stdout |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
163 # and sys.stderr. They will inherit the line ending normalization settings, |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
164 # potentially causing e.g. \r\n to be emitted. Since emitting \n should |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
165 # "just work," here we change the sys.* streams to disable line ending |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
166 # normalization, ensuring compatibility with our ui type. |
44655
02fa5392bab6
dispatch: force \n for newlines on sys.std* streams (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
44470
diff
changeset
|
167 |
48982
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
168 if sys.stdout is not None: |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
169 # write_through is new in Python 3.7. |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
170 kwargs = { |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
171 "newline": "\n", |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
172 "line_buffering": sys.stdout.line_buffering, |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
173 } |
50951
d718eddf01d9
safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50604
diff
changeset
|
174 if hasattr(sys.stdout, "write_through"): |
48982
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
175 # pytype: disable=attribute-error |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
176 kwargs["write_through"] = sys.stdout.write_through |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
177 # pytype: enable=attribute-error |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
178 sys.stdout = io.TextIOWrapper( |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
179 sys.stdout.buffer, sys.stdout.encoding, sys.stdout.errors, **kwargs |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
180 ) |
44655
02fa5392bab6
dispatch: force \n for newlines on sys.std* streams (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
44470
diff
changeset
|
181 |
48982
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
182 if sys.stderr is not None: |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
183 kwargs = { |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
184 "newline": "\n", |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
185 "line_buffering": sys.stderr.line_buffering, |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
186 } |
50951
d718eddf01d9
safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50604
diff
changeset
|
187 if hasattr(sys.stderr, "write_through"): |
48982
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
188 # pytype: disable=attribute-error |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
189 kwargs["write_through"] = sys.stderr.write_through |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
190 # pytype: enable=attribute-error |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
191 sys.stderr = io.TextIOWrapper( |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
192 sys.stderr.buffer, sys.stderr.encoding, sys.stderr.errors, **kwargs |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
193 ) |
36666
e8c361316803
py3: silence the final IOError by closing stdout/err slightly early
Yuya Nishihara <yuya@tcha.org>
parents:
36665
diff
changeset
|
194 |
48982
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
195 if sys.stdin is not None: |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
196 # No write_through on read-only stream. |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
197 sys.stdin = io.TextIOWrapper( |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
198 sys.stdin.buffer, |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
199 sys.stdin.encoding, |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
200 sys.stdin.errors, |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
201 # None is universal newlines mode. |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
202 newline=None, |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
203 line_buffering=sys.stdin.line_buffering, |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
204 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
205 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
206 |
48982
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
207 def _silencestdio(): |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
208 for fp in (sys.stdout, sys.stderr): |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
209 if fp is None: |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
210 continue |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
211 # Check if the file is okay |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
212 try: |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
213 fp.flush() |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
214 continue |
52665
24ee91ba9aa8
pyupgrade: drop usage of py3 aliases for `OSError`
Matt Harbison <matt_harbison@yahoo.com>
parents:
52457
diff
changeset
|
215 except OSError: |
48982
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
216 pass |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
217 # Otherwise mark it as closed to silence "Exception ignored in" |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
218 # message emitted by the interpreter finalizer. |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
219 try: |
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
220 fp.close() |
52665
24ee91ba9aa8
pyupgrade: drop usage of py3 aliases for `OSError`
Matt Harbison <matt_harbison@yahoo.com>
parents:
52457
diff
changeset
|
221 except OSError: |
48982
4eae533354ae
dispatch: remove Python 2 function variants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
222 pass |
36666
e8c361316803
py3: silence the final IOError by closing stdout/err slightly early
Yuya Nishihara <yuya@tcha.org>
parents:
36665
diff
changeset
|
223 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
224 |
31499
3c77414a0f9c
dispatch: consolidate formatting of arguments
Augie Fackler <augie@google.com>
parents:
31498
diff
changeset
|
225 def _formatargs(args): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
226 return b' '.join(procutil.shellquote(a) for a in args) |
31499
3c77414a0f9c
dispatch: consolidate formatting of arguments
Augie Fackler <augie@google.com>
parents:
31498
diff
changeset
|
227 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
228 |
14438
08bfec2ef031
dispatch: wrap dispatch related information in a request class
Idan Kamara <idankk86@gmail.com>
parents:
14286
diff
changeset
|
229 def dispatch(req): |
38038
6f9ac3cb0987
dispatch: unify handling of None returned by a command function
Yuya Nishihara <yuya@tcha.org>
parents:
38037
diff
changeset
|
230 """run the command specified in req.args; returns an integer status code""" |
46102
49b6910217f9
dispatch: move IOError handling and flushing of streams to `dispatch()`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46087
diff
changeset
|
231 err = None |
49b6910217f9
dispatch: move IOError handling and flushing of streams to `dispatch()`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46087
diff
changeset
|
232 try: |
49b6910217f9
dispatch: move IOError handling and flushing of streams to `dispatch()`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46087
diff
changeset
|
233 status = _rundispatch(req) |
49b6910217f9
dispatch: move IOError handling and flushing of streams to `dispatch()`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46087
diff
changeset
|
234 except error.StdioError as e: |
49b6910217f9
dispatch: move IOError handling and flushing of streams to `dispatch()`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46087
diff
changeset
|
235 err = e |
49b6910217f9
dispatch: move IOError handling and flushing of streams to `dispatch()`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46087
diff
changeset
|
236 status = -1 |
49b6910217f9
dispatch: move IOError handling and flushing of streams to `dispatch()`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46087
diff
changeset
|
237 |
48267
56d037d07395
backout: backed out changeset 2f2107c01dee
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48266
diff
changeset
|
238 ret = _flushstdio(req.ui, err) |
56d037d07395
backout: backed out changeset 2f2107c01dee
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48266
diff
changeset
|
239 if ret and not status: |
56d037d07395
backout: backed out changeset 2f2107c01dee
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48266
diff
changeset
|
240 status = ret |
46102
49b6910217f9
dispatch: move IOError handling and flushing of streams to `dispatch()`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46087
diff
changeset
|
241 return status |
49b6910217f9
dispatch: move IOError handling and flushing of streams to `dispatch()`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46087
diff
changeset
|
242 |
49b6910217f9
dispatch: move IOError handling and flushing of streams to `dispatch()`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46087
diff
changeset
|
243 |
51858
460e80488cf0
typing: lock in correct changes from pytype 2023.04.11 -> 2023.06.16
Matt Harbison <matt_harbison@yahoo.com>
parents:
51380
diff
changeset
|
244 def _rundispatch(req) -> int: |
46102
49b6910217f9
dispatch: move IOError handling and flushing of streams to `dispatch()`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46087
diff
changeset
|
245 with tracing.log('dispatch._rundispatch'): |
39283
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
246 if req.ferr: |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
247 ferr = req.ferr |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
248 elif req.ui: |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
249 ferr = req.ui.ferr |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
250 else: |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
251 ferr = procutil.stderr |
14615
9fba795dd030
dispatch: assign I/O descriptors from the request to the ui
Idan Kamara <idankk86@gmail.com>
parents:
14613
diff
changeset
|
252 |
39283
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
253 try: |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
254 if not req.ui: |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
255 req.ui = uimod.ui.load() |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
256 req.earlyoptions.update(_earlyparseopts(req.ui, req.args)) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
257 if req.earlyoptions[b'traceback']: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
258 req.ui.setconfig(b'ui', b'traceback', b'on', b'--traceback') |
14615
9fba795dd030
dispatch: assign I/O descriptors from the request to the ui
Idan Kamara <idankk86@gmail.com>
parents:
14613
diff
changeset
|
259 |
39283
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
260 # set ui streams from the request |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
261 if req.fin: |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
262 req.ui.fin = req.fin |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
263 if req.fout: |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
264 req.ui.fout = req.fout |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
265 if req.ferr: |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
266 req.ui.ferr = req.ferr |
40634
5542bc9125c9
dispatch: pass around ui.fmsg channel
Yuya Nishihara <yuya@tcha.org>
parents:
40490
diff
changeset
|
267 if req.fmsg: |
5542bc9125c9
dispatch: pass around ui.fmsg channel
Yuya Nishihara <yuya@tcha.org>
parents:
40490
diff
changeset
|
268 req.ui.fmsg = req.fmsg |
39283
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
269 except error.Abort as inst: |
45900
600aec73f309
errors: format "abort: " text in a new Abort.format() method
Martin von Zweigbergk <martinvonz@google.com>
parents:
45899
diff
changeset
|
270 ferr.write(inst.format()) |
39283
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
271 return -1 |
14615
9fba795dd030
dispatch: assign I/O descriptors from the request to the ui
Idan Kamara <idankk86@gmail.com>
parents:
14613
diff
changeset
|
272 |
48823
91a60031aba2
dispatch: fix silly blackbox entries when hg is interrupted
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents:
48267
diff
changeset
|
273 formattedargs = _formatargs(req.args) |
39283
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
274 starttime = util.timer() |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
275 ret = 1 # default of Python exit code on unhandled exception |
28520
84cc72c5771e
dispatch: catch KeyboardInterrupt more broadly
Yuya Nishihara <yuya@tcha.org>
parents:
28515
diff
changeset
|
276 try: |
39283
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
277 ret = _runcatch(req) or 0 |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
278 except error.ProgrammingError as inst: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
279 req.ui.error(_(b'** ProgrammingError: %s\n') % inst) |
39283
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
280 if inst.hint: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
281 req.ui.error(_(b'** (%s)\n') % inst.hint) |
39283
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
282 raise |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
283 except KeyboardInterrupt as inst: |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
284 try: |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
285 if isinstance(inst, error.SignalInterrupt): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
286 msg = _(b"killed!\n") |
39283
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
287 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
288 msg = _(b"interrupted!\n") |
39283
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
289 req.ui.error(msg) |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
290 except error.SignalInterrupt: |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
291 # maybe pager would quit without consuming all the output, and |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
292 # SIGPIPE was raised. we cannot print anything in this case. |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
293 pass |
49312
48f1b314056b
py3: catch BrokenPipeError instead of checking errno == EPIPE
Manuel Jacob <me@manueljacob.de>
parents:
49073
diff
changeset
|
294 except BrokenPipeError: |
48f1b314056b
py3: catch BrokenPipeError instead of checking errno == EPIPE
Manuel Jacob <me@manueljacob.de>
parents:
49073
diff
changeset
|
295 pass |
48266
8c34edb1ad10
backout: backed out changeset 6edc8800dbc3
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48198
diff
changeset
|
296 ret = -1 |
39283
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
297 finally: |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
298 duration = util.timer() - starttime |
48267
56d037d07395
backout: backed out changeset 2f2107c01dee
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48266
diff
changeset
|
299 req.ui.flush() # record blocked times |
39283
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
300 if req.ui.logblockedtimes: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
301 req.ui._blockedtimes[b'command_duration'] = duration * 1000 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
302 req.ui.log( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
303 b'uiblocked', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
304 b'ui blocked ms\n', |
51900
607e94e01851
format: add many "missing" comma
Matt Harbison <matt_harbison@yahoo.com>
parents:
51858
diff
changeset
|
305 **pycompat.strkwargs(req.ui._blockedtimes), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
306 ) |
40694
1243295fcc3a
logtoprocess: update commandfinish options arguments
Boris Feld <boris.feld@octobus.net>
parents:
40634
diff
changeset
|
307 return_code = ret & 255 |
1243295fcc3a
logtoprocess: update commandfinish options arguments
Boris Feld <boris.feld@octobus.net>
parents:
40634
diff
changeset
|
308 req.ui.log( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
309 b"commandfinish", |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
310 b"%s exited %d after %0.2f seconds\n", |
48823
91a60031aba2
dispatch: fix silly blackbox entries when hg is interrupted
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents:
48267
diff
changeset
|
311 formattedargs, |
40694
1243295fcc3a
logtoprocess: update commandfinish options arguments
Boris Feld <boris.feld@octobus.net>
parents:
40634
diff
changeset
|
312 return_code, |
1243295fcc3a
logtoprocess: update commandfinish options arguments
Boris Feld <boris.feld@octobus.net>
parents:
40634
diff
changeset
|
313 duration, |
1243295fcc3a
logtoprocess: update commandfinish options arguments
Boris Feld <boris.feld@octobus.net>
parents:
40634
diff
changeset
|
314 return_code=return_code, |
1243295fcc3a
logtoprocess: update commandfinish options arguments
Boris Feld <boris.feld@octobus.net>
parents:
40634
diff
changeset
|
315 duration=duration, |
1243295fcc3a
logtoprocess: update commandfinish options arguments
Boris Feld <boris.feld@octobus.net>
parents:
40634
diff
changeset
|
316 canonical_command=req.canonical_command, |
1243295fcc3a
logtoprocess: update commandfinish options arguments
Boris Feld <boris.feld@octobus.net>
parents:
40634
diff
changeset
|
317 ) |
39283
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
318 try: |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
319 req._runexithandlers() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
320 except: # exiting, so no re-raises |
39283
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
321 ret = ret or -1 |
45203
9b5723784aac
dispatch: adjust ui.flush() timing to stabilize test-blackbox.t
Yuya Nishihara <yuya@tcha.org>
parents:
45102
diff
changeset
|
322 # do flush again since ui.log() and exit handlers may write to ui |
48267
56d037d07395
backout: backed out changeset 2f2107c01dee
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48266
diff
changeset
|
323 req.ui.flush() |
39283
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
324 return ret |
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
325 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
326 |
14439
80c599eee3f3
dispatch: use the request to store the ui object
Idan Kamara <idankk86@gmail.com>
parents:
14438
diff
changeset
|
327 def _runcatch(req): |
43238
101ae8bbfa02
cleanup: hgdemandimport.tracing accepts strings, not bytes
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
328 with tracing.log('dispatch._runcatch'): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
329 |
39283
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
330 def catchterm(*args): |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
331 raise error.SignalInterrupt |
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
332 |
39283
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
333 ui = req.ui |
32050
77eaf9539499
dispatch: protect against malicious 'hg serve --stdio' invocations (sec)
Augie Fackler <augie@google.com>
parents:
30681
diff
changeset
|
334 try: |
50600
fca08dd6223d
safehasattr: pass attribute name as string instead of bytes
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50598
diff
changeset
|
335 for name in 'SIGBREAK', 'SIGHUP', 'SIGTERM': |
39283
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
336 num = getattr(signal, name, None) |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
337 if num: |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
338 signal.signal(num, catchterm) |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
339 except ValueError: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
340 pass # happens if called in a thread |
32050
77eaf9539499
dispatch: protect against malicious 'hg serve --stdio' invocations (sec)
Augie Fackler <augie@google.com>
parents:
30681
diff
changeset
|
341 |
39283
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
342 def _runcatchfunc(): |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
343 realcmd = None |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
344 try: |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
345 cmdargs = fancyopts.fancyopts( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
346 req.args[:], commands.globalopts, {} |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
347 ) |
39283
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
348 cmd = cmdargs[0] |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
349 aliases, entry = cmdutil.findcmd(cmd, commands.table, False) |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
350 realcmd = aliases[0] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
351 except ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
352 error.UnknownCommand, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
353 error.AmbiguousCommand, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
354 IndexError, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
355 getopt.GetoptError, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
356 ): |
39283
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
357 # Don't handle this here. We know the command is |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
358 # invalid, but all we're worried about for now is that |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
359 # it's not a command that server operators expect to |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
360 # be safe to offer to users in a sandbox. |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
361 pass |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
362 if realcmd == b'serve' and b'--stdio' in cmdargs: |
39283
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
363 # We want to constrain 'hg serve --stdio' instances pretty |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
364 # closely, as many shared-ssh access tools want to grant |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
365 # access to run *only* 'hg -R $repo serve --stdio'. We |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
366 # restrict to exactly that set of arguments, and prohibit |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
367 # any repo name that starts with '--' to prevent |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
368 # shenanigans wherein a user does something like pass |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
369 # --debugger or --config=ui.debugger=1 as a repo |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
370 # name. This used to actually run the debugger. |
50480
afb27fc92717
hidden: support passing --hidden with `serve --stdio`
Manuel Jacob <me@manueljacob.de>
parents:
49854
diff
changeset
|
371 nbargs = 4 |
afb27fc92717
hidden: support passing --hidden with `serve --stdio`
Manuel Jacob <me@manueljacob.de>
parents:
49854
diff
changeset
|
372 hashiddenaccess = b'--hidden' in cmdargs |
afb27fc92717
hidden: support passing --hidden with `serve --stdio`
Manuel Jacob <me@manueljacob.de>
parents:
49854
diff
changeset
|
373 if hashiddenaccess: |
afb27fc92717
hidden: support passing --hidden with `serve --stdio`
Manuel Jacob <me@manueljacob.de>
parents:
49854
diff
changeset
|
374 nbargs += 1 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
375 if ( |
50480
afb27fc92717
hidden: support passing --hidden with `serve --stdio`
Manuel Jacob <me@manueljacob.de>
parents:
49854
diff
changeset
|
376 len(req.args) != nbargs |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
377 or req.args[0] != b'-R' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
378 or req.args[1].startswith(b'--') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
379 or req.args[2] != b'serve' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
380 or req.args[3] != b'--stdio' |
50480
afb27fc92717
hidden: support passing --hidden with `serve --stdio`
Manuel Jacob <me@manueljacob.de>
parents:
49854
diff
changeset
|
381 or hashiddenaccess |
afb27fc92717
hidden: support passing --hidden with `serve --stdio`
Manuel Jacob <me@manueljacob.de>
parents:
49854
diff
changeset
|
382 and req.args[4] != b'--hidden' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
383 ): |
39283
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
384 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
385 _(b'potentially unsafe serve --stdio invocation: %s') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
386 % (stringutil.pprint(req.args),) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
387 ) |
19639
09573ad59f7b
dispatch: move command line --config argument parsing to _runcatch()
Sean Farley <sean.michael.farley@gmail.com>
parents:
19229
diff
changeset
|
388 |
39283
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
389 try: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
390 debugger = b'pdb' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
391 debugtrace = {b'pdb': pdb.set_trace} |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
392 debugmortem = {b'pdb': pdb.post_mortem} |
19639
09573ad59f7b
dispatch: move command line --config argument parsing to _runcatch()
Sean Farley <sean.michael.farley@gmail.com>
parents:
19229
diff
changeset
|
393 |
52758
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
394 # read --config-file and --config before doing anything else |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
395 # (e.g. to change trust settings for reading .hg/hgrc). |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
396 |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
397 # cmdargs may not have been initialized here (in the case of an |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
398 # error), so use pycompat.sysargv instead. |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
399 file_cfgs = _parse_config_files( |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
400 req.ui, pycompat.sysargv, req.earlyoptions[b'config_file'] |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
401 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
402 cfgs = _parseconfig(req.ui, req.earlyoptions[b'config']) |
39283
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
403 |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
404 if req.repo: |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
405 # copy configs that were passed on the cmdline (--config) to |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
406 # the repo ui |
52758
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
407 for sec, name, val, source in file_cfgs: |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
408 req.repo.ui.setconfig(sec, name, val, source=source) |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
409 |
39283
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
410 for sec, name, val in cfgs: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
411 req.repo.ui.setconfig( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
412 sec, name, val, source=b'--config' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
413 ) |
19640
472fa3b782b1
dispatch: add ability to specify a custom pdb module as a debugger
Sean Farley <sean.michael.farley@gmail.com>
parents:
19639
diff
changeset
|
414 |
39283
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
415 # developer config: ui.debugger |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
416 debugger = ui.config(b"ui", b"debugger") |
39283
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
417 debugmod = pdb |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
418 if not debugger or ui.plain(): |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
419 # if we are in HGPLAIN mode, then disable custom debugging |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
420 debugger = b'pdb' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
421 elif req.earlyoptions[b'debugger']: |
39283
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
422 # This import can be slow for fancy debuggers, so only |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
423 # do it when absolutely necessary, i.e. when actual |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
424 # debugging has been requested |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
425 with demandimport.deactivated(): |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
426 try: |
51380
82131be5258e
dispatch: don't attempt to import debugger as bytestring
Jordi Guti?rrez Hermoso <jordigh@octave.org>
parents:
50952
diff
changeset
|
427 debugmod = __import__(pycompat.sysstr(debugger)) |
39283
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
428 except ImportError: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
429 pass # Leave debugmod = pdb |
19640
472fa3b782b1
dispatch: add ability to specify a custom pdb module as a debugger
Sean Farley <sean.michael.farley@gmail.com>
parents:
19639
diff
changeset
|
430 |
39283
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
431 debugtrace[debugger] = debugmod.set_trace |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
432 debugmortem[debugger] = debugmod.post_mortem |
19640
472fa3b782b1
dispatch: add ability to specify a custom pdb module as a debugger
Sean Farley <sean.michael.farley@gmail.com>
parents:
19639
diff
changeset
|
433 |
39283
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
434 # enter the debugger before command execution |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
435 if req.earlyoptions[b'debugger']: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
436 ui.warn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
437 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
438 b"entering debugger - " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
439 b"type c to continue starting hg or h for help\n" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
440 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
441 ) |
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
442 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
443 if ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
444 debugger != b'pdb' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
445 and debugtrace[debugger] == debugtrace[b'pdb'] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
446 ): |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
447 ui.warn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
448 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
449 b"%s debugger specified " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
450 b"but its module was not found\n" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
451 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
452 % debugger |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
453 ) |
39283
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
454 with demandimport.deactivated(): |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
455 debugtrace[debugger]() |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
456 try: |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
457 return _dispatch(req) |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
458 finally: |
48267
56d037d07395
backout: backed out changeset 2f2107c01dee
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48266
diff
changeset
|
459 ui.flush() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
460 except: # re-raises |
39283
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
461 # enter the debugger when we hit an exception |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
462 if req.earlyoptions[b'debugger']: |
39283
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
463 traceback.print_exc() |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
464 debugmortem[debugger](sys.exc_info()[2]) |
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
465 raise |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
466 |
39283
4019b4542e61
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com>
parents:
38828
diff
changeset
|
467 return _callcatch(ui, _runcatchfunc) |
29773
39149b6036e6
dispatch: split global error handling out so it can be reused
Jun Wu <quark@fb.com>
parents:
29132
diff
changeset
|
468 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
469 |
32040
0fb78cb90ca7
dispatch: mark callcatch() as a private function
Yuya Nishihara <yuya@tcha.org>
parents:
31960
diff
changeset
|
470 def _callcatch(ui, func): |
30529
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30528
diff
changeset
|
471 """like scmutil.callcatch but handles more high-level exceptions about |
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30528
diff
changeset
|
472 config parsing and commands. besides, use handlecommandexception to handle |
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30528
diff
changeset
|
473 uncaught exceptions. |
29773
39149b6036e6
dispatch: split global error handling out so it can be reused
Jun Wu <quark@fb.com>
parents:
29132
diff
changeset
|
474 """ |
46262
9c9e0b4b2ca7
error: use detailed exit code 10 for command errors
Martin von Zweigbergk <martinvonz@google.com>
parents:
46173
diff
changeset
|
475 detailed_exit_code = -1 |
29773
39149b6036e6
dispatch: split global error handling out so it can be reused
Jun Wu <quark@fb.com>
parents:
29132
diff
changeset
|
476 try: |
30529
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30528
diff
changeset
|
477 return scmutil.callcatch(ui, func) |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25329
diff
changeset
|
478 except error.AmbiguousCommand as inst: |
46262
9c9e0b4b2ca7
error: use detailed exit code 10 for command errors
Martin von Zweigbergk <martinvonz@google.com>
parents:
46173
diff
changeset
|
479 detailed_exit_code = 10 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
480 ui.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
481 _(b"hg: command '%s' is ambiguous:\n %s\n") |
45679
65e2b64670b5
errors: name arguments to AmbiguousCommand constructor
Martin von Zweigbergk <martinvonz@google.com>
parents:
45678
diff
changeset
|
482 % (inst.prefix, b" ".join(inst.matches)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
483 ) |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25329
diff
changeset
|
484 except error.CommandError as inst: |
46262
9c9e0b4b2ca7
error: use detailed exit code 10 for command errors
Martin von Zweigbergk <martinvonz@google.com>
parents:
46173
diff
changeset
|
485 detailed_exit_code = 10 |
45678
bd2df58366b1
errors: name arguments to CommandError constructor
Martin von Zweigbergk <martinvonz@google.com>
parents:
45203
diff
changeset
|
486 if inst.command: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
487 ui.pager(b'help') |
45678
bd2df58366b1
errors: name arguments to CommandError constructor
Martin von Zweigbergk <martinvonz@google.com>
parents:
45203
diff
changeset
|
488 msgbytes = pycompat.bytestr(inst.message) |
bd2df58366b1
errors: name arguments to CommandError constructor
Martin von Zweigbergk <martinvonz@google.com>
parents:
45203
diff
changeset
|
489 ui.warn(_(b"hg %s: %s\n") % (inst.command, msgbytes)) |
bd2df58366b1
errors: name arguments to CommandError constructor
Martin von Zweigbergk <martinvonz@google.com>
parents:
45203
diff
changeset
|
490 commands.help_(ui, inst.command, full=False, command=True) |
7645
020a896a5292
dispatch: sort exception handlers
Matt Mackall <mpm@selenic.com>
parents:
7644
diff
changeset
|
491 else: |
45678
bd2df58366b1
errors: name arguments to CommandError constructor
Martin von Zweigbergk <martinvonz@google.com>
parents:
45203
diff
changeset
|
492 ui.warn(_(b"hg: %s\n") % inst.message) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
493 ui.warn(_(b"(use 'hg help -v' for a list of global options)\n")) |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25329
diff
changeset
|
494 except error.UnknownCommand as inst: |
46262
9c9e0b4b2ca7
error: use detailed exit code 10 for command errors
Martin von Zweigbergk <martinvonz@google.com>
parents:
46173
diff
changeset
|
495 detailed_exit_code = 10 |
45680
bb1a988ef4a5
errors: name arguments to UnknownCommand constructor
Martin von Zweigbergk <martinvonz@google.com>
parents:
45679
diff
changeset
|
496 nocmdmsg = _(b"hg: unknown command '%s'\n") % inst.command |
10364
de1e7099d100
dispatch: provide help for disabled extensions and commands
Brodie Rao <me+hg@dackz.net>
parents:
10282
diff
changeset
|
497 try: |
de1e7099d100
dispatch: provide help for disabled extensions and commands
Brodie Rao <me+hg@dackz.net>
parents:
10282
diff
changeset
|
498 # check if the command is in a disabled extension |
de1e7099d100
dispatch: provide help for disabled extensions and commands
Brodie Rao <me+hg@dackz.net>
parents:
10282
diff
changeset
|
499 # (but don't check for extensions themselves) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
500 formatted = help.formattedhelp( |
45680
bb1a988ef4a5
errors: name arguments to UnknownCommand constructor
Martin von Zweigbergk <martinvonz@google.com>
parents:
45679
diff
changeset
|
501 ui, commands, inst.command, unknowncmd=True |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
502 ) |
31080
ab20491b1760
dispatch: rearrange 'unknown command' code to better employ pager
Augie Fackler <augie@google.com>
parents:
31047
diff
changeset
|
503 ui.warn(nocmdmsg) |
ab20491b1760
dispatch: rearrange 'unknown command' code to better employ pager
Augie Fackler <augie@google.com>
parents:
31047
diff
changeset
|
504 ui.write(formatted) |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26421
diff
changeset
|
505 except (error.UnknownCommand, error.Abort): |
24222
02d7b5cd373b
dispatch: offer suggestions of similar-named commands
Augie Fackler <augie@google.com>
parents:
24221
diff
changeset
|
506 suggested = False |
45680
bb1a988ef4a5
errors: name arguments to UnknownCommand constructor
Martin von Zweigbergk <martinvonz@google.com>
parents:
45679
diff
changeset
|
507 if inst.all_commands: |
45897
8cc9e7f762d6
errors: move similarity_hint() to error module
Martin von Zweigbergk <martinvonz@google.com>
parents:
45896
diff
changeset
|
508 sim = error.getsimilar(inst.all_commands, inst.command) |
24222
02d7b5cd373b
dispatch: offer suggestions of similar-named commands
Augie Fackler <augie@google.com>
parents:
24221
diff
changeset
|
509 if sim: |
31080
ab20491b1760
dispatch: rearrange 'unknown command' code to better employ pager
Augie Fackler <augie@google.com>
parents:
31047
diff
changeset
|
510 ui.warn(nocmdmsg) |
45897
8cc9e7f762d6
errors: move similarity_hint() to error module
Martin von Zweigbergk <martinvonz@google.com>
parents:
45896
diff
changeset
|
511 ui.warn(b"(%s)\n" % error.similarity_hint(sim)) |
24222
02d7b5cd373b
dispatch: offer suggestions of similar-named commands
Augie Fackler <augie@google.com>
parents:
24221
diff
changeset
|
512 suggested = True |
02d7b5cd373b
dispatch: offer suggestions of similar-named commands
Augie Fackler <augie@google.com>
parents:
24221
diff
changeset
|
513 if not suggested: |
31080
ab20491b1760
dispatch: rearrange 'unknown command' code to better employ pager
Augie Fackler <augie@google.com>
parents:
31047
diff
changeset
|
514 ui.warn(nocmdmsg) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
515 ui.warn(_(b"(use 'hg help' for a list of commands)\n")) |
52665
24ee91ba9aa8
pyupgrade: drop usage of py3 aliases for `OSError`
Matt Harbison <matt_harbison@yahoo.com>
parents:
52457
diff
changeset
|
516 except OSError: |
30529
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30528
diff
changeset
|
517 raise |
7645
020a896a5292
dispatch: sort exception handlers
Matt Mackall <mpm@selenic.com>
parents:
7644
diff
changeset
|
518 except KeyboardInterrupt: |
28520
84cc72c5771e
dispatch: catch KeyboardInterrupt more broadly
Yuya Nishihara <yuya@tcha.org>
parents:
28515
diff
changeset
|
519 raise |
30529
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30528
diff
changeset
|
520 except: # probably re-raises |
28784
09750b1231c2
dispatch: factor out command failure handling into a function
Martijn Pieters <mjpieters@fb.com>
parents:
28695
diff
changeset
|
521 if not handlecommandexception(ui): |
09750b1231c2
dispatch: factor out command failure handling into a function
Martijn Pieters <mjpieters@fb.com>
parents:
28695
diff
changeset
|
522 raise |
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
523 |
46262
9c9e0b4b2ca7
error: use detailed exit code 10 for command errors
Martin von Zweigbergk <martinvonz@google.com>
parents:
46173
diff
changeset
|
524 if ui.configbool(b'ui', b'detailed-exit-code'): |
9c9e0b4b2ca7
error: use detailed exit code 10 for command errors
Martin von Zweigbergk <martinvonz@google.com>
parents:
46173
diff
changeset
|
525 return detailed_exit_code |
9c9e0b4b2ca7
error: use detailed exit code 10 for command errors
Martin von Zweigbergk <martinvonz@google.com>
parents:
46173
diff
changeset
|
526 else: |
9c9e0b4b2ca7
error: use detailed exit code 10 for command errors
Martin von Zweigbergk <martinvonz@google.com>
parents:
46173
diff
changeset
|
527 return -1 |
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
528 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
529 |
14265
e4ab5ae193f2
add positional arguments to non-shell aliases
Alexander Solovyov <alexander@solovyov.net>
parents:
14096
diff
changeset
|
530 def aliasargs(fn, givenargs): |
34104
5361771f9714
wrapfunction: use functools.partial if possible
Jun Wu <quark@fb.com>
parents:
34040
diff
changeset
|
531 args = [] |
5361771f9714
wrapfunction: use functools.partial if possible
Jun Wu <quark@fb.com>
parents:
34040
diff
changeset
|
532 # only care about alias 'args', ignore 'args' set by extensions.wrapfunction |
50951
d718eddf01d9
safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50604
diff
changeset
|
533 if not hasattr(fn, '_origfunc'): |
34104
5361771f9714
wrapfunction: use functools.partial if possible
Jun Wu <quark@fb.com>
parents:
34040
diff
changeset
|
534 args = getattr(fn, 'args', args) |
16294
795d591b6ef5
alias: abort on missing positional args (issue3331)
Matt Mackall <mpm@selenic.com>
parents:
16277
diff
changeset
|
535 if args: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
536 cmd = b' '.join(map(procutil.shellquote, args)) |
14265
e4ab5ae193f2
add positional arguments to non-shell aliases
Alexander Solovyov <alexander@solovyov.net>
parents:
14096
diff
changeset
|
537 |
e4ab5ae193f2
add positional arguments to non-shell aliases
Alexander Solovyov <alexander@solovyov.net>
parents:
14096
diff
changeset
|
538 nums = [] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
539 |
14265
e4ab5ae193f2
add positional arguments to non-shell aliases
Alexander Solovyov <alexander@solovyov.net>
parents:
14096
diff
changeset
|
540 def replacer(m): |
e4ab5ae193f2
add positional arguments to non-shell aliases
Alexander Solovyov <alexander@solovyov.net>
parents:
14096
diff
changeset
|
541 num = int(m.group(1)) - 1 |
e4ab5ae193f2
add positional arguments to non-shell aliases
Alexander Solovyov <alexander@solovyov.net>
parents:
14096
diff
changeset
|
542 nums.append(num) |
16277
1c2aaf05f7d7
aliases: use empty string for missing position parameters (issue3331)
Matt Mackall <mpm@selenic.com>
parents:
15781
diff
changeset
|
543 if num < len(givenargs): |
1c2aaf05f7d7
aliases: use empty string for missing position parameters (issue3331)
Matt Mackall <mpm@selenic.com>
parents:
15781
diff
changeset
|
544 return givenargs[num] |
45929
be25b66f86ab
errors: raise InputError when too few arguments given to alias
Martin von Zweigbergk <martinvonz@google.com>
parents:
45927
diff
changeset
|
545 raise error.InputError(_(b'too few arguments for command alias')) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
546 |
31498
492c64afc54c
py3: make the regular expression bytes to prevent TypeError
Pulkit Goyal <7895pulkit@gmail.com>
parents:
31314
diff
changeset
|
547 cmd = re.sub(br'\$(\d+|\$)', replacer, cmd) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
548 givenargs = [x for i, x in enumerate(givenargs) if i not in nums] |
30681
caf7e1c5efe4
py3: have a bytes version of shlex.split()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30657
diff
changeset
|
549 args = pycompat.shlexsplit(cmd) |
14265
e4ab5ae193f2
add positional arguments to non-shell aliases
Alexander Solovyov <alexander@solovyov.net>
parents:
14096
diff
changeset
|
550 return args + givenargs |
8655 | 551 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
552 |
22158
bc2132dfc0a4
alias: expand "$@" as list of parameters quoted individually (BC) (issue4200)
Siddharth Agarwal <sid0@fb.com>
parents:
21961
diff
changeset
|
553 def aliasinterpolate(name, args, cmd): |
45957
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45935
diff
changeset
|
554 """interpolate args into cmd for shell aliases |
22158
bc2132dfc0a4
alias: expand "$@" as list of parameters quoted individually (BC) (issue4200)
Siddharth Agarwal <sid0@fb.com>
parents:
21961
diff
changeset
|
555 |
bc2132dfc0a4
alias: expand "$@" as list of parameters quoted individually (BC) (issue4200)
Siddharth Agarwal <sid0@fb.com>
parents:
21961
diff
changeset
|
556 This also handles $0, $@ and "$@". |
45957
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45935
diff
changeset
|
557 """ |
22158
bc2132dfc0a4
alias: expand "$@" as list of parameters quoted individually (BC) (issue4200)
Siddharth Agarwal <sid0@fb.com>
parents:
21961
diff
changeset
|
558 # util.interpolate can't deal with "$@" (with quotes) because it's only |
bc2132dfc0a4
alias: expand "$@" as list of parameters quoted individually (BC) (issue4200)
Siddharth Agarwal <sid0@fb.com>
parents:
21961
diff
changeset
|
559 # built to match prefix + patterns. |
44470
9d2b2df2c2ba
cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents:
44349
diff
changeset
|
560 replacemap = {b'$%d' % (i + 1): arg for i, arg in enumerate(args)} |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
561 replacemap[b'$0'] = name |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
562 replacemap[b'$$'] = b'$' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
563 replacemap[b'$@'] = b' '.join(args) |
22158
bc2132dfc0a4
alias: expand "$@" as list of parameters quoted individually (BC) (issue4200)
Siddharth Agarwal <sid0@fb.com>
parents:
21961
diff
changeset
|
564 # Typical Unix shells interpolate "$@" (with quotes) as all the positional |
bc2132dfc0a4
alias: expand "$@" as list of parameters quoted individually (BC) (issue4200)
Siddharth Agarwal <sid0@fb.com>
parents:
21961
diff
changeset
|
565 # parameters, separated out into words. Emulate the same behavior here by |
bc2132dfc0a4
alias: expand "$@" as list of parameters quoted individually (BC) (issue4200)
Siddharth Agarwal <sid0@fb.com>
parents:
21961
diff
changeset
|
566 # quoting the arguments individually. POSIX shells will then typically |
bc2132dfc0a4
alias: expand "$@" as list of parameters quoted individually (BC) (issue4200)
Siddharth Agarwal <sid0@fb.com>
parents:
21961
diff
changeset
|
567 # tokenize each argument into exactly one word. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
568 replacemap[b'"$@"'] = b' '.join(procutil.shellquote(arg) for arg in args) |
22158
bc2132dfc0a4
alias: expand "$@" as list of parameters quoted individually (BC) (issue4200)
Siddharth Agarwal <sid0@fb.com>
parents:
21961
diff
changeset
|
569 # escape '\$' for regex |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
570 regex = b'|'.join(replacemap.keys()).replace(b'$', br'\$') |
22158
bc2132dfc0a4
alias: expand "$@" as list of parameters quoted individually (BC) (issue4200)
Siddharth Agarwal <sid0@fb.com>
parents:
21961
diff
changeset
|
571 r = re.compile(regex) |
bc2132dfc0a4
alias: expand "$@" as list of parameters quoted individually (BC) (issue4200)
Siddharth Agarwal <sid0@fb.com>
parents:
21961
diff
changeset
|
572 return r.sub(lambda x: replacemap[x.group()], cmd) |
bc2132dfc0a4
alias: expand "$@" as list of parameters quoted individually (BC) (issue4200)
Siddharth Agarwal <sid0@fb.com>
parents:
21961
diff
changeset
|
573 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
574 |
49037
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
49004
diff
changeset
|
575 class cmdalias: |
37137
6890b7e991a4
help: supporting both help and doc for aliases
Rodrigo Damazio <rdamazio@google.com>
parents:
37123
diff
changeset
|
576 def __init__(self, ui, name, definition, cmdtable, source): |
12039
18e1e7520b67
alias: make shadowing behavior more consistent (issue2054)
Brodie Rao <brodie@bitheap.org>
parents:
11712
diff
changeset
|
577 self.name = self.cmd = name |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
578 self.cmdname = b'' |
8655 | 579 self.definition = definition |
22160
645457f73aa6
alias: keep error message in "badalias" so that help can see it
Yuya Nishihara <yuya@tcha.org>
parents:
22158
diff
changeset
|
580 self.fn = None |
29087
ad1bdea43965
dispatch: defer environment variable resolution in alias commands (BC)
Jun Wu <quark@fb.com>
parents:
28861
diff
changeset
|
581 self.givenargs = [] |
8655 | 582 self.opts = [] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
583 self.help = b'' |
22160
645457f73aa6
alias: keep error message in "badalias" so that help can see it
Yuya Nishihara <yuya@tcha.org>
parents:
22158
diff
changeset
|
584 self.badalias = None |
22161
063628423fd1
alias: provide "unknowncmd" flag to tell help to look for disabled command
Yuya Nishihara <yuya@tcha.org>
parents:
22160
diff
changeset
|
585 self.unknowncmd = False |
28828
3640c1702c43
help: report source of aliases
timeless <timeless@mozdev.org>
parents:
28821
diff
changeset
|
586 self.source = source |
8655 | 587 |
588 try: | |
12039
18e1e7520b67
alias: make shadowing behavior more consistent (issue2054)
Brodie Rao <brodie@bitheap.org>
parents:
11712
diff
changeset
|
589 aliases, entry = cmdutil.findcmd(self.name, cmdtable) |
49004
f254fc73d956
global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48982
diff
changeset
|
590 for alias, e in cmdtable.items(): |
12039
18e1e7520b67
alias: make shadowing behavior more consistent (issue2054)
Brodie Rao <brodie@bitheap.org>
parents:
11712
diff
changeset
|
591 if e is entry: |
18e1e7520b67
alias: make shadowing behavior more consistent (issue2054)
Brodie Rao <brodie@bitheap.org>
parents:
11712
diff
changeset
|
592 self.cmd = alias |
18e1e7520b67
alias: make shadowing behavior more consistent (issue2054)
Brodie Rao <brodie@bitheap.org>
parents:
11712
diff
changeset
|
593 break |
8655 | 594 self.shadows = True |
595 except error.UnknownCommand: | |
596 self.shadows = False | |
597 | |
598 if not self.definition: | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
599 self.badalias = _(b"no definition for alias '%s'") % self.name |
8655 | 600 return |
601 | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
602 if self.definition.startswith(b'!'): |
37137
6890b7e991a4
help: supporting both help and doc for aliases
Rodrigo Damazio <rdamazio@google.com>
parents:
37123
diff
changeset
|
603 shdef = self.definition[1:] |
12536
208fc9ad6a48
alias: only allow global options before a shell alias, pass later ones through
Steve Losh <steve@stevelosh.com>
parents:
12276
diff
changeset
|
604 self.shell = True |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
605 |
11524
24965bb270b7
dispatch: add shell aliases
Steve Losh <steve@stevelosh.com>
parents:
11495
diff
changeset
|
606 def fn(ui, *args): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
607 env = {b'HG_ARGS': b' '.join((self.name,) + args)} |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
608 |
11989
f853873fc66d
aliases: provide more flexible ways to work with shell alias arguments
Steve Losh <steve@stevelosh.com>
parents:
11985
diff
changeset
|
609 def _checkvar(m): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
610 if m.groups()[0] == b'$': |
13392
777cef34a890
dispatch: support for $ escaping in shell-alias definition
Roman Sokolov <sokolov.r.v@gmail.com>
parents:
13382
diff
changeset
|
611 return m.group() |
777cef34a890
dispatch: support for $ escaping in shell-alias definition
Roman Sokolov <sokolov.r.v@gmail.com>
parents:
13382
diff
changeset
|
612 elif int(m.groups()[0]) <= len(args): |
11989
f853873fc66d
aliases: provide more flexible ways to work with shell alias arguments
Steve Losh <steve@stevelosh.com>
parents:
11985
diff
changeset
|
613 return m.group() |
f853873fc66d
aliases: provide more flexible ways to work with shell alias arguments
Steve Losh <steve@stevelosh.com>
parents:
11985
diff
changeset
|
614 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
615 ui.debug( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
616 b"No argument found for substitution " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
617 b"of %i variable in alias '%s' definition.\n" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
618 % (int(m.groups()[0]), self.name) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
619 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
620 return b'' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
621 |
37137
6890b7e991a4
help: supporting both help and doc for aliases
Rodrigo Damazio <rdamazio@google.com>
parents:
37123
diff
changeset
|
622 cmd = re.sub(br'\$(\d+|\$)', _checkvar, shdef) |
22158
bc2132dfc0a4
alias: expand "$@" as list of parameters quoted individually (BC) (issue4200)
Siddharth Agarwal <sid0@fb.com>
parents:
21961
diff
changeset
|
623 cmd = aliasinterpolate(self.name, args, cmd) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
624 return ui.system( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
625 cmd, environ=env, blockedtag=b'alias_%s' % self.name |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
626 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
627 |
11524
24965bb270b7
dispatch: add shell aliases
Steve Losh <steve@stevelosh.com>
parents:
11495
diff
changeset
|
628 self.fn = fn |
40490
444861dc1e55
help: displaying documented aliases by default
rdamazio@google.com
parents:
40402
diff
changeset
|
629 self.alias = True |
37137
6890b7e991a4
help: supporting both help and doc for aliases
Rodrigo Damazio <rdamazio@google.com>
parents:
37123
diff
changeset
|
630 self._populatehelp(ui, name, shdef, self.fn) |
11524
24965bb270b7
dispatch: add shell aliases
Steve Losh <steve@stevelosh.com>
parents:
11495
diff
changeset
|
631 return |
24965bb270b7
dispatch: add shell aliases
Steve Losh <steve@stevelosh.com>
parents:
11495
diff
changeset
|
632 |
21569
c5afb07c33d3
alias: handle shlex error in command aliases
Yuya Nishihara <yuya@tcha.org>
parents:
21556
diff
changeset
|
633 try: |
30681
caf7e1c5efe4
py3: have a bytes version of shlex.split()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30657
diff
changeset
|
634 args = pycompat.shlexsplit(self.definition) |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25329
diff
changeset
|
635 except ValueError as inst: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
636 self.badalias = _(b"error in definition for alias '%s': %s") % ( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
637 self.name, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
638 stringutil.forcebytestr(inst), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
639 ) |
21569
c5afb07c33d3
alias: handle shlex error in command aliases
Yuya Nishihara <yuya@tcha.org>
parents:
21556
diff
changeset
|
640 return |
35234
7ce0ba3a1c32
dispatch: replace _earlygetopt(strip=True) with new parser
Yuya Nishihara <yuya@tcha.org>
parents:
35233
diff
changeset
|
641 earlyopts, args = _earlysplitopts(args) |
7ce0ba3a1c32
dispatch: replace _earlygetopt(strip=True) with new parser
Yuya Nishihara <yuya@tcha.org>
parents:
35233
diff
changeset
|
642 if earlyopts: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
643 self.badalias = _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
644 b"error in definition for alias '%s': %s may " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
645 b"only be given on the command line" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
646 ) % (self.name, b'/'.join(pycompat.ziplist(*earlyopts)[0])) |
35234
7ce0ba3a1c32
dispatch: replace _earlygetopt(strip=True) with new parser
Yuya Nishihara <yuya@tcha.org>
parents:
35233
diff
changeset
|
647 return |
12092
4982fa38e544
alias: print what command is being shadowed in debug message
Brodie Rao <brodie@bitheap.org>
parents:
12070
diff
changeset
|
648 self.cmdname = cmd = args.pop(0) |
29087
ad1bdea43965
dispatch: defer environment variable resolution in alias commands (BC)
Jun Wu <quark@fb.com>
parents:
28861
diff
changeset
|
649 self.givenargs = args |
8655 | 650 |
651 try: | |
9993
8bce1e0d2801
alias: do not crash when aliased command has no usage help text
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
9825
diff
changeset
|
652 tableentry = cmdutil.findcmd(cmd, cmdtable, False)[1] |
8bce1e0d2801
alias: do not crash when aliased command has no usage help text
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
9825
diff
changeset
|
653 if len(tableentry) > 2: |
37137
6890b7e991a4
help: supporting both help and doc for aliases
Rodrigo Damazio <rdamazio@google.com>
parents:
37123
diff
changeset
|
654 self.fn, self.opts, cmdhelp = tableentry |
9993
8bce1e0d2801
alias: do not crash when aliased command has no usage help text
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
9825
diff
changeset
|
655 else: |
8bce1e0d2801
alias: do not crash when aliased command has no usage help text
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
9825
diff
changeset
|
656 self.fn, self.opts = tableentry |
37137
6890b7e991a4
help: supporting both help and doc for aliases
Rodrigo Damazio <rdamazio@google.com>
parents:
37123
diff
changeset
|
657 cmdhelp = None |
9993
8bce1e0d2801
alias: do not crash when aliased command has no usage help text
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
9825
diff
changeset
|
658 |
40490
444861dc1e55
help: displaying documented aliases by default
rdamazio@google.com
parents:
40402
diff
changeset
|
659 self.alias = True |
37137
6890b7e991a4
help: supporting both help and doc for aliases
Rodrigo Damazio <rdamazio@google.com>
parents:
37123
diff
changeset
|
660 self._populatehelp(ui, name, cmd, self.fn, cmdhelp) |
9876
6e8a16dd3e30
alias: improve help text for command aliases
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
9875
diff
changeset
|
661 |
8655 | 662 except error.UnknownCommand: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
663 self.badalias = _( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
664 b"alias '%s' resolves to unknown command '%s'" |
45957
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45935
diff
changeset
|
665 ) % ( |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45935
diff
changeset
|
666 self.name, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45935
diff
changeset
|
667 cmd, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45935
diff
changeset
|
668 ) |
22161
063628423fd1
alias: provide "unknowncmd" flag to tell help to look for disabled command
Yuya Nishihara <yuya@tcha.org>
parents:
22160
diff
changeset
|
669 self.unknowncmd = True |
8655 | 670 except error.AmbiguousCommand: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
671 self.badalias = _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
672 b"alias '%s' resolves to ambiguous command '%s'" |
45957
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45935
diff
changeset
|
673 ) % ( |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45935
diff
changeset
|
674 self.name, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45935
diff
changeset
|
675 cmd, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45935
diff
changeset
|
676 ) |
8655 | 677 |
37137
6890b7e991a4
help: supporting both help and doc for aliases
Rodrigo Damazio <rdamazio@google.com>
parents:
37123
diff
changeset
|
678 def _populatehelp(self, ui, name, cmd, fn, defaulthelp=None): |
37142
aa55c5354b8f
alias: reject non-ascii characters in user help/doc strings
Yuya Nishihara <yuya@tcha.org>
parents:
37137
diff
changeset
|
679 # confine strings to be passed to i18n.gettext() |
aa55c5354b8f
alias: reject non-ascii characters in user help/doc strings
Yuya Nishihara <yuya@tcha.org>
parents:
37137
diff
changeset
|
680 cfg = {} |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
681 for k in (b'doc', b'help', b'category'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
682 v = ui.config(b'alias', b'%s:%s' % (name, k), None) |
37142
aa55c5354b8f
alias: reject non-ascii characters in user help/doc strings
Yuya Nishihara <yuya@tcha.org>
parents:
37137
diff
changeset
|
683 if v is None: |
aa55c5354b8f
alias: reject non-ascii characters in user help/doc strings
Yuya Nishihara <yuya@tcha.org>
parents:
37137
diff
changeset
|
684 continue |
aa55c5354b8f
alias: reject non-ascii characters in user help/doc strings
Yuya Nishihara <yuya@tcha.org>
parents:
37137
diff
changeset
|
685 if not encoding.isasciistr(v): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
686 self.badalias = _( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43106
diff
changeset
|
687 b"non-ASCII character in alias definition '%s:%s'" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
688 ) % (name, k) |
37142
aa55c5354b8f
alias: reject non-ascii characters in user help/doc strings
Yuya Nishihara <yuya@tcha.org>
parents:
37137
diff
changeset
|
689 return |
aa55c5354b8f
alias: reject non-ascii characters in user help/doc strings
Yuya Nishihara <yuya@tcha.org>
parents:
37137
diff
changeset
|
690 cfg[k] = v |
aa55c5354b8f
alias: reject non-ascii characters in user help/doc strings
Yuya Nishihara <yuya@tcha.org>
parents:
37137
diff
changeset
|
691 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
692 self.help = cfg.get(b'help', defaulthelp or b'') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
693 if self.help and self.help.startswith(b"hg " + cmd): |
37137
6890b7e991a4
help: supporting both help and doc for aliases
Rodrigo Damazio <rdamazio@google.com>
parents:
37123
diff
changeset
|
694 # drop prefix in old-style help lines so hg shows the alias |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
695 self.help = self.help[4 + len(cmd) :] |
37137
6890b7e991a4
help: supporting both help and doc for aliases
Rodrigo Damazio <rdamazio@google.com>
parents:
37123
diff
changeset
|
696 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
697 self.owndoc = b'doc' in cfg |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
698 doc = cfg.get(b'doc', pycompat.getdoc(fn)) |
37143
1d56c539794e
py3: bytes/unicode dance on __doc__ of cmdalias
Yuya Nishihara <yuya@tcha.org>
parents:
37142
diff
changeset
|
699 if doc is not None: |
1d56c539794e
py3: bytes/unicode dance on __doc__ of cmdalias
Yuya Nishihara <yuya@tcha.org>
parents:
37142
diff
changeset
|
700 doc = pycompat.sysstr(doc) |
1d56c539794e
py3: bytes/unicode dance on __doc__ of cmdalias
Yuya Nishihara <yuya@tcha.org>
parents:
37142
diff
changeset
|
701 self.__doc__ = doc |
37137
6890b7e991a4
help: supporting both help and doc for aliases
Rodrigo Damazio <rdamazio@google.com>
parents:
37123
diff
changeset
|
702 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
703 self.helpcategory = cfg.get( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
704 b'category', registrar.command.CATEGORY_NONE |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
705 ) |
40490
444861dc1e55
help: displaying documented aliases by default
rdamazio@google.com
parents:
40402
diff
changeset
|
706 |
29087
ad1bdea43965
dispatch: defer environment variable resolution in alias commands (BC)
Jun Wu <quark@fb.com>
parents:
28861
diff
changeset
|
707 @property |
ad1bdea43965
dispatch: defer environment variable resolution in alias commands (BC)
Jun Wu <quark@fb.com>
parents:
28861
diff
changeset
|
708 def args(self): |
31634
2632df096fc0
dispatch: use pycompat.maplist() instead of map() to get a list
Pulkit Goyal <7895pulkit@gmail.com>
parents:
31509
diff
changeset
|
709 args = pycompat.maplist(util.expandpath, self.givenargs) |
29087
ad1bdea43965
dispatch: defer environment variable resolution in alias commands (BC)
Jun Wu <quark@fb.com>
parents:
28861
diff
changeset
|
710 return aliasargs(self.fn, args) |
ad1bdea43965
dispatch: defer environment variable resolution in alias commands (BC)
Jun Wu <quark@fb.com>
parents:
28861
diff
changeset
|
711 |
28621
d856e85a8a7a
dispatch: make cmdalias forward command attributes to function
Yuya Nishihara <yuya@tcha.org>
parents:
28538
diff
changeset
|
712 def __getattr__(self, name): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
713 adefaults = { |
43554
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43238
diff
changeset
|
714 'norepo': True, |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43238
diff
changeset
|
715 'intents': set(), |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43238
diff
changeset
|
716 'optionalrepo': False, |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43238
diff
changeset
|
717 'inferrepo': False, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
718 } |
28621
d856e85a8a7a
dispatch: make cmdalias forward command attributes to function
Yuya Nishihara <yuya@tcha.org>
parents:
28538
diff
changeset
|
719 if name not in adefaults: |
d856e85a8a7a
dispatch: make cmdalias forward command attributes to function
Yuya Nishihara <yuya@tcha.org>
parents:
28538
diff
changeset
|
720 raise AttributeError(name) |
50951
d718eddf01d9
safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50604
diff
changeset
|
721 if self.badalias or hasattr(self, 'shell'): |
28621
d856e85a8a7a
dispatch: make cmdalias forward command attributes to function
Yuya Nishihara <yuya@tcha.org>
parents:
28538
diff
changeset
|
722 return adefaults[name] |
d856e85a8a7a
dispatch: make cmdalias forward command attributes to function
Yuya Nishihara <yuya@tcha.org>
parents:
28538
diff
changeset
|
723 return getattr(self.fn, name) |
d856e85a8a7a
dispatch: make cmdalias forward command attributes to function
Yuya Nishihara <yuya@tcha.org>
parents:
28538
diff
changeset
|
724 |
8655 | 725 def __call__(self, ui, *args, **opts): |
22160
645457f73aa6
alias: keep error message in "badalias" so that help can see it
Yuya Nishihara <yuya@tcha.org>
parents:
22158
diff
changeset
|
726 if self.badalias: |
22164
efd65e51bc0b
alias: exit from bad definition by Abort
Yuya Nishihara <yuya@tcha.org>
parents:
22163
diff
changeset
|
727 hint = None |
22161
063628423fd1
alias: provide "unknowncmd" flag to tell help to look for disabled command
Yuya Nishihara <yuya@tcha.org>
parents:
22160
diff
changeset
|
728 if self.unknowncmd: |
10364
de1e7099d100
dispatch: provide help for disabled extensions and commands
Brodie Rao <me+hg@dackz.net>
parents:
10282
diff
changeset
|
729 try: |
de1e7099d100
dispatch: provide help for disabled extensions and commands
Brodie Rao <me+hg@dackz.net>
parents:
10282
diff
changeset
|
730 # check if the command is in a disabled extension |
22163
01ef4347e4ab
alias: show one-line hint for command provided by disabled extension
Yuya Nishihara <yuya@tcha.org>
parents:
22161
diff
changeset
|
731 cmd, ext = extensions.disabledcmd(ui, self.cmdname)[:2] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
732 hint = _(b"'%s' is provided by '%s' extension") % (cmd, ext) |
10364
de1e7099d100
dispatch: provide help for disabled extensions and commands
Brodie Rao <me+hg@dackz.net>
parents:
10282
diff
changeset
|
733 except error.UnknownCommand: |
de1e7099d100
dispatch: provide help for disabled extensions and commands
Brodie Rao <me+hg@dackz.net>
parents:
10282
diff
changeset
|
734 pass |
45927
35ab6e39f482
errors: raise ConfigError on bad alias definition
Martin von Zweigbergk <martinvonz@google.com>
parents:
45926
diff
changeset
|
735 raise error.ConfigError(self.badalias, hint=hint) |
8655 | 736 if self.shadows: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
737 ui.debug( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
738 b"alias '%s' shadows command '%s'\n" % (self.name, self.cmdname) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
739 ) |
8655 | 740 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
741 ui.log( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
742 b'commandalias', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
743 b"alias '%s' expands to '%s'\n", |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
744 self.name, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
745 self.definition, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
746 ) |
50951
d718eddf01d9
safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50604
diff
changeset
|
747 if hasattr(self, 'shell'): |
11989
f853873fc66d
aliases: provide more flexible ways to work with shell alias arguments
Steve Losh <steve@stevelosh.com>
parents:
11985
diff
changeset
|
748 return self.fn(ui, *args, **opts) |
f853873fc66d
aliases: provide more flexible ways to work with shell alias arguments
Steve Losh <steve@stevelosh.com>
parents:
11985
diff
changeset
|
749 else: |
12093
cd895084a4cd
alias: on --debug, print expansion when it has invalid arguments
Brodie Rao <brodie@bitheap.org>
parents:
12092
diff
changeset
|
750 try: |
21556
5e13507a3b4e
alias: fix loss of non-zero return code in command aliases
Yuya Nishihara <yuya@tcha.org>
parents:
20829
diff
changeset
|
751 return util.checksignature(self.fn)(ui, *args, **opts) |
12093
cd895084a4cd
alias: on --debug, print expansion when it has invalid arguments
Brodie Rao <brodie@bitheap.org>
parents:
12092
diff
changeset
|
752 except error.SignatureError: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
753 args = b' '.join([self.cmdname] + self.args) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
754 ui.debug(b"alias '%s' expands to '%s'\n" % (self.name, args)) |
12093
cd895084a4cd
alias: on --debug, print expansion when it has invalid arguments
Brodie Rao <brodie@bitheap.org>
parents:
12092
diff
changeset
|
755 raise |
8655 | 756 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
757 |
49037
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
49004
diff
changeset
|
758 class lazyaliasentry: |
34313
bd50aa1aa035
alias: make alias command lazily resolved
Jun Wu <quark@fb.com>
parents:
34312
diff
changeset
|
759 """like a typical command entry (func, opts, help), but is lazy""" |
bd50aa1aa035
alias: make alias command lazily resolved
Jun Wu <quark@fb.com>
parents:
34312
diff
changeset
|
760 |
37137
6890b7e991a4
help: supporting both help and doc for aliases
Rodrigo Damazio <rdamazio@google.com>
parents:
37123
diff
changeset
|
761 def __init__(self, ui, name, definition, cmdtable, source): |
6890b7e991a4
help: supporting both help and doc for aliases
Rodrigo Damazio <rdamazio@google.com>
parents:
37123
diff
changeset
|
762 self.ui = ui |
34313
bd50aa1aa035
alias: make alias command lazily resolved
Jun Wu <quark@fb.com>
parents:
34312
diff
changeset
|
763 self.name = name |
bd50aa1aa035
alias: make alias command lazily resolved
Jun Wu <quark@fb.com>
parents:
34312
diff
changeset
|
764 self.definition = definition |
bd50aa1aa035
alias: make alias command lazily resolved
Jun Wu <quark@fb.com>
parents:
34312
diff
changeset
|
765 self.cmdtable = cmdtable.copy() |
bd50aa1aa035
alias: make alias command lazily resolved
Jun Wu <quark@fb.com>
parents:
34312
diff
changeset
|
766 self.source = source |
40490
444861dc1e55
help: displaying documented aliases by default
rdamazio@google.com
parents:
40402
diff
changeset
|
767 self.alias = True |
34313
bd50aa1aa035
alias: make alias command lazily resolved
Jun Wu <quark@fb.com>
parents:
34312
diff
changeset
|
768 |
bd50aa1aa035
alias: make alias command lazily resolved
Jun Wu <quark@fb.com>
parents:
34312
diff
changeset
|
769 @util.propertycache |
bd50aa1aa035
alias: make alias command lazily resolved
Jun Wu <quark@fb.com>
parents:
34312
diff
changeset
|
770 def _aliasdef(self): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
771 return cmdalias( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
772 self.ui, self.name, self.definition, self.cmdtable, self.source |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
773 ) |
34313
bd50aa1aa035
alias: make alias command lazily resolved
Jun Wu <quark@fb.com>
parents:
34312
diff
changeset
|
774 |
bd50aa1aa035
alias: make alias command lazily resolved
Jun Wu <quark@fb.com>
parents:
34312
diff
changeset
|
775 def __getitem__(self, n): |
bd50aa1aa035
alias: make alias command lazily resolved
Jun Wu <quark@fb.com>
parents:
34312
diff
changeset
|
776 aliasdef = self._aliasdef |
bd50aa1aa035
alias: make alias command lazily resolved
Jun Wu <quark@fb.com>
parents:
34312
diff
changeset
|
777 if n == 0: |
bd50aa1aa035
alias: make alias command lazily resolved
Jun Wu <quark@fb.com>
parents:
34312
diff
changeset
|
778 return aliasdef |
bd50aa1aa035
alias: make alias command lazily resolved
Jun Wu <quark@fb.com>
parents:
34312
diff
changeset
|
779 elif n == 1: |
bd50aa1aa035
alias: make alias command lazily resolved
Jun Wu <quark@fb.com>
parents:
34312
diff
changeset
|
780 return aliasdef.opts |
bd50aa1aa035
alias: make alias command lazily resolved
Jun Wu <quark@fb.com>
parents:
34312
diff
changeset
|
781 elif n == 2: |
bd50aa1aa035
alias: make alias command lazily resolved
Jun Wu <quark@fb.com>
parents:
34312
diff
changeset
|
782 return aliasdef.help |
bd50aa1aa035
alias: make alias command lazily resolved
Jun Wu <quark@fb.com>
parents:
34312
diff
changeset
|
783 else: |
bd50aa1aa035
alias: make alias command lazily resolved
Jun Wu <quark@fb.com>
parents:
34312
diff
changeset
|
784 raise IndexError |
bd50aa1aa035
alias: make alias command lazily resolved
Jun Wu <quark@fb.com>
parents:
34312
diff
changeset
|
785 |
bd50aa1aa035
alias: make alias command lazily resolved
Jun Wu <quark@fb.com>
parents:
34312
diff
changeset
|
786 def __iter__(self): |
bd50aa1aa035
alias: make alias command lazily resolved
Jun Wu <quark@fb.com>
parents:
34312
diff
changeset
|
787 for i in range(3): |
bd50aa1aa035
alias: make alias command lazily resolved
Jun Wu <quark@fb.com>
parents:
34312
diff
changeset
|
788 yield self[i] |
bd50aa1aa035
alias: make alias command lazily resolved
Jun Wu <quark@fb.com>
parents:
34312
diff
changeset
|
789 |
bd50aa1aa035
alias: make alias command lazily resolved
Jun Wu <quark@fb.com>
parents:
34312
diff
changeset
|
790 def __len__(self): |
bd50aa1aa035
alias: make alias command lazily resolved
Jun Wu <quark@fb.com>
parents:
34312
diff
changeset
|
791 return 3 |
bd50aa1aa035
alias: make alias command lazily resolved
Jun Wu <quark@fb.com>
parents:
34312
diff
changeset
|
792 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
793 |
8655 | 794 def addaliases(ui, cmdtable): |
795 # aliases are processed after extensions have been loaded, so they | |
796 # may use extension commands. Aliases can also use other alias definitions, | |
797 # but only if they have been defined prior to the current definition. | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
798 for alias, definition in ui.configitems(b'alias', ignoresub=True): |
15019
f4b7be3f8430
dispatch: don't rewrap aliases that have the same definition
Idan Kamara <idankk86@gmail.com>
parents:
14992
diff
changeset
|
799 try: |
34313
bd50aa1aa035
alias: make alias command lazily resolved
Jun Wu <quark@fb.com>
parents:
34312
diff
changeset
|
800 if cmdtable[alias].definition == definition: |
15019
f4b7be3f8430
dispatch: don't rewrap aliases that have the same definition
Idan Kamara <idankk86@gmail.com>
parents:
14992
diff
changeset
|
801 continue |
f4b7be3f8430
dispatch: don't rewrap aliases that have the same definition
Idan Kamara <idankk86@gmail.com>
parents:
14992
diff
changeset
|
802 except (KeyError, AttributeError): |
f4b7be3f8430
dispatch: don't rewrap aliases that have the same definition
Idan Kamara <idankk86@gmail.com>
parents:
14992
diff
changeset
|
803 # definition might not exist or it might not be a cmdalias |
f4b7be3f8430
dispatch: don't rewrap aliases that have the same definition
Idan Kamara <idankk86@gmail.com>
parents:
14992
diff
changeset
|
804 pass |
f4b7be3f8430
dispatch: don't rewrap aliases that have the same definition
Idan Kamara <idankk86@gmail.com>
parents:
14992
diff
changeset
|
805 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
806 source = ui.configsource(b'alias', alias) |
37137
6890b7e991a4
help: supporting both help and doc for aliases
Rodrigo Damazio <rdamazio@google.com>
parents:
37123
diff
changeset
|
807 entry = lazyaliasentry(ui, alias, definition, cmdtable, source) |
34313
bd50aa1aa035
alias: make alias command lazily resolved
Jun Wu <quark@fb.com>
parents:
34312
diff
changeset
|
808 cmdtable[alias] = entry |
8655 | 809 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
810 |
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
811 def _parse(ui, args): |
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
812 options = {} |
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
813 cmdoptions = {} |
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
814 |
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
815 try: |
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
816 args = fancyopts.fancyopts(args, commands.globalopts, options) |
30581
541949a10a68
fancyopts: switch from fancyopts.getopt.* to getopt.*
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30564
diff
changeset
|
817 except getopt.GetoptError as inst: |
37087
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36752
diff
changeset
|
818 raise error.CommandError(None, stringutil.forcebytestr(inst)) |
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
819 |
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
820 if args: |
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
821 cmd, args = args[0], args[1:] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
822 aliases, entry = cmdutil.findcmd( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
823 cmd, commands.table, ui.configbool(b"ui", b"strict") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
824 ) |
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
825 cmd = aliases[0] |
14265
e4ab5ae193f2
add positional arguments to non-shell aliases
Alexander Solovyov <alexander@solovyov.net>
parents:
14096
diff
changeset
|
826 args = aliasargs(entry[0], args) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
827 defaults = ui.config(b"defaults", cmd) |
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
828 if defaults: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
829 args = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
830 pycompat.maplist(util.expandpath, pycompat.shlexsplit(defaults)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
831 + args |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
832 ) |
9875
d6a95c5f6ff9
dispatch: minor refactoring
Henri Wiechers <hwiechers@gmail.com>
parents:
9825
diff
changeset
|
833 c = list(entry[1]) |
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
834 else: |
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
835 cmd = None |
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
836 c = [] |
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
837 |
52757
1ccbca64610a
dispatch: allow global options with a '-' in the long name
Matt Harbison <matt_harbison@yahoo.com>
parents:
52667
diff
changeset
|
838 def global_opt_to_fancy_opt(opt_name): |
1ccbca64610a
dispatch: allow global options with a '-' in the long name
Matt Harbison <matt_harbison@yahoo.com>
parents:
52667
diff
changeset
|
839 # fancyopts() does this transform on `options`, but globalopts uses a |
1ccbca64610a
dispatch: allow global options with a '-' in the long name
Matt Harbison <matt_harbison@yahoo.com>
parents:
52667
diff
changeset
|
840 # '-', so that it is displayed in the help and accepted as input that |
1ccbca64610a
dispatch: allow global options with a '-' in the long name
Matt Harbison <matt_harbison@yahoo.com>
parents:
52667
diff
changeset
|
841 # way. |
1ccbca64610a
dispatch: allow global options with a '-' in the long name
Matt Harbison <matt_harbison@yahoo.com>
parents:
52667
diff
changeset
|
842 return opt_name.replace(b'-', b'_') |
1ccbca64610a
dispatch: allow global options with a '-' in the long name
Matt Harbison <matt_harbison@yahoo.com>
parents:
52667
diff
changeset
|
843 |
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
844 # combine global options into local |
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
845 for o in commands.globalopts: |
52757
1ccbca64610a
dispatch: allow global options with a '-' in the long name
Matt Harbison <matt_harbison@yahoo.com>
parents:
52667
diff
changeset
|
846 name = global_opt_to_fancy_opt(o[1]) |
1ccbca64610a
dispatch: allow global options with a '-' in the long name
Matt Harbison <matt_harbison@yahoo.com>
parents:
52667
diff
changeset
|
847 |
1ccbca64610a
dispatch: allow global options with a '-' in the long name
Matt Harbison <matt_harbison@yahoo.com>
parents:
52667
diff
changeset
|
848 # The fancyopts name is needed for `options`, but the original name |
1ccbca64610a
dispatch: allow global options with a '-' in the long name
Matt Harbison <matt_harbison@yahoo.com>
parents:
52667
diff
changeset
|
849 # needs to be used in the second element here, or the parsing for the |
1ccbca64610a
dispatch: allow global options with a '-' in the long name
Matt Harbison <matt_harbison@yahoo.com>
parents:
52667
diff
changeset
|
850 # command verb fails, saying the command has no such option. |
1ccbca64610a
dispatch: allow global options with a '-' in the long name
Matt Harbison <matt_harbison@yahoo.com>
parents:
52667
diff
changeset
|
851 c.append((o[0], o[1], options[name], o[3])) |
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
852 |
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
853 try: |
29833
61a4cdc98307
dispatch: explicitly pass fancyopts optional arg as a keyword
Augie Fackler <augie@google.com>
parents:
29795
diff
changeset
|
854 args = fancyopts.fancyopts(args, c, cmdoptions, gnu=True) |
30581
541949a10a68
fancyopts: switch from fancyopts.getopt.* to getopt.*
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30564
diff
changeset
|
855 except getopt.GetoptError as inst: |
37087
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36752
diff
changeset
|
856 raise error.CommandError(cmd, stringutil.forcebytestr(inst)) |
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
857 |
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
858 # separate global options back out |
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
859 for o in commands.globalopts: |
52757
1ccbca64610a
dispatch: allow global options with a '-' in the long name
Matt Harbison <matt_harbison@yahoo.com>
parents:
52667
diff
changeset
|
860 n = global_opt_to_fancy_opt(o[1]) |
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
861 options[n] = cmdoptions[n] |
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
862 del cmdoptions[n] |
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
863 |
9875
d6a95c5f6ff9
dispatch: minor refactoring
Henri Wiechers <hwiechers@gmail.com>
parents:
9825
diff
changeset
|
864 return (cmd, cmd and entry[0] or None, args, options, cmdoptions) |
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
865 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
866 |
8137 | 867 def _parseconfig(ui, config): |
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
868 """parse the --config options from the command line""" |
14753
10dcb3e7cb55
dispatch: return read config options
Idan Kamara <idankk86@gmail.com>
parents:
14752
diff
changeset
|
869 configs = [] |
10dcb3e7cb55
dispatch: return read config options
Idan Kamara <idankk86@gmail.com>
parents:
14752
diff
changeset
|
870 |
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
871 for cfg in config: |
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
872 try: |
52667
73ab542565e0
pyupgrade: run the `unpack_list_comprehension` fixer
Matt Harbison <matt_harbison@yahoo.com>
parents:
52665
diff
changeset
|
873 name, value = (cfgelem.strip() for cfgelem in cfg.split(b'=', 1)) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
874 section, name = name.split(b'.', 1) |
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
875 if not section or not name: |
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
876 raise IndexError |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
877 ui.setconfig(section, name, value, b'--config') |
14753
10dcb3e7cb55
dispatch: return read config options
Idan Kamara <idankk86@gmail.com>
parents:
14752
diff
changeset
|
878 configs.append((section, name, value)) |
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
879 except (IndexError, ValueError): |
46119
db5dddb38f5b
errors: raise InputError on early parse error in dispatch
Martin von Zweigbergk <martinvonz@google.com>
parents:
46102
diff
changeset
|
880 raise error.InputError( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
881 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
882 b'malformed --config option: %r ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
883 b'(use --config section.name=value)' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
884 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
885 % pycompat.bytestr(cfg) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
886 ) |
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
887 |
14753
10dcb3e7cb55
dispatch: return read config options
Idan Kamara <idankk86@gmail.com>
parents:
14752
diff
changeset
|
888 return configs |
10dcb3e7cb55
dispatch: return read config options
Idan Kamara <idankk86@gmail.com>
parents:
14752
diff
changeset
|
889 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
890 |
52758
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
891 def _parse_config_files( |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
892 ui, cmdargs: list[bytes], config_files: Iterable[bytes] |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
893 ) -> list[tuple[bytes, bytes, bytes, bytes]]: |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
894 """parse the --config-file options from the command line |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
895 |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
896 A list of tuples containing (section, name, value, source) is returned, |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
897 in the order they were read. |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
898 """ |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
899 |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
900 configs: list[tuple[bytes, bytes, bytes, bytes]] = [] |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
901 |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
902 cfg = configmod.config() |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
903 |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
904 for file in config_files: |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
905 try: |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
906 cfg.read(file) |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
907 except error.ConfigError as e: |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
908 raise error.InputError( |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
909 _(b'invalid --config-file content at %s') % e.location, |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
910 hint=e.message, |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
911 ) |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
912 except FileNotFoundError: |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
913 hint = None |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
914 if b'--cwd' in cmdargs: |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
915 hint = _(b"this file is resolved before --cwd is processed") |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
916 |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
917 raise error.InputError( |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
918 _(b'missing file "%s" for --config-file') % file, hint=hint |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
919 ) |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
920 |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
921 for section in cfg.sections(): |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
922 for item in cfg.items(section): |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
923 name = item[0] |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
924 value = item[1] |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
925 src = cfg.source(section, name) |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
926 |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
927 ui.setconfig(section, name, value, src) |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
928 configs.append((section, name, value, src)) |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
929 |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
930 return configs |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
931 |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
932 |
35233
6e6d0a5b88e6
dispatch: replace _earlyreq*() with new fancyopts-based parser
Yuya Nishihara <yuya@tcha.org>
parents:
35232
diff
changeset
|
933 def _earlyparseopts(ui, args): |
34996
c9740b69b9b7
dispatch: add HGPLAIN=+strictflags to restrict early parsing of global options
Yuya Nishihara <yuya@tcha.org>
parents:
34986
diff
changeset
|
934 options = {} |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
935 fancyopts.fancyopts( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
936 args, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
937 commands.globalopts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
938 options, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
939 gnu=not ui.plain(b'strictflags'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
940 early=True, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
941 optaliases={b'repository': [b'repo']}, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
942 ) |
34996
c9740b69b9b7
dispatch: add HGPLAIN=+strictflags to restrict early parsing of global options
Yuya Nishihara <yuya@tcha.org>
parents:
34986
diff
changeset
|
943 return options |
c9740b69b9b7
dispatch: add HGPLAIN=+strictflags to restrict early parsing of global options
Yuya Nishihara <yuya@tcha.org>
parents:
34986
diff
changeset
|
944 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
945 |
35234
7ce0ba3a1c32
dispatch: replace _earlygetopt(strip=True) with new parser
Yuya Nishihara <yuya@tcha.org>
parents:
35233
diff
changeset
|
946 def _earlysplitopts(args): |
7ce0ba3a1c32
dispatch: replace _earlygetopt(strip=True) with new parser
Yuya Nishihara <yuya@tcha.org>
parents:
35233
diff
changeset
|
947 """Split args into a list of possible early options and remainder args""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
948 shortoptions = b'R:' |
35234
7ce0ba3a1c32
dispatch: replace _earlygetopt(strip=True) with new parser
Yuya Nishihara <yuya@tcha.org>
parents:
35233
diff
changeset
|
949 # TODO: perhaps 'debugger' should be included |
52758
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
950 longoptions = [ |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
951 b'cwd=', |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
952 b'repository=', |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
953 b'repo=', |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
954 b'config=', |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
955 b'config-file=', |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
956 ] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
957 return fancyopts.earlygetopt( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
958 args, shortoptions, longoptions, gnu=True, keepsep=True |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
959 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
960 |
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
961 |
11330
713ae78bb583
provide pre- and post- hooks with parsed command line arguments.
Chad Dombrova <chadrik@gmail.com>
parents:
11305
diff
changeset
|
962 def runcommand(lui, repo, cmd, fullargs, ui, options, d, cmdpats, cmdoptions): |
7819
14b703252f14
dispatch: extract command execution block into method
Bill Barry <after.fallout@gmail.com>
parents:
7772
diff
changeset
|
963 # run pre-hook, and abort if it fails |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
964 hook.hook( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
965 lui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
966 repo, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
967 b"pre-%s" % cmd, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
968 True, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
969 args=b" ".join(fullargs), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
970 pats=cmdpats, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
971 opts=cmdoptions, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
972 ) |
29129
e6dfb0e4eeef
dispatch: add fail-* family of hooks
Jordi Guti?rrez Hermoso <jordigh@octave.org>
parents:
29114
diff
changeset
|
973 try: |
e6dfb0e4eeef
dispatch: add fail-* family of hooks
Jordi Guti?rrez Hermoso <jordigh@octave.org>
parents:
29114
diff
changeset
|
974 ret = _runcommand(ui, options, cmd, d) |
e6dfb0e4eeef
dispatch: add fail-* family of hooks
Jordi Guti?rrez Hermoso <jordigh@octave.org>
parents:
29114
diff
changeset
|
975 # run post-hook, passing command result |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
976 hook.hook( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
977 lui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
978 repo, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
979 b"post-%s" % cmd, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
980 False, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
981 args=b" ".join(fullargs), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
982 result=ret, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
983 pats=cmdpats, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
984 opts=cmdoptions, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
985 ) |
29129
e6dfb0e4eeef
dispatch: add fail-* family of hooks
Jordi Guti?rrez Hermoso <jordigh@octave.org>
parents:
29114
diff
changeset
|
986 except Exception: |
e6dfb0e4eeef
dispatch: add fail-* family of hooks
Jordi Guti?rrez Hermoso <jordigh@octave.org>
parents:
29114
diff
changeset
|
987 # run failure hook and re-raise |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
988 hook.hook( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
989 lui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
990 repo, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
991 b"fail-%s" % cmd, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
992 False, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
993 args=b" ".join(fullargs), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
994 pats=cmdpats, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
995 opts=cmdoptions, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
996 ) |
29129
e6dfb0e4eeef
dispatch: add fail-* family of hooks
Jordi Guti?rrez Hermoso <jordigh@octave.org>
parents:
29114
diff
changeset
|
997 raise |
7819
14b703252f14
dispatch: extract command execution block into method
Bill Barry <after.fallout@gmail.com>
parents:
7772
diff
changeset
|
998 return ret |
14b703252f14
dispatch: extract command execution block into method
Bill Barry <after.fallout@gmail.com>
parents:
7772
diff
changeset
|
999 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1000 |
28263
59509c6724c7
dispatch: add wd parameter to _getlocal
Jun Wu <quark@fb.com>
parents:
28081
diff
changeset
|
1001 def _getlocal(ui, rpath, wd=None): |
12536
208fc9ad6a48
alias: only allow global options before a shell alias, pass later ones through
Steve Losh <steve@stevelosh.com>
parents:
12276
diff
changeset
|
1002 """Return (path, local ui object) for the given target path. |
12770
614f0d8724ab
check-code: find trailing whitespace
Martin Geisler <mg@lazybytes.net>
parents:
12748
diff
changeset
|
1003 |
12536
208fc9ad6a48
alias: only allow global options before a shell alias, pass later ones through
Steve Losh <steve@stevelosh.com>
parents:
12276
diff
changeset
|
1004 Takes paths in [cwd]/.hg/hgrc into account." |
208fc9ad6a48
alias: only allow global options before a shell alias, pass later ones through
Steve Losh <steve@stevelosh.com>
parents:
12276
diff
changeset
|
1005 """ |
49452
3681a47611b8
dispatch: change cwd when loading local config
Arun Kulshreshtha <akulshreshtha@janestreet.com>
parents:
49312
diff
changeset
|
1006 try: |
3681a47611b8
dispatch: change cwd when loading local config
Arun Kulshreshtha <akulshreshtha@janestreet.com>
parents:
49312
diff
changeset
|
1007 cwd = encoding.getcwd() |
3681a47611b8
dispatch: change cwd when loading local config
Arun Kulshreshtha <akulshreshtha@janestreet.com>
parents:
49312
diff
changeset
|
1008 except OSError as e: |
3681a47611b8
dispatch: change cwd when loading local config
Arun Kulshreshtha <akulshreshtha@janestreet.com>
parents:
49312
diff
changeset
|
1009 raise error.Abort( |
3681a47611b8
dispatch: change cwd when loading local config
Arun Kulshreshtha <akulshreshtha@janestreet.com>
parents:
49312
diff
changeset
|
1010 _(b"error getting current working directory: %s") |
3681a47611b8
dispatch: change cwd when loading local config
Arun Kulshreshtha <akulshreshtha@janestreet.com>
parents:
49312
diff
changeset
|
1011 % encoding.strtolocal(e.strerror) |
3681a47611b8
dispatch: change cwd when loading local config
Arun Kulshreshtha <akulshreshtha@janestreet.com>
parents:
49312
diff
changeset
|
1012 ) |
3681a47611b8
dispatch: change cwd when loading local config
Arun Kulshreshtha <akulshreshtha@janestreet.com>
parents:
49312
diff
changeset
|
1013 |
3681a47611b8
dispatch: change cwd when loading local config
Arun Kulshreshtha <akulshreshtha@janestreet.com>
parents:
49312
diff
changeset
|
1014 # If using an alternate wd, temporarily switch to it so that relative |
3681a47611b8
dispatch: change cwd when loading local config
Arun Kulshreshtha <akulshreshtha@janestreet.com>
parents:
49312
diff
changeset
|
1015 # paths are resolved correctly during config loading. |
3681a47611b8
dispatch: change cwd when loading local config
Arun Kulshreshtha <akulshreshtha@janestreet.com>
parents:
49312
diff
changeset
|
1016 oldcwd = None |
28263
59509c6724c7
dispatch: add wd parameter to _getlocal
Jun Wu <quark@fb.com>
parents:
28081
diff
changeset
|
1017 if wd is None: |
49452
3681a47611b8
dispatch: change cwd when loading local config
Arun Kulshreshtha <akulshreshtha@janestreet.com>
parents:
49312
diff
changeset
|
1018 wd = cwd |
3681a47611b8
dispatch: change cwd when loading local config
Arun Kulshreshtha <akulshreshtha@janestreet.com>
parents:
49312
diff
changeset
|
1019 else: |
3681a47611b8
dispatch: change cwd when loading local config
Arun Kulshreshtha <akulshreshtha@janestreet.com>
parents:
49312
diff
changeset
|
1020 oldcwd = cwd |
3681a47611b8
dispatch: change cwd when loading local config
Arun Kulshreshtha <akulshreshtha@janestreet.com>
parents:
49312
diff
changeset
|
1021 os.chdir(wd) |
44161
ef11dfc56674
config: also respect HGRCSKIPREPO in `dispatch._getlocal`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44019
diff
changeset
|
1022 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1023 path = cmdutil.findrepo(wd) or b"" |
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1024 if not path: |
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1025 lui = ui |
9436 | 1026 else: |
12636
c24215aa7e69
dispatch: remove superfluous try/except when reading local ui config
Brodie Rao <brodie@bitheap.org>
parents:
12633
diff
changeset
|
1027 lui = ui.copy() |
44161
ef11dfc56674
config: also respect HGRCSKIPREPO in `dispatch._getlocal`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44019
diff
changeset
|
1028 if rcutil.use_repo_hgrc(): |
52457
22129ce9f86d
config: include the component level when returning them
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52455
diff
changeset
|
1029 for __, c_type, rc_path in rcutil.repo_components(path): |
52455
e3b45916c375
config: return component from `repo_components`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52454
diff
changeset
|
1030 assert c_type == b'path' |
52454
0b791c90280a
repo-config: move rc component of repository inside `rcutil`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52453
diff
changeset
|
1031 lui.readconfig(rc_path, root=path) |
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1032 |
34985
d3d35a55e03b
dispatch: convert non-list option parsed by _earlygetopt() to string
Yuya Nishihara <yuya@tcha.org>
parents:
34984
diff
changeset
|
1033 if rpath: |
52452
8ac33b3f2552
repo-config: clarify why we seems to parse the repository "twice"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52447
diff
changeset
|
1034 # the specified path, might be defined in the [paths] section of the |
8ac33b3f2552
repo-config: clarify why we seems to parse the repository "twice"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52447
diff
changeset
|
1035 # local repository. So we had to read the local config first even if it |
8ac33b3f2552
repo-config: clarify why we seems to parse the repository "twice"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52447
diff
changeset
|
1036 # get overriden here. |
49854
30eb36d93072
path: use `get_clone_path_obj` in _getlocal
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49452
diff
changeset
|
1037 path_obj = urlutil.get_clone_path_obj(lui, rpath) |
30eb36d93072
path: use `get_clone_path_obj` in _getlocal
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49452
diff
changeset
|
1038 path = path_obj.rawloc |
8190
9b8ac5fb7760
ui: kill most users of parentui name and arg, replace with .copy()
Matt Mackall <mpm@selenic.com>
parents:
8144
diff
changeset
|
1039 lui = ui.copy() |
44161
ef11dfc56674
config: also respect HGRCSKIPREPO in `dispatch._getlocal`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44019
diff
changeset
|
1040 if rcutil.use_repo_hgrc(): |
52457
22129ce9f86d
config: include the component level when returning them
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52455
diff
changeset
|
1041 for __, c_type, rc_path in rcutil.repo_components(path): |
52455
e3b45916c375
config: return component from `repo_components`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52454
diff
changeset
|
1042 assert c_type == b'path' |
52454
0b791c90280a
repo-config: move rc component of repository inside `rcutil`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52453
diff
changeset
|
1043 lui.readconfig(rc_path, root=path) |
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1044 |
49452
3681a47611b8
dispatch: change cwd when loading local config
Arun Kulshreshtha <akulshreshtha@janestreet.com>
parents:
49312
diff
changeset
|
1045 if oldcwd: |
3681a47611b8
dispatch: change cwd when loading local config
Arun Kulshreshtha <akulshreshtha@janestreet.com>
parents:
49312
diff
changeset
|
1046 os.chdir(oldcwd) |
3681a47611b8
dispatch: change cwd when loading local config
Arun Kulshreshtha <akulshreshtha@janestreet.com>
parents:
49312
diff
changeset
|
1047 |
12536
208fc9ad6a48
alias: only allow global options before a shell alias, pass later ones through
Steve Losh <steve@stevelosh.com>
parents:
12276
diff
changeset
|
1048 return path, lui |
208fc9ad6a48
alias: only allow global options before a shell alias, pass later ones through
Steve Losh <steve@stevelosh.com>
parents:
12276
diff
changeset
|
1049 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1050 |
29132
12769703d4ba
dispatch: always load extensions before running shell aliases (issue5230)
Jun Wu <quark@fb.com>
parents:
29129
diff
changeset
|
1051 def _checkshellalias(lui, ui, args): |
12769703d4ba
dispatch: always load extensions before running shell aliases (issue5230)
Jun Wu <quark@fb.com>
parents:
29129
diff
changeset
|
1052 """Return the function to run the shell alias, if it is required""" |
12536
208fc9ad6a48
alias: only allow global options before a shell alias, pass later ones through
Steve Losh <steve@stevelosh.com>
parents:
12276
diff
changeset
|
1053 options = {} |
12748
d10369fefd01
alias: fail gracefully when invalid global options are given (issue2442)
Steve Losh <steve@stevelosh.com>
parents:
12637
diff
changeset
|
1054 |
d10369fefd01
alias: fail gracefully when invalid global options are given (issue2442)
Steve Losh <steve@stevelosh.com>
parents:
12637
diff
changeset
|
1055 try: |
d10369fefd01
alias: fail gracefully when invalid global options are given (issue2442)
Steve Losh <steve@stevelosh.com>
parents:
12637
diff
changeset
|
1056 args = fancyopts.fancyopts(args, commands.globalopts, options) |
30581
541949a10a68
fancyopts: switch from fancyopts.getopt.* to getopt.*
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30564
diff
changeset
|
1057 except getopt.GetoptError: |
12748
d10369fefd01
alias: fail gracefully when invalid global options are given (issue2442)
Steve Losh <steve@stevelosh.com>
parents:
12637
diff
changeset
|
1058 return |
12536
208fc9ad6a48
alias: only allow global options before a shell alias, pass later ones through
Steve Losh <steve@stevelosh.com>
parents:
12276
diff
changeset
|
1059 |
208fc9ad6a48
alias: only allow global options before a shell alias, pass later ones through
Steve Losh <steve@stevelosh.com>
parents:
12276
diff
changeset
|
1060 if not args: |
208fc9ad6a48
alias: only allow global options before a shell alias, pass later ones through
Steve Losh <steve@stevelosh.com>
parents:
12276
diff
changeset
|
1061 return |
208fc9ad6a48
alias: only allow global options before a shell alias, pass later ones through
Steve Losh <steve@stevelosh.com>
parents:
12276
diff
changeset
|
1062 |
29132
12769703d4ba
dispatch: always load extensions before running shell aliases (issue5230)
Jun Wu <quark@fb.com>
parents:
29129
diff
changeset
|
1063 cmdtable = commands.table |
12536
208fc9ad6a48
alias: only allow global options before a shell alias, pass later ones through
Steve Losh <steve@stevelosh.com>
parents:
12276
diff
changeset
|
1064 |
208fc9ad6a48
alias: only allow global options before a shell alias, pass later ones through
Steve Losh <steve@stevelosh.com>
parents:
12276
diff
changeset
|
1065 cmd = args[0] |
208fc9ad6a48
alias: only allow global options before a shell alias, pass later ones through
Steve Losh <steve@stevelosh.com>
parents:
12276
diff
changeset
|
1066 try: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1067 strict = ui.configbool(b"ui", b"strict") |
22377
f98abe3146b2
dispatch: check shell alias again after loading extensions (issue4355)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22376
diff
changeset
|
1068 aliases, entry = cmdutil.findcmd(cmd, cmdtable, strict) |
12932
ab93029ab622
alias: fall back to normal error handling for ambigious commands (fixes issue2475)
Steve Losh <steve@stevelosh.com>
parents:
12831
diff
changeset
|
1069 except (error.AmbiguousCommand, error.UnknownCommand): |
12536
208fc9ad6a48
alias: only allow global options before a shell alias, pass later ones through
Steve Losh <steve@stevelosh.com>
parents:
12276
diff
changeset
|
1070 return |
208fc9ad6a48
alias: only allow global options before a shell alias, pass later ones through
Steve Losh <steve@stevelosh.com>
parents:
12276
diff
changeset
|
1071 |
208fc9ad6a48
alias: only allow global options before a shell alias, pass later ones through
Steve Losh <steve@stevelosh.com>
parents:
12276
diff
changeset
|
1072 cmd = aliases[0] |
208fc9ad6a48
alias: only allow global options before a shell alias, pass later ones through
Steve Losh <steve@stevelosh.com>
parents:
12276
diff
changeset
|
1073 fn = entry[0] |
208fc9ad6a48
alias: only allow global options before a shell alias, pass later ones through
Steve Losh <steve@stevelosh.com>
parents:
12276
diff
changeset
|
1074 |
50951
d718eddf01d9
safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50604
diff
changeset
|
1075 if cmd and hasattr(fn, 'shell'): |
34986
02845f7441af
dispatch: verify result of early command parsing
Yuya Nishihara <yuya@tcha.org>
parents:
34985
diff
changeset
|
1076 # shell alias shouldn't receive early options which are consumed by hg |
35234
7ce0ba3a1c32
dispatch: replace _earlygetopt(strip=True) with new parser
Yuya Nishihara <yuya@tcha.org>
parents:
35233
diff
changeset
|
1077 _earlyopts, args = _earlysplitopts(args) |
12536
208fc9ad6a48
alias: only allow global options before a shell alias, pass later ones through
Steve Losh <steve@stevelosh.com>
parents:
12276
diff
changeset
|
1078 d = lambda: fn(ui, *args[1:]) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1079 return lambda: runcommand( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1080 lui, None, cmd, args[:1], ui, options, d, [], {} |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1081 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1082 |
12536
208fc9ad6a48
alias: only allow global options before a shell alias, pass later ones through
Steve Losh <steve@stevelosh.com>
parents:
12276
diff
changeset
|
1083 |
14439
80c599eee3f3
dispatch: use the request to store the ui object
Idan Kamara <idankk86@gmail.com>
parents:
14438
diff
changeset
|
1084 def _dispatch(req): |
14438
08bfec2ef031
dispatch: wrap dispatch related information in a request class
Idan Kamara <idankk86@gmail.com>
parents:
14286
diff
changeset
|
1085 args = req.args |
14439
80c599eee3f3
dispatch: use the request to store the ui object
Idan Kamara <idankk86@gmail.com>
parents:
14438
diff
changeset
|
1086 ui = req.ui |
80c599eee3f3
dispatch: use the request to store the ui object
Idan Kamara <idankk86@gmail.com>
parents:
14438
diff
changeset
|
1087 |
12536
208fc9ad6a48
alias: only allow global options before a shell alias, pass later ones through
Steve Losh <steve@stevelosh.com>
parents:
12276
diff
changeset
|
1088 # check for cwd |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1089 cwd = req.earlyoptions[b'cwd'] |
12536
208fc9ad6a48
alias: only allow global options before a shell alias, pass later ones through
Steve Losh <steve@stevelosh.com>
parents:
12276
diff
changeset
|
1090 if cwd: |
34985
d3d35a55e03b
dispatch: convert non-list option parsed by _earlygetopt() to string
Yuya Nishihara <yuya@tcha.org>
parents:
34984
diff
changeset
|
1091 os.chdir(cwd) |
12536
208fc9ad6a48
alias: only allow global options before a shell alias, pass later ones through
Steve Losh <steve@stevelosh.com>
parents:
12276
diff
changeset
|
1092 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1093 rpath = req.earlyoptions[b'repository'] |
12536
208fc9ad6a48
alias: only allow global options before a shell alias, pass later ones through
Steve Losh <steve@stevelosh.com>
parents:
12276
diff
changeset
|
1094 path, lui = _getlocal(ui, rpath) |
208fc9ad6a48
alias: only allow global options before a shell alias, pass later ones through
Steve Losh <steve@stevelosh.com>
parents:
12276
diff
changeset
|
1095 |
32331
bd872f64a8ba
cleanup: use set literals
Martin von Zweigbergk <martinvonz@google.com>
parents:
32207
diff
changeset
|
1096 uis = {ui, lui} |
30953
69a3c6c8bf95
dispatch: move detection of profiling earlier during startup
Bryan O'Sullivan <bryano@fb.com>
parents:
30937
diff
changeset
|
1097 |
69a3c6c8bf95
dispatch: move detection of profiling earlier during startup
Bryan O'Sullivan <bryano@fb.com>
parents:
30937
diff
changeset
|
1098 if req.repo: |
69a3c6c8bf95
dispatch: move detection of profiling earlier during startup
Bryan O'Sullivan <bryano@fb.com>
parents:
30937
diff
changeset
|
1099 uis.add(req.repo.ui) |
69a3c6c8bf95
dispatch: move detection of profiling earlier during startup
Bryan O'Sullivan <bryano@fb.com>
parents:
30937
diff
changeset
|
1100 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1101 if ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1102 req.earlyoptions[b'verbose'] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1103 or req.earlyoptions[b'debug'] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1104 or req.earlyoptions[b'quiet'] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1105 ): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1106 for opt in (b'verbose', b'debug', b'quiet'): |
38535
b86664c81833
debug: process --debug flag earlier
Boris Feld <boris.feld@octobus.net>
parents:
38143
diff
changeset
|
1107 val = pycompat.bytestr(bool(req.earlyoptions[opt])) |
b86664c81833
debug: process --debug flag earlier
Boris Feld <boris.feld@octobus.net>
parents:
38143
diff
changeset
|
1108 for ui_ in uis: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1109 ui_.setconfig(b'ui', opt, val, b'--' + opt) |
38535
b86664c81833
debug: process --debug flag earlier
Boris Feld <boris.feld@octobus.net>
parents:
38143
diff
changeset
|
1110 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1111 if req.earlyoptions[b'profile']: |
30953
69a3c6c8bf95
dispatch: move detection of profiling earlier during startup
Bryan O'Sullivan <bryano@fb.com>
parents:
30937
diff
changeset
|
1112 for ui_ in uis: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1113 ui_.setconfig(b'profiling', b'enabled', b'true', b'--profile') |
47064
a2bf93ab3014
profiling: add --no-profile to disable profiling enabled via config
Kyle Lippincott <spectral@google.com>
parents:
46957
diff
changeset
|
1114 elif req.earlyoptions[b'profile'] is False: |
a2bf93ab3014
profiling: add --no-profile to disable profiling enabled via config
Kyle Lippincott <spectral@google.com>
parents:
46957
diff
changeset
|
1115 # Check for it being set already, so that we don't pollute the config |
a2bf93ab3014
profiling: add --no-profile to disable profiling enabled via config
Kyle Lippincott <spectral@google.com>
parents:
46957
diff
changeset
|
1116 # with this when using chg in the very common case that it's not |
a2bf93ab3014
profiling: add --no-profile to disable profiling enabled via config
Kyle Lippincott <spectral@google.com>
parents:
46957
diff
changeset
|
1117 # enabled. |
a2bf93ab3014
profiling: add --no-profile to disable profiling enabled via config
Kyle Lippincott <spectral@google.com>
parents:
46957
diff
changeset
|
1118 if lui.configbool(b'profiling', b'enabled'): |
a2bf93ab3014
profiling: add --no-profile to disable profiling enabled via config
Kyle Lippincott <spectral@google.com>
parents:
46957
diff
changeset
|
1119 # Only do this on lui so that `chg foo` with a user config setting |
a2bf93ab3014
profiling: add --no-profile to disable profiling enabled via config
Kyle Lippincott <spectral@google.com>
parents:
46957
diff
changeset
|
1120 # profiling.enabled=1 still shows profiling information (chg will |
a2bf93ab3014
profiling: add --no-profile to disable profiling enabled via config
Kyle Lippincott <spectral@google.com>
parents:
46957
diff
changeset
|
1121 # specify `--no-profile` when `hg serve` is starting up, we don't |
a2bf93ab3014
profiling: add --no-profile to disable profiling enabled via config
Kyle Lippincott <spectral@google.com>
parents:
46957
diff
changeset
|
1122 # want that to propagate to every later invocation). |
a2bf93ab3014
profiling: add --no-profile to disable profiling enabled via config
Kyle Lippincott <spectral@google.com>
parents:
46957
diff
changeset
|
1123 lui.setconfig(b'profiling', b'enabled', b'false', b'--no-profile') |
30953
69a3c6c8bf95
dispatch: move detection of profiling earlier during startup
Bryan O'Sullivan <bryano@fb.com>
parents:
30937
diff
changeset
|
1124 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1125 profile = lui.configbool(b'profiling', b'enabled') |
32808
eede022fc142
profile: drop maybeprofile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32807
diff
changeset
|
1126 with profiling.profile(lui, enabled=profile) as profiler: |
30954
6d642ecf1a89
dispatch: start profiling earlier
Bryan O'Sullivan <bryano@fb.com>
parents:
30953
diff
changeset
|
1127 # Configure extensions in phases: uisetup, extsetup, cmdtable, and |
33065
ef46d432e2e4
dispatch: remove unused _loaded
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33064
diff
changeset
|
1128 # reposetup |
30954
6d642ecf1a89
dispatch: start profiling earlier
Bryan O'Sullivan <bryano@fb.com>
parents:
30953
diff
changeset
|
1129 extensions.loadall(lui) |
6d642ecf1a89
dispatch: start profiling earlier
Bryan O'Sullivan <bryano@fb.com>
parents:
30953
diff
changeset
|
1130 # Propagate any changes to lui.__class__ by extensions |
6d642ecf1a89
dispatch: start profiling earlier
Bryan O'Sullivan <bryano@fb.com>
parents:
30953
diff
changeset
|
1131 ui.__class__ = lui.__class__ |
5828
863e237b58fb
dispatch: allow extensions to provide setup code
Kirill Smelkov <kirr@mns.spb.ru>
parents:
5664
diff
changeset
|
1132 |
30954
6d642ecf1a89
dispatch: start profiling earlier
Bryan O'Sullivan <bryano@fb.com>
parents:
30953
diff
changeset
|
1133 # (uisetup and extsetup are handled in extensions.loadall) |
5828
863e237b58fb
dispatch: allow extensions to provide setup code
Kirill Smelkov <kirr@mns.spb.ru>
parents:
5664
diff
changeset
|
1134 |
30954
6d642ecf1a89
dispatch: start profiling earlier
Bryan O'Sullivan <bryano@fb.com>
parents:
30953
diff
changeset
|
1135 # (reposetup is handled in hg.repository) |
9410
1c83938b6a8e
extensions: load and configure extensions in well-defined phases
Martin Geisler <mg@lazybytes.net>
parents:
8936
diff
changeset
|
1136 |
30954
6d642ecf1a89
dispatch: start profiling earlier
Bryan O'Sullivan <bryano@fb.com>
parents:
30953
diff
changeset
|
1137 addaliases(lui, commands.table) |
8655 | 1138 |
30954
6d642ecf1a89
dispatch: start profiling earlier
Bryan O'Sullivan <bryano@fb.com>
parents:
30953
diff
changeset
|
1139 # All aliases and commands are completely defined, now. |
6d642ecf1a89
dispatch: start profiling earlier
Bryan O'Sullivan <bryano@fb.com>
parents:
30953
diff
changeset
|
1140 # Check abbreviation/ambiguity of shell alias. |
6d642ecf1a89
dispatch: start profiling earlier
Bryan O'Sullivan <bryano@fb.com>
parents:
30953
diff
changeset
|
1141 shellaliasfn = _checkshellalias(lui, ui, args) |
6d642ecf1a89
dispatch: start profiling earlier
Bryan O'Sullivan <bryano@fb.com>
parents:
30953
diff
changeset
|
1142 if shellaliasfn: |
40763
c93d046d4300
extensions: add "uipopulate" hook, called per instance, not per process
Yuya Nishihara <yuya@tcha.org>
parents:
40694
diff
changeset
|
1143 # no additional configs will be set, set up the ui instances |
c93d046d4300
extensions: add "uipopulate" hook, called per instance, not per process
Yuya Nishihara <yuya@tcha.org>
parents:
40694
diff
changeset
|
1144 for ui_ in uis: |
c93d046d4300
extensions: add "uipopulate" hook, called per instance, not per process
Yuya Nishihara <yuya@tcha.org>
parents:
40694
diff
changeset
|
1145 extensions.populateui(ui_) |
30010
b19c2679289c
dispatch: make hg --profile wrap reposetup
Arun Kulshreshtha <kulshrax@fb.com>
parents:
30009
diff
changeset
|
1146 return shellaliasfn() |
22377
f98abe3146b2
dispatch: check shell alias again after loading extensions (issue4355)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22376
diff
changeset
|
1147 |
30954
6d642ecf1a89
dispatch: start profiling earlier
Bryan O'Sullivan <bryano@fb.com>
parents:
30953
diff
changeset
|
1148 # check for fallback encoding |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1149 fallback = lui.config(b'ui', b'fallbackencoding') |
30954
6d642ecf1a89
dispatch: start profiling earlier
Bryan O'Sullivan <bryano@fb.com>
parents:
30953
diff
changeset
|
1150 if fallback: |
6d642ecf1a89
dispatch: start profiling earlier
Bryan O'Sullivan <bryano@fb.com>
parents:
30953
diff
changeset
|
1151 encoding.fallbackencoding = fallback |
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1152 |
30954
6d642ecf1a89
dispatch: start profiling earlier
Bryan O'Sullivan <bryano@fb.com>
parents:
30953
diff
changeset
|
1153 fullargs = args |
52759
8780d5707812
dispatch: restore `--config` can't be abbreviated message in case of ambiguity
Matt Harbison <matt_harbison@yahoo.com>
parents:
52758
diff
changeset
|
1154 try: |
8780d5707812
dispatch: restore `--config` can't be abbreviated message in case of ambiguity
Matt Harbison <matt_harbison@yahoo.com>
parents:
52758
diff
changeset
|
1155 cmd, func, args, options, cmdoptions = _parse(lui, args) |
8780d5707812
dispatch: restore `--config` can't be abbreviated message in case of ambiguity
Matt Harbison <matt_harbison@yahoo.com>
parents:
52758
diff
changeset
|
1156 except error.CommandError as e: |
8780d5707812
dispatch: restore `--config` can't be abbreviated message in case of ambiguity
Matt Harbison <matt_harbison@yahoo.com>
parents:
52758
diff
changeset
|
1157 cause = e.__context__ |
8780d5707812
dispatch: restore `--config` can't be abbreviated message in case of ambiguity
Matt Harbison <matt_harbison@yahoo.com>
parents:
52758
diff
changeset
|
1158 if isinstance(cause, getopt.GetoptError): |
8780d5707812
dispatch: restore `--config` can't be abbreviated message in case of ambiguity
Matt Harbison <matt_harbison@yahoo.com>
parents:
52758
diff
changeset
|
1159 if cause.opt and "config".startswith(cause.opt): |
8780d5707812
dispatch: restore `--config` can't be abbreviated message in case of ambiguity
Matt Harbison <matt_harbison@yahoo.com>
parents:
52758
diff
changeset
|
1160 # pycompat._getoptbwrapper() decodes bytes with latin-1 |
8780d5707812
dispatch: restore `--config` can't be abbreviated message in case of ambiguity
Matt Harbison <matt_harbison@yahoo.com>
parents:
52758
diff
changeset
|
1161 opt = cause.opt.encode('latin-1') |
8780d5707812
dispatch: restore `--config` can't be abbreviated message in case of ambiguity
Matt Harbison <matt_harbison@yahoo.com>
parents:
52758
diff
changeset
|
1162 all_long = {o[1] for o in commands.globalopts} |
8780d5707812
dispatch: restore `--config` can't be abbreviated message in case of ambiguity
Matt Harbison <matt_harbison@yahoo.com>
parents:
52758
diff
changeset
|
1163 possible = [o for o in all_long if o.startswith(opt)] |
8780d5707812
dispatch: restore `--config` can't be abbreviated message in case of ambiguity
Matt Harbison <matt_harbison@yahoo.com>
parents:
52758
diff
changeset
|
1164 |
8780d5707812
dispatch: restore `--config` can't be abbreviated message in case of ambiguity
Matt Harbison <matt_harbison@yahoo.com>
parents:
52758
diff
changeset
|
1165 if len(possible) != 1: |
8780d5707812
dispatch: restore `--config` can't be abbreviated message in case of ambiguity
Matt Harbison <matt_harbison@yahoo.com>
parents:
52758
diff
changeset
|
1166 raise error.InputError( |
8780d5707812
dispatch: restore `--config` can't be abbreviated message in case of ambiguity
Matt Harbison <matt_harbison@yahoo.com>
parents:
52758
diff
changeset
|
1167 _(b"option --config may not be abbreviated") |
8780d5707812
dispatch: restore `--config` can't be abbreviated message in case of ambiguity
Matt Harbison <matt_harbison@yahoo.com>
parents:
52758
diff
changeset
|
1168 ) |
8780d5707812
dispatch: restore `--config` can't be abbreviated message in case of ambiguity
Matt Harbison <matt_harbison@yahoo.com>
parents:
52758
diff
changeset
|
1169 raise |
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1170 |
40402
106adc261492
logtoprocess: sends the canonical command name to the subprocess
Boris Feld <boris.feld@octobus.net>
parents:
39823
diff
changeset
|
1171 # store the canonical command name in request object for later access |
106adc261492
logtoprocess: sends the canonical command name to the subprocess
Boris Feld <boris.feld@octobus.net>
parents:
39823
diff
changeset
|
1172 req.canonical_command = cmd |
106adc261492
logtoprocess: sends the canonical command name to the subprocess
Boris Feld <boris.feld@octobus.net>
parents:
39823
diff
changeset
|
1173 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1174 if options[b"config"] != req.earlyoptions[b"config"]: |
45933
ac565222b9f8
errors: raise InputError on bad top-level flags
Martin von Zweigbergk <martinvonz@google.com>
parents:
45929
diff
changeset
|
1175 raise error.InputError(_(b"option --config may not be abbreviated")) |
52758
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
1176 if options[b"config_file"] != req.earlyoptions[b"config_file"]: |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
1177 raise error.InputError( |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
1178 _(b"option --config-file may not be abbreviated") |
25b344f2aeef
dispatch: add support for the `--config-file` global option
Matt Harbison <matt_harbison@yahoo.com>
parents:
52757
diff
changeset
|
1179 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1180 if options[b"cwd"] != req.earlyoptions[b"cwd"]: |
45933
ac565222b9f8
errors: raise InputError on bad top-level flags
Martin von Zweigbergk <martinvonz@google.com>
parents:
45929
diff
changeset
|
1181 raise error.InputError(_(b"option --cwd may not be abbreviated")) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1182 if options[b"repository"] != req.earlyoptions[b"repository"]: |
45933
ac565222b9f8
errors: raise InputError on bad top-level flags
Martin von Zweigbergk <martinvonz@google.com>
parents:
45929
diff
changeset
|
1183 raise error.InputError( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1184 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1185 b"option -R has to be separated from other options (e.g. not " |
45924
ca39c45014fa
errors: remove trailing "!" in messages about bad top-level args
Martin von Zweigbergk <martinvonz@google.com>
parents:
45902
diff
changeset
|
1186 b"-qR) and --repository may only be abbreviated as --repo" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1187 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1188 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1189 if options[b"debugger"] != req.earlyoptions[b"debugger"]: |
45933
ac565222b9f8
errors: raise InputError on bad top-level flags
Martin von Zweigbergk <martinvonz@google.com>
parents:
45929
diff
changeset
|
1190 raise error.InputError( |
ac565222b9f8
errors: raise InputError on bad top-level flags
Martin von Zweigbergk <martinvonz@google.com>
parents:
45929
diff
changeset
|
1191 _(b"option --debugger may not be abbreviated") |
ac565222b9f8
errors: raise InputError on bad top-level flags
Martin von Zweigbergk <martinvonz@google.com>
parents:
45929
diff
changeset
|
1192 ) |
34982
d9aba3730d30
dispatch: abort if early boolean options can't be parsed
Yuya Nishihara <yuya@tcha.org>
parents:
34981
diff
changeset
|
1193 # don't validate --profile/--traceback, which can be enabled from now |
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1194 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1195 if options[b"encoding"]: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1196 encoding.encoding = options[b"encoding"] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1197 if options[b"encodingmode"]: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1198 encoding.encodingmode = options[b"encodingmode"] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1199 if options[b"time"]: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1200 |
30954
6d642ecf1a89
dispatch: start profiling earlier
Bryan O'Sullivan <bryano@fb.com>
parents:
30953
diff
changeset
|
1201 def get_times(): |
6d642ecf1a89
dispatch: start profiling earlier
Bryan O'Sullivan <bryano@fb.com>
parents:
30953
diff
changeset
|
1202 t = os.times() |
6d642ecf1a89
dispatch: start profiling earlier
Bryan O'Sullivan <bryano@fb.com>
parents:
30953
diff
changeset
|
1203 if t[4] == 0.0: |
44019
6b90f5c89cb4
py3: replace `time.clock()` with `time.perf_counter()`
Matt Harbison <matt_harbison@yahoo.com>
parents:
43807
diff
changeset
|
1204 # Windows leaves this as zero, so use time.perf_counter() |
6b90f5c89cb4
py3: replace `time.clock()` with `time.perf_counter()`
Matt Harbison <matt_harbison@yahoo.com>
parents:
43807
diff
changeset
|
1205 t = (t[0], t[1], t[2], t[3], util.timer()) |
30954
6d642ecf1a89
dispatch: start profiling earlier
Bryan O'Sullivan <bryano@fb.com>
parents:
30953
diff
changeset
|
1206 return t |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1207 |
30954
6d642ecf1a89
dispatch: start profiling earlier
Bryan O'Sullivan <bryano@fb.com>
parents:
30953
diff
changeset
|
1208 s = get_times() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1209 |
30954
6d642ecf1a89
dispatch: start profiling earlier
Bryan O'Sullivan <bryano@fb.com>
parents:
30953
diff
changeset
|
1210 def print_time(): |
6d642ecf1a89
dispatch: start profiling earlier
Bryan O'Sullivan <bryano@fb.com>
parents:
30953
diff
changeset
|
1211 t = get_times() |
6d642ecf1a89
dispatch: start profiling earlier
Bryan O'Sullivan <bryano@fb.com>
parents:
30953
diff
changeset
|
1212 ui.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1213 _(b"time: real %.3f secs (user %.3f+%.3f sys %.3f+%.3f)\n") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1214 % ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1215 t[4] - s[4], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1216 t[0] - s[0], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1217 t[2] - s[2], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1218 t[1] - s[1], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1219 t[3] - s[3], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1220 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1221 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1222 |
31958
de5c9d0e02ea
atexit: switch to home-grown implementation
Bryan O'Sullivan <bryano@fb.com>
parents:
31956
diff
changeset
|
1223 ui.atexit(print_time) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1224 if options[b"profile"]: |
32807
545f69cd6042
profile: support --profile in alias and abbreviated version (--prof)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32707
diff
changeset
|
1225 profiler.start() |
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1226 |
38535
b86664c81833
debug: process --debug flag earlier
Boris Feld <boris.feld@octobus.net>
parents:
38143
diff
changeset
|
1227 # if abbreviated version of this were used, take them in account, now |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1228 if options[b'verbose'] or options[b'debug'] or options[b'quiet']: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1229 for opt in (b'verbose', b'debug', b'quiet'): |
38535
b86664c81833
debug: process --debug flag earlier
Boris Feld <boris.feld@octobus.net>
parents:
38143
diff
changeset
|
1230 if options[opt] == req.earlyoptions[opt]: |
b86664c81833
debug: process --debug flag earlier
Boris Feld <boris.feld@octobus.net>
parents:
38143
diff
changeset
|
1231 continue |
35938
a2b3b5c5a25a
py3: replace "if ispy3" by pycompat.bytestr()
Yuya Nishihara <yuya@tcha.org>
parents:
35653
diff
changeset
|
1232 val = pycompat.bytestr(bool(options[opt])) |
30954
6d642ecf1a89
dispatch: start profiling earlier
Bryan O'Sullivan <bryano@fb.com>
parents:
30953
diff
changeset
|
1233 for ui_ in uis: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1234 ui_.setconfig(b'ui', opt, val, b'--' + opt) |
30954
6d642ecf1a89
dispatch: start profiling earlier
Bryan O'Sullivan <bryano@fb.com>
parents:
30953
diff
changeset
|
1235 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1236 if options[b'traceback']: |
14752
99ace3cb7352
dispatch: set global options on the request repo.ui
Idan Kamara <idankk86@gmail.com>
parents:
14748
diff
changeset
|
1237 for ui_ in uis: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1238 ui_.setconfig(b'ui', b'traceback', b'on', b'--traceback') |
14992
188936b334b1
dispatch: make sure global options on the command line take precedence
Idan Kamara <idankk86@gmail.com>
parents:
14914
diff
changeset
|
1239 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1240 if options[b'noninteractive']: |
30954
6d642ecf1a89
dispatch: start profiling earlier
Bryan O'Sullivan <bryano@fb.com>
parents:
30953
diff
changeset
|
1241 for ui_ in uis: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1242 ui_.setconfig(b'ui', b'interactive', b'off', b'-y') |
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1243 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1244 if cmdoptions.get(b'insecure', False): |
30954
6d642ecf1a89
dispatch: start profiling earlier
Bryan O'Sullivan <bryano@fb.com>
parents:
30953
diff
changeset
|
1245 for ui_ in uis: |
6d642ecf1a89
dispatch: start profiling earlier
Bryan O'Sullivan <bryano@fb.com>
parents:
30953
diff
changeset
|
1246 ui_.insecureconnections = True |
13328
a939f08fae9c
url: add --insecure option to bypass verification of ssl certificates
Yuya Nishihara <yuya@tcha.org>
parents:
12932
diff
changeset
|
1247 |
32125
f928d53b687c
dispatch: setup color before pager for correct console information on windows
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32054
diff
changeset
|
1248 # setup color handling before pager, because setting up pager |
f928d53b687c
dispatch: setup color before pager for correct console information on windows
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32054
diff
changeset
|
1249 # might cause incorrect console information |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1250 coloropt = options[b'color'] |
31122
45be7590301d
color: move triggering of the initialisation logic in core
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31080
diff
changeset
|
1251 for ui_ in uis: |
31127
7fec37746417
color: add a 'ui.color' option to control color behavior
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31122
diff
changeset
|
1252 if coloropt: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1253 ui_.setconfig(b'ui', b'color', coloropt, b'--color') |
31127
7fec37746417
color: add a 'ui.color' option to control color behavior
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31122
diff
changeset
|
1254 color.setup(ui_) |
31122
45be7590301d
color: move triggering of the initialisation logic in core
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31080
diff
changeset
|
1255 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1256 if stringutil.parsebool(options[b'pager']): |
33618
cc047a733f69
ui: enable pager always for explicit --pager=on (issue5580)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33499
diff
changeset
|
1257 # ui.pager() expects 'internal-always-' prefix in this case |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1258 ui.pager(b'internal-always-' + cmd) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1259 elif options[b'pager'] != b'auto': |
34638
021607b4ef49
dispatch: when --pager=no is passed, also disable pager on req.repo.ui
Jun Wu <quark@fb.com>
parents:
34533
diff
changeset
|
1260 for ui_ in uis: |
021607b4ef49
dispatch: when --pager=no is passed, also disable pager on req.repo.ui
Jun Wu <quark@fb.com>
parents:
34533
diff
changeset
|
1261 ui_.disablepager() |
32125
f928d53b687c
dispatch: setup color before pager for correct console information on windows
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32054
diff
changeset
|
1262 |
40763
c93d046d4300
extensions: add "uipopulate" hook, called per instance, not per process
Yuya Nishihara <yuya@tcha.org>
parents:
40694
diff
changeset
|
1263 # configs are fully loaded, set up the ui instances |
c93d046d4300
extensions: add "uipopulate" hook, called per instance, not per process
Yuya Nishihara <yuya@tcha.org>
parents:
40694
diff
changeset
|
1264 for ui_ in uis: |
c93d046d4300
extensions: add "uipopulate" hook, called per instance, not per process
Yuya Nishihara <yuya@tcha.org>
parents:
40694
diff
changeset
|
1265 extensions.populateui(ui_) |
c93d046d4300
extensions: add "uipopulate" hook, called per instance, not per process
Yuya Nishihara <yuya@tcha.org>
parents:
40694
diff
changeset
|
1266 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1267 if options[b'version']: |
30954
6d642ecf1a89
dispatch: start profiling earlier
Bryan O'Sullivan <bryano@fb.com>
parents:
30953
diff
changeset
|
1268 return commands.version_(ui) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1269 if options[b'help']: |
30954
6d642ecf1a89
dispatch: start profiling earlier
Bryan O'Sullivan <bryano@fb.com>
parents:
30953
diff
changeset
|
1270 return commands.help_(ui, cmd, command=cmd is not None) |
6d642ecf1a89
dispatch: start profiling earlier
Bryan O'Sullivan <bryano@fb.com>
parents:
30953
diff
changeset
|
1271 elif not cmd: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1272 return commands.help_(ui, b'shortlist') |
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1273 |
30009
dfd97e60044c
dispatch: change indentation level in _dispatch()
Arun Kulshreshtha <kulshrax@fb.com>
parents:
29888
diff
changeset
|
1274 repo = None |
dfd97e60044c
dispatch: change indentation level in _dispatch()
Arun Kulshreshtha <kulshrax@fb.com>
parents:
29888
diff
changeset
|
1275 cmdpats = args[:] |
43746
ac8fd215a776
dispatch: add some assertions to give pytype a helping hand
Augie Fackler <augie@google.com>
parents:
43554
diff
changeset
|
1276 assert func is not None # help out pytype |
30494
acd30a959980
dispatch: stop supporting non-use of @command
Augie Fackler <augie@google.com>
parents:
30482
diff
changeset
|
1277 if not func.norepo: |
30009
dfd97e60044c
dispatch: change indentation level in _dispatch()
Arun Kulshreshtha <kulshrax@fb.com>
parents:
29888
diff
changeset
|
1278 # use the repo from the request only if we don't have -R |
dfd97e60044c
dispatch: change indentation level in _dispatch()
Arun Kulshreshtha <kulshrax@fb.com>
parents:
29888
diff
changeset
|
1279 if not rpath and not cwd: |
dfd97e60044c
dispatch: change indentation level in _dispatch()
Arun Kulshreshtha <kulshrax@fb.com>
parents:
29888
diff
changeset
|
1280 repo = req.repo |
14510
eccbb9980ada
dispatch: add repo to the request
Idan Kamara <idankk86@gmail.com>
parents:
14439
diff
changeset
|
1281 |
30009
dfd97e60044c
dispatch: change indentation level in _dispatch()
Arun Kulshreshtha <kulshrax@fb.com>
parents:
29888
diff
changeset
|
1282 if repo: |
dfd97e60044c
dispatch: change indentation level in _dispatch()
Arun Kulshreshtha <kulshrax@fb.com>
parents:
29888
diff
changeset
|
1283 # set the descriptors of the repo ui to those of ui |
dfd97e60044c
dispatch: change indentation level in _dispatch()
Arun Kulshreshtha <kulshrax@fb.com>
parents:
29888
diff
changeset
|
1284 repo.ui.fin = ui.fin |
dfd97e60044c
dispatch: change indentation level in _dispatch()
Arun Kulshreshtha <kulshrax@fb.com>
parents:
29888
diff
changeset
|
1285 repo.ui.fout = ui.fout |
dfd97e60044c
dispatch: change indentation level in _dispatch()
Arun Kulshreshtha <kulshrax@fb.com>
parents:
29888
diff
changeset
|
1286 repo.ui.ferr = ui.ferr |
40634
5542bc9125c9
dispatch: pass around ui.fmsg channel
Yuya Nishihara <yuya@tcha.org>
parents:
40490
diff
changeset
|
1287 repo.ui.fmsg = ui.fmsg |
30009
dfd97e60044c
dispatch: change indentation level in _dispatch()
Arun Kulshreshtha <kulshrax@fb.com>
parents:
29888
diff
changeset
|
1288 else: |
dfd97e60044c
dispatch: change indentation level in _dispatch()
Arun Kulshreshtha <kulshrax@fb.com>
parents:
29888
diff
changeset
|
1289 try: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1290 repo = hg.repository( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1291 ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1292 path=path, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1293 presetupfuncs=req.prereposetups, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1294 intents=func.intents, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1295 ) |
30009
dfd97e60044c
dispatch: change indentation level in _dispatch()
Arun Kulshreshtha <kulshrax@fb.com>
parents:
29888
diff
changeset
|
1296 if not repo.local(): |
45926
8939062597f0
errors: raise InputError on bad repo arguments
Martin von Zweigbergk <martinvonz@google.com>
parents:
45924
diff
changeset
|
1297 raise error.InputError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1298 _(b"repository '%s' is not local") % path |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1299 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1300 repo.ui.setconfig( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1301 b"bundle", b"mainreporoot", repo.root, b'repo' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1302 ) |
30009
dfd97e60044c
dispatch: change indentation level in _dispatch()
Arun Kulshreshtha <kulshrax@fb.com>
parents:
29888
diff
changeset
|
1303 except error.RequirementError: |
26142
7332bf4ae959
dispatch: error out on invalid -R path even if optionalrepo (issue4805) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
25932
diff
changeset
|
1304 raise |
30009
dfd97e60044c
dispatch: change indentation level in _dispatch()
Arun Kulshreshtha <kulshrax@fb.com>
parents:
29888
diff
changeset
|
1305 except error.RepoError: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1306 if rpath: # invalid -R path |
30009
dfd97e60044c
dispatch: change indentation level in _dispatch()
Arun Kulshreshtha <kulshrax@fb.com>
parents:
29888
diff
changeset
|
1307 raise |
30494
acd30a959980
dispatch: stop supporting non-use of @command
Augie Fackler <augie@google.com>
parents:
30482
diff
changeset
|
1308 if not func.optionalrepo: |
acd30a959980
dispatch: stop supporting non-use of @command
Augie Fackler <augie@google.com>
parents:
30482
diff
changeset
|
1309 if func.inferrepo and args and not path: |
30009
dfd97e60044c
dispatch: change indentation level in _dispatch()
Arun Kulshreshtha <kulshrax@fb.com>
parents:
29888
diff
changeset
|
1310 # try to infer -R from command args |
35170
e6487522ef92
py3: use pycompat.maplist() instead of map()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35166
diff
changeset
|
1311 repos = pycompat.maplist(cmdutil.findrepo, args) |
30009
dfd97e60044c
dispatch: change indentation level in _dispatch()
Arun Kulshreshtha <kulshrax@fb.com>
parents:
29888
diff
changeset
|
1312 guess = repos[0] |
dfd97e60044c
dispatch: change indentation level in _dispatch()
Arun Kulshreshtha <kulshrax@fb.com>
parents:
29888
diff
changeset
|
1313 if guess and repos.count(guess) == len(repos): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1314 req.args = [b'--repository', guess] + fullargs |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1315 req.earlyoptions[b'repository'] = guess |
30009
dfd97e60044c
dispatch: change indentation level in _dispatch()
Arun Kulshreshtha <kulshrax@fb.com>
parents:
29888
diff
changeset
|
1316 return _dispatch(req) |
dfd97e60044c
dispatch: change indentation level in _dispatch()
Arun Kulshreshtha <kulshrax@fb.com>
parents:
29888
diff
changeset
|
1317 if not path: |
45926
8939062597f0
errors: raise InputError on bad repo arguments
Martin von Zweigbergk <martinvonz@google.com>
parents:
45924
diff
changeset
|
1318 raise error.InputError( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1319 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1320 b"no repository found in" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1321 b" '%s' (.hg not found)" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1322 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1323 % encoding.getcwd() |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1324 ) |
30009
dfd97e60044c
dispatch: change indentation level in _dispatch()
Arun Kulshreshtha <kulshrax@fb.com>
parents:
29888
diff
changeset
|
1325 raise |
dfd97e60044c
dispatch: change indentation level in _dispatch()
Arun Kulshreshtha <kulshrax@fb.com>
parents:
29888
diff
changeset
|
1326 if repo: |
dfd97e60044c
dispatch: change indentation level in _dispatch()
Arun Kulshreshtha <kulshrax@fb.com>
parents:
29888
diff
changeset
|
1327 ui = repo.ui |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1328 if options[b'hidden']: |
30009
dfd97e60044c
dispatch: change indentation level in _dispatch()
Arun Kulshreshtha <kulshrax@fb.com>
parents:
29888
diff
changeset
|
1329 repo = repo.unfiltered() |
dfd97e60044c
dispatch: change indentation level in _dispatch()
Arun Kulshreshtha <kulshrax@fb.com>
parents:
29888
diff
changeset
|
1330 args.insert(0, repo) |
dfd97e60044c
dispatch: change indentation level in _dispatch()
Arun Kulshreshtha <kulshrax@fb.com>
parents:
29888
diff
changeset
|
1331 elif rpath: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1332 ui.warn(_(b"warning: --repository ignored\n")) |
7388
5751631246de
dispatch: generalize signature checking for extension command wrapping
Matt Mackall <mpm@selenic.com>
parents:
7280
diff
changeset
|
1333 |
31499
3c77414a0f9c
dispatch: consolidate formatting of arguments
Augie Fackler <augie@google.com>
parents:
31498
diff
changeset
|
1334 msg = _formatargs(fullargs) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1335 ui.log(b"command", b'%s\n', msg) |
30591
2d555d753f0e
py3: make keys of keyword arguments strings
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30581
diff
changeset
|
1336 strcmdopt = pycompat.strkwargs(cmdoptions) |
2d555d753f0e
py3: make keys of keyword arguments strings
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30581
diff
changeset
|
1337 d = lambda: util.checksignature(func)(ui, *args, **strcmdopt) |
30009
dfd97e60044c
dispatch: change indentation level in _dispatch()
Arun Kulshreshtha <kulshrax@fb.com>
parents:
29888
diff
changeset
|
1338 try: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1339 return runcommand( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1340 lui, repo, cmd, fullargs, ui, options, d, cmdpats, cmdoptions |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1341 ) |
30009
dfd97e60044c
dispatch: change indentation level in _dispatch()
Arun Kulshreshtha <kulshrax@fb.com>
parents:
29888
diff
changeset
|
1342 finally: |
dfd97e60044c
dispatch: change indentation level in _dispatch()
Arun Kulshreshtha <kulshrax@fb.com>
parents:
29888
diff
changeset
|
1343 if repo and repo != req.repo: |
dfd97e60044c
dispatch: change indentation level in _dispatch()
Arun Kulshreshtha <kulshrax@fb.com>
parents:
29888
diff
changeset
|
1344 repo.close() |
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1345 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1346 |
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1347 def _runcommand(ui, options, cmd, cmdfunc): |
29795
e3501546f7e4
profiling: add a context manager that no-ops if profiling isn't enabled
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29794
diff
changeset
|
1348 """Run a command function, possibly with profiling enabled.""" |
30010
b19c2679289c
dispatch: make hg --profile wrap reposetup
Arun Kulshreshtha <kulshrax@fb.com>
parents:
30009
diff
changeset
|
1349 try: |
43238
101ae8bbfa02
cleanup: hgdemandimport.tracing accepts strings, not bytes
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
1350 with tracing.log("Running %s command" % cmd): |
39529
ec0a2601bc76
tracing: trace command function execution
Boris Feld <boris.feld@octobus.net>
parents:
39283
diff
changeset
|
1351 return cmdfunc() |
30010
b19c2679289c
dispatch: make hg --profile wrap reposetup
Arun Kulshreshtha <kulshrax@fb.com>
parents:
30009
diff
changeset
|
1352 except error.SignatureError: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1353 raise error.CommandError(cmd, _(b'invalid arguments')) |
28784
09750b1231c2
dispatch: factor out command failure handling into a function
Martijn Pieters <mjpieters@fb.com>
parents:
28695
diff
changeset
|
1354 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1355 |
28821
d3369dc6c1d0
dispatch: split out warning message generation to separate function
Martijn Pieters <mjpieters@fb.com>
parents:
28784
diff
changeset
|
1356 def _exceptionwarning(ui): |
d3369dc6c1d0
dispatch: split out warning message generation to separate function
Martijn Pieters <mjpieters@fb.com>
parents:
28784
diff
changeset
|
1357 """Produce a warning message for the current active exception""" |
28784
09750b1231c2
dispatch: factor out command failure handling into a function
Martijn Pieters <mjpieters@fb.com>
parents:
28695
diff
changeset
|
1358 |
09750b1231c2
dispatch: factor out command failure handling into a function
Martijn Pieters <mjpieters@fb.com>
parents:
28695
diff
changeset
|
1359 # For compatibility checking, we discard the portion of the hg |
09750b1231c2
dispatch: factor out command failure handling into a function
Martijn Pieters <mjpieters@fb.com>
parents:
28695
diff
changeset
|
1360 # version after the + on the assumption that if a "normal |
09750b1231c2
dispatch: factor out command failure handling into a function
Martijn Pieters <mjpieters@fb.com>
parents:
28695
diff
changeset
|
1361 # user" is running a build with a + in it the packager |
09750b1231c2
dispatch: factor out command failure handling into a function
Martijn Pieters <mjpieters@fb.com>
parents:
28695
diff
changeset
|
1362 # probably built from fairly close to a tag and anyone with a |
09750b1231c2
dispatch: factor out command failure handling into a function
Martijn Pieters <mjpieters@fb.com>
parents:
28695
diff
changeset
|
1363 # 'make local' copy of hg (where the version number can be out |
09750b1231c2
dispatch: factor out command failure handling into a function
Martijn Pieters <mjpieters@fb.com>
parents:
28695
diff
changeset
|
1364 # of date) will be clueful enough to notice the implausible |
09750b1231c2
dispatch: factor out command failure handling into a function
Martijn Pieters <mjpieters@fb.com>
parents:
28695
diff
changeset
|
1365 # version number and try updating. |
09750b1231c2
dispatch: factor out command failure handling into a function
Martijn Pieters <mjpieters@fb.com>
parents:
28695
diff
changeset
|
1366 ct = util.versiontuple(n=2) |
45966
c26cb33e5219
dispatch: print the version of the extension being blamed in a bug report
Matt Harbison <matt_harbison@yahoo.com>
parents:
45957
diff
changeset
|
1367 worst = None, ct, b'', b'' |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1368 if ui.config(b'ui', b'supportcontact') is None: |
28784
09750b1231c2
dispatch: factor out command failure handling into a function
Martijn Pieters <mjpieters@fb.com>
parents:
28695
diff
changeset
|
1369 for name, mod in extensions.extensions(): |
35939
d5457d94e1c9
py3: replace "if ispy3" by pycompat.sysbytes() or util.forcebytestr()
Yuya Nishihara <yuya@tcha.org>
parents:
35938
diff
changeset
|
1370 # 'testedwith' should be bytes, but not all extensions are ported |
d5457d94e1c9
py3: replace "if ispy3" by pycompat.sysbytes() or util.forcebytestr()
Yuya Nishihara <yuya@tcha.org>
parents:
35938
diff
changeset
|
1371 # to py3 and we don't want UnicodeException because of that. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1372 testedwith = stringutil.forcebytestr( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1373 getattr(mod, 'testedwith', b'') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1374 ) |
45966
c26cb33e5219
dispatch: print the version of the extension being blamed in a bug report
Matt Harbison <matt_harbison@yahoo.com>
parents:
45957
diff
changeset
|
1375 version = extensions.moduleversion(mod) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1376 report = getattr(mod, 'buglink', _(b'the extension author.')) |
28784
09750b1231c2
dispatch: factor out command failure handling into a function
Martijn Pieters <mjpieters@fb.com>
parents:
28695
diff
changeset
|
1377 if not testedwith.strip(): |
09750b1231c2
dispatch: factor out command failure handling into a function
Martijn Pieters <mjpieters@fb.com>
parents:
28695
diff
changeset
|
1378 # We found an untested extension. It's likely the culprit. |
45966
c26cb33e5219
dispatch: print the version of the extension being blamed in a bug report
Matt Harbison <matt_harbison@yahoo.com>
parents:
45957
diff
changeset
|
1379 worst = name, b'unknown', report, version |
28784
09750b1231c2
dispatch: factor out command failure handling into a function
Martijn Pieters <mjpieters@fb.com>
parents:
28695
diff
changeset
|
1380 break |
09750b1231c2
dispatch: factor out command failure handling into a function
Martijn Pieters <mjpieters@fb.com>
parents:
28695
diff
changeset
|
1381 |
09750b1231c2
dispatch: factor out command failure handling into a function
Martijn Pieters <mjpieters@fb.com>
parents:
28695
diff
changeset
|
1382 # Never blame on extensions bundled with Mercurial. |
29888
ed793f41e83f
extensions: use ismoduleinternal() thoroughly
Yuya Nishihara <yuya@tcha.org>
parents:
29857
diff
changeset
|
1383 if extensions.ismoduleinternal(mod): |
28784
09750b1231c2
dispatch: factor out command failure handling into a function
Martijn Pieters <mjpieters@fb.com>
parents:
28695
diff
changeset
|
1384 continue |
09750b1231c2
dispatch: factor out command failure handling into a function
Martijn Pieters <mjpieters@fb.com>
parents:
28695
diff
changeset
|
1385 |
09750b1231c2
dispatch: factor out command failure handling into a function
Martijn Pieters <mjpieters@fb.com>
parents:
28695
diff
changeset
|
1386 tested = [util.versiontuple(t, 2) for t in testedwith.split()] |
09750b1231c2
dispatch: factor out command failure handling into a function
Martijn Pieters <mjpieters@fb.com>
parents:
28695
diff
changeset
|
1387 if ct in tested: |
09750b1231c2
dispatch: factor out command failure handling into a function
Martijn Pieters <mjpieters@fb.com>
parents:
28695
diff
changeset
|
1388 continue |
09750b1231c2
dispatch: factor out command failure handling into a function
Martijn Pieters <mjpieters@fb.com>
parents:
28695
diff
changeset
|
1389 |
09750b1231c2
dispatch: factor out command failure handling into a function
Martijn Pieters <mjpieters@fb.com>
parents:
28695
diff
changeset
|
1390 lower = [t for t in tested if t < ct] |
09750b1231c2
dispatch: factor out command failure handling into a function
Martijn Pieters <mjpieters@fb.com>
parents:
28695
diff
changeset
|
1391 nearest = max(lower or tested) |
09750b1231c2
dispatch: factor out command failure handling into a function
Martijn Pieters <mjpieters@fb.com>
parents:
28695
diff
changeset
|
1392 if worst[0] is None or nearest < worst[1]: |
45966
c26cb33e5219
dispatch: print the version of the extension being blamed in a bug report
Matt Harbison <matt_harbison@yahoo.com>
parents:
45957
diff
changeset
|
1393 worst = name, nearest, report, version |
28784
09750b1231c2
dispatch: factor out command failure handling into a function
Martijn Pieters <mjpieters@fb.com>
parents:
28695
diff
changeset
|
1394 if worst[0] is not None: |
45966
c26cb33e5219
dispatch: print the version of the extension being blamed in a bug report
Matt Harbison <matt_harbison@yahoo.com>
parents:
45957
diff
changeset
|
1395 name, testedwith, report, version = worst |
31189
49ad6bf63107
dispatch: allow testedwith to be bytes or str
Augie Fackler <raf@durin42.com>
parents:
31127
diff
changeset
|
1396 if not isinstance(testedwith, (bytes, str)): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1397 testedwith = b'.'.join( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1398 [stringutil.forcebytestr(c) for c in testedwith] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1399 ) |
45966
c26cb33e5219
dispatch: print the version of the extension being blamed in a bug report
Matt Harbison <matt_harbison@yahoo.com>
parents:
45957
diff
changeset
|
1400 extver = version or _(b"(version N/A)") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1401 warning = _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1402 b'** Unknown exception encountered with ' |
45967
a2104b9b1787
dispatch: quote the extension when printing the bug report
Matt Harbison <matt_harbison@yahoo.com>
parents:
45966
diff
changeset
|
1403 b'possibly-broken third-party extension "%s" %s\n' |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1404 b'** which supports versions %s of Mercurial.\n' |
45967
a2104b9b1787
dispatch: quote the extension when printing the bug report
Matt Harbison <matt_harbison@yahoo.com>
parents:
45966
diff
changeset
|
1405 b'** Please disable "%s" and try your action again.\n' |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1406 b'** If that fixes the bug please report it to %s\n' |
45966
c26cb33e5219
dispatch: print the version of the extension being blamed in a bug report
Matt Harbison <matt_harbison@yahoo.com>
parents:
45957
diff
changeset
|
1407 ) % (name, extver, testedwith, name, stringutil.forcebytestr(report)) |
28784
09750b1231c2
dispatch: factor out command failure handling into a function
Martijn Pieters <mjpieters@fb.com>
parents:
28695
diff
changeset
|
1408 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1409 bugtracker = ui.config(b'ui', b'supportcontact') |
28784
09750b1231c2
dispatch: factor out command failure handling into a function
Martijn Pieters <mjpieters@fb.com>
parents:
28695
diff
changeset
|
1410 if bugtracker is None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1411 bugtracker = _(b"https://mercurial-scm.org/wiki/BugTracker") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1412 warning = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1413 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1414 b"** unknown exception encountered, " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1415 b"please report by visiting\n** " |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1416 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1417 + bugtracker |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1418 + b'\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1419 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1420 sysversion = pycompat.sysbytes(sys.version).replace(b'\n', b'') |
45969
a120d1c9c704
dispatch: print the version of each extension in the bug report, if available
Matt Harbison <matt_harbison@yahoo.com>
parents:
45968
diff
changeset
|
1421 |
a120d1c9c704
dispatch: print the version of each extension in the bug report, if available
Matt Harbison <matt_harbison@yahoo.com>
parents:
45968
diff
changeset
|
1422 def ext_with_ver(x): |
a120d1c9c704
dispatch: print the version of each extension in the bug report, if available
Matt Harbison <matt_harbison@yahoo.com>
parents:
45968
diff
changeset
|
1423 ext = x[0] |
a120d1c9c704
dispatch: print the version of each extension in the bug report, if available
Matt Harbison <matt_harbison@yahoo.com>
parents:
45968
diff
changeset
|
1424 ver = extensions.moduleversion(x[1]) |
a120d1c9c704
dispatch: print the version of each extension in the bug report, if available
Matt Harbison <matt_harbison@yahoo.com>
parents:
45968
diff
changeset
|
1425 if ver: |
a120d1c9c704
dispatch: print the version of each extension in the bug report, if available
Matt Harbison <matt_harbison@yahoo.com>
parents:
45968
diff
changeset
|
1426 ext += b' ' + ver |
a120d1c9c704
dispatch: print the version of each extension in the bug report, if available
Matt Harbison <matt_harbison@yahoo.com>
parents:
45968
diff
changeset
|
1427 return ext |
a120d1c9c704
dispatch: print the version of each extension in the bug report, if available
Matt Harbison <matt_harbison@yahoo.com>
parents:
45968
diff
changeset
|
1428 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1429 warning += ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1430 (_(b"** Python %s\n") % sysversion) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1431 + (_(b"** Mercurial Distributed SCM (version %s)\n") % util.version()) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1432 + ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1433 _(b"** Extensions loaded: %s\n") |
45969
a120d1c9c704
dispatch: print the version of each extension in the bug report, if available
Matt Harbison <matt_harbison@yahoo.com>
parents:
45968
diff
changeset
|
1434 % b", ".join( |
a120d1c9c704
dispatch: print the version of each extension in the bug report, if available
Matt Harbison <matt_harbison@yahoo.com>
parents:
45968
diff
changeset
|
1435 [ext_with_ver(x) for x in sorted(extensions.extensions())] |
a120d1c9c704
dispatch: print the version of each extension in the bug report, if available
Matt Harbison <matt_harbison@yahoo.com>
parents:
45968
diff
changeset
|
1436 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1437 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1438 ) |
28821
d3369dc6c1d0
dispatch: split out warning message generation to separate function
Martijn Pieters <mjpieters@fb.com>
parents:
28784
diff
changeset
|
1439 return warning |
d3369dc6c1d0
dispatch: split out warning message generation to separate function
Martijn Pieters <mjpieters@fb.com>
parents:
28784
diff
changeset
|
1440 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1441 |
28821
d3369dc6c1d0
dispatch: split out warning message generation to separate function
Martijn Pieters <mjpieters@fb.com>
parents:
28784
diff
changeset
|
1442 def handlecommandexception(ui): |
d3369dc6c1d0
dispatch: split out warning message generation to separate function
Martijn Pieters <mjpieters@fb.com>
parents:
28784
diff
changeset
|
1443 """Produce a warning message for broken commands |
d3369dc6c1d0
dispatch: split out warning message generation to separate function
Martijn Pieters <mjpieters@fb.com>
parents:
28784
diff
changeset
|
1444 |
d3369dc6c1d0
dispatch: split out warning message generation to separate function
Martijn Pieters <mjpieters@fb.com>
parents:
28784
diff
changeset
|
1445 Called when handling an exception; the exception is reraised if |
d3369dc6c1d0
dispatch: split out warning message generation to separate function
Martijn Pieters <mjpieters@fb.com>
parents:
28784
diff
changeset
|
1446 this function returns False, ignored otherwise. |
d3369dc6c1d0
dispatch: split out warning message generation to separate function
Martijn Pieters <mjpieters@fb.com>
parents:
28784
diff
changeset
|
1447 """ |
d3369dc6c1d0
dispatch: split out warning message generation to separate function
Martijn Pieters <mjpieters@fb.com>
parents:
28784
diff
changeset
|
1448 warning = _exceptionwarning(ui) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1449 ui.log( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1450 b"commandexception", |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1451 b"%s\n%s\n", |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1452 warning, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1453 pycompat.sysbytes(traceback.format_exc()), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41193
diff
changeset
|
1454 ) |
28784
09750b1231c2
dispatch: factor out command failure handling into a function
Martijn Pieters <mjpieters@fb.com>
parents:
28695
diff
changeset
|
1455 ui.warn(warning) |
09750b1231c2
dispatch: factor out command failure handling into a function
Martijn Pieters <mjpieters@fb.com>
parents:
28695
diff
changeset
|
1456 return False # re-raise the exception |