##// END OF EJS Templates
hooks: add a `auto` value for `hooks.*run-with-plain`...
marmoute -
r47222:8872e75e default draft
parent child Browse files
Show More
@@ -1,3071 +1,3073
1 The Mercurial system uses a set of configuration files to control
1 The Mercurial system uses a set of configuration files to control
2 aspects of its behavior.
2 aspects of its behavior.
3
3
4 Troubleshooting
4 Troubleshooting
5 ===============
5 ===============
6
6
7 If you're having problems with your configuration,
7 If you're having problems with your configuration,
8 :hg:`config --debug` can help you understand what is introducing
8 :hg:`config --debug` can help you understand what is introducing
9 a setting into your environment.
9 a setting into your environment.
10
10
11 See :hg:`help config.syntax` and :hg:`help config.files`
11 See :hg:`help config.syntax` and :hg:`help config.files`
12 for information about how and where to override things.
12 for information about how and where to override things.
13
13
14 Structure
14 Structure
15 =========
15 =========
16
16
17 The configuration files use a simple ini-file format. A configuration
17 The configuration files use a simple ini-file format. A configuration
18 file consists of sections, led by a ``[section]`` header and followed
18 file consists of sections, led by a ``[section]`` header and followed
19 by ``name = value`` entries::
19 by ``name = value`` entries::
20
20
21 [ui]
21 [ui]
22 username = Firstname Lastname <firstname.lastname@example.net>
22 username = Firstname Lastname <firstname.lastname@example.net>
23 verbose = True
23 verbose = True
24
24
25 The above entries will be referred to as ``ui.username`` and
25 The above entries will be referred to as ``ui.username`` and
26 ``ui.verbose``, respectively. See :hg:`help config.syntax`.
26 ``ui.verbose``, respectively. See :hg:`help config.syntax`.
27
27
28 Files
28 Files
29 =====
29 =====
30
30
31 Mercurial reads configuration data from several files, if they exist.
31 Mercurial reads configuration data from several files, if they exist.
32 These files do not exist by default and you will have to create the
32 These files do not exist by default and you will have to create the
33 appropriate configuration files yourself:
33 appropriate configuration files yourself:
34
34
35 Local configuration is put into the per-repository ``<repo>/.hg/hgrc`` file.
35 Local configuration is put into the per-repository ``<repo>/.hg/hgrc`` file.
36
36
37 Global configuration like the username setting is typically put into:
37 Global configuration like the username setting is typically put into:
38
38
39 .. container:: windows
39 .. container:: windows
40
40
41 - ``%USERPROFILE%\mercurial.ini`` (on Windows)
41 - ``%USERPROFILE%\mercurial.ini`` (on Windows)
42
42
43 .. container:: unix.plan9
43 .. container:: unix.plan9
44
44
45 - ``$HOME/.hgrc`` (on Unix, Plan9)
45 - ``$HOME/.hgrc`` (on Unix, Plan9)
46
46
47 The names of these files depend on the system on which Mercurial is
47 The names of these files depend on the system on which Mercurial is
48 installed. ``*.rc`` files from a single directory are read in
48 installed. ``*.rc`` files from a single directory are read in
49 alphabetical order, later ones overriding earlier ones. Where multiple
49 alphabetical order, later ones overriding earlier ones. Where multiple
50 paths are given below, settings from earlier paths override later
50 paths are given below, settings from earlier paths override later
51 ones.
51 ones.
52
52
53 .. container:: verbose.unix
53 .. container:: verbose.unix
54
54
55 On Unix, the following files are consulted:
55 On Unix, the following files are consulted:
56
56
57 - ``<repo>/.hg/hgrc-not-shared`` (per-repository)
57 - ``<repo>/.hg/hgrc-not-shared`` (per-repository)
58 - ``<repo>/.hg/hgrc`` (per-repository)
58 - ``<repo>/.hg/hgrc`` (per-repository)
59 - ``$HOME/.hgrc`` (per-user)
59 - ``$HOME/.hgrc`` (per-user)
60 - ``${XDG_CONFIG_HOME:-$HOME/.config}/hg/hgrc`` (per-user)
60 - ``${XDG_CONFIG_HOME:-$HOME/.config}/hg/hgrc`` (per-user)
61 - ``<install-root>/etc/mercurial/hgrc`` (per-installation)
61 - ``<install-root>/etc/mercurial/hgrc`` (per-installation)
62 - ``<install-root>/etc/mercurial/hgrc.d/*.rc`` (per-installation)
62 - ``<install-root>/etc/mercurial/hgrc.d/*.rc`` (per-installation)
63 - ``/etc/mercurial/hgrc`` (per-system)
63 - ``/etc/mercurial/hgrc`` (per-system)
64 - ``/etc/mercurial/hgrc.d/*.rc`` (per-system)
64 - ``/etc/mercurial/hgrc.d/*.rc`` (per-system)
65 - ``<internal>/*.rc`` (defaults)
65 - ``<internal>/*.rc`` (defaults)
66
66
67 .. container:: verbose.windows
67 .. container:: verbose.windows
68
68
69 On Windows, the following files are consulted:
69 On Windows, the following files are consulted:
70
70
71 - ``<repo>/.hg/hgrc-not-shared`` (per-repository)
71 - ``<repo>/.hg/hgrc-not-shared`` (per-repository)
72 - ``<repo>/.hg/hgrc`` (per-repository)
72 - ``<repo>/.hg/hgrc`` (per-repository)
73 - ``%USERPROFILE%\.hgrc`` (per-user)
73 - ``%USERPROFILE%\.hgrc`` (per-user)
74 - ``%USERPROFILE%\Mercurial.ini`` (per-user)
74 - ``%USERPROFILE%\Mercurial.ini`` (per-user)
75 - ``%HOME%\.hgrc`` (per-user)
75 - ``%HOME%\.hgrc`` (per-user)
76 - ``%HOME%\Mercurial.ini`` (per-user)
76 - ``%HOME%\Mercurial.ini`` (per-user)
77 - ``HKEY_LOCAL_MACHINE\SOFTWARE\Mercurial`` (per-system)
77 - ``HKEY_LOCAL_MACHINE\SOFTWARE\Mercurial`` (per-system)
78 - ``<install-dir>\hgrc.d\*.rc`` (per-installation)
78 - ``<install-dir>\hgrc.d\*.rc`` (per-installation)
79 - ``<install-dir>\Mercurial.ini`` (per-installation)
79 - ``<install-dir>\Mercurial.ini`` (per-installation)
80 - ``%PROGRAMDATA%\Mercurial\hgrc`` (per-system)
80 - ``%PROGRAMDATA%\Mercurial\hgrc`` (per-system)
81 - ``%PROGRAMDATA%\Mercurial\Mercurial.ini`` (per-system)
81 - ``%PROGRAMDATA%\Mercurial\Mercurial.ini`` (per-system)
82 - ``%PROGRAMDATA%\Mercurial\hgrc.d\*.rc`` (per-system)
82 - ``%PROGRAMDATA%\Mercurial\hgrc.d\*.rc`` (per-system)
83 - ``<internal>/*.rc`` (defaults)
83 - ``<internal>/*.rc`` (defaults)
84
84
85 .. note::
85 .. note::
86
86
87 The registry key ``HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Mercurial``
87 The registry key ``HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Mercurial``
88 is used when running 32-bit Python on 64-bit Windows.
88 is used when running 32-bit Python on 64-bit Windows.
89
89
90 .. container:: verbose.plan9
90 .. container:: verbose.plan9
91
91
92 On Plan9, the following files are consulted:
92 On Plan9, the following files are consulted:
93
93
94 - ``<repo>/.hg/hgrc-not-shared`` (per-repository)
94 - ``<repo>/.hg/hgrc-not-shared`` (per-repository)
95 - ``<repo>/.hg/hgrc`` (per-repository)
95 - ``<repo>/.hg/hgrc`` (per-repository)
96 - ``$home/lib/hgrc`` (per-user)
96 - ``$home/lib/hgrc`` (per-user)
97 - ``<install-root>/lib/mercurial/hgrc`` (per-installation)
97 - ``<install-root>/lib/mercurial/hgrc`` (per-installation)
98 - ``<install-root>/lib/mercurial/hgrc.d/*.rc`` (per-installation)
98 - ``<install-root>/lib/mercurial/hgrc.d/*.rc`` (per-installation)
99 - ``/lib/mercurial/hgrc`` (per-system)
99 - ``/lib/mercurial/hgrc`` (per-system)
100 - ``/lib/mercurial/hgrc.d/*.rc`` (per-system)
100 - ``/lib/mercurial/hgrc.d/*.rc`` (per-system)
101 - ``<internal>/*.rc`` (defaults)
101 - ``<internal>/*.rc`` (defaults)
102
102
103 Per-repository configuration options only apply in a
103 Per-repository configuration options only apply in a
104 particular repository. This file is not version-controlled, and
104 particular repository. This file is not version-controlled, and
105 will not get transferred during a "clone" operation. Options in
105 will not get transferred during a "clone" operation. Options in
106 this file override options in all other configuration files.
106 this file override options in all other configuration files.
107
107
108 .. container:: unix.plan9
108 .. container:: unix.plan9
109
109
110 On Plan 9 and Unix, most of this file will be ignored if it doesn't
110 On Plan 9 and Unix, most of this file will be ignored if it doesn't
111 belong to a trusted user or to a trusted group. See
111 belong to a trusted user or to a trusted group. See
112 :hg:`help config.trusted` for more details.
112 :hg:`help config.trusted` for more details.
113
113
114 Per-user configuration file(s) are for the user running Mercurial. Options
114 Per-user configuration file(s) are for the user running Mercurial. Options
115 in these files apply to all Mercurial commands executed by this user in any
115 in these files apply to all Mercurial commands executed by this user in any
116 directory. Options in these files override per-system and per-installation
116 directory. Options in these files override per-system and per-installation
117 options.
117 options.
118
118
119 Per-installation configuration files are searched for in the
119 Per-installation configuration files are searched for in the
120 directory where Mercurial is installed. ``<install-root>`` is the
120 directory where Mercurial is installed. ``<install-root>`` is the
121 parent directory of the **hg** executable (or symlink) being run.
121 parent directory of the **hg** executable (or symlink) being run.
122
122
123 .. container:: unix.plan9
123 .. container:: unix.plan9
124
124
125 For example, if installed in ``/shared/tools/bin/hg``, Mercurial
125 For example, if installed in ``/shared/tools/bin/hg``, Mercurial
126 will look in ``/shared/tools/etc/mercurial/hgrc``. Options in these
126 will look in ``/shared/tools/etc/mercurial/hgrc``. Options in these
127 files apply to all Mercurial commands executed by any user in any
127 files apply to all Mercurial commands executed by any user in any
128 directory.
128 directory.
129
129
130 Per-installation configuration files are for the system on
130 Per-installation configuration files are for the system on
131 which Mercurial is running. Options in these files apply to all
131 which Mercurial is running. Options in these files apply to all
132 Mercurial commands executed by any user in any directory. Registry
132 Mercurial commands executed by any user in any directory. Registry
133 keys contain PATH-like strings, every part of which must reference
133 keys contain PATH-like strings, every part of which must reference
134 a ``Mercurial.ini`` file or be a directory where ``*.rc`` files will
134 a ``Mercurial.ini`` file or be a directory where ``*.rc`` files will
135 be read. Mercurial checks each of these locations in the specified
135 be read. Mercurial checks each of these locations in the specified
136 order until one or more configuration files are detected.
136 order until one or more configuration files are detected.
137
137
138 Per-system configuration files are for the system on which Mercurial
138 Per-system configuration files are for the system on which Mercurial
139 is running. Options in these files apply to all Mercurial commands
139 is running. Options in these files apply to all Mercurial commands
140 executed by any user in any directory. Options in these files
140 executed by any user in any directory. Options in these files
141 override per-installation options.
141 override per-installation options.
142
142
143 Mercurial comes with some default configuration. The default configuration
143 Mercurial comes with some default configuration. The default configuration
144 files are installed with Mercurial and will be overwritten on upgrades. Default
144 files are installed with Mercurial and will be overwritten on upgrades. Default
145 configuration files should never be edited by users or administrators but can
145 configuration files should never be edited by users or administrators but can
146 be overridden in other configuration files. So far the directory only contains
146 be overridden in other configuration files. So far the directory only contains
147 merge tool configuration but packagers can also put other default configuration
147 merge tool configuration but packagers can also put other default configuration
148 there.
148 there.
149
149
150 On versions 5.7 and later, if share-safe functionality is enabled,
150 On versions 5.7 and later, if share-safe functionality is enabled,
151 shares will read config file of share source too.
151 shares will read config file of share source too.
152 `<share-source/.hg/hgrc>` is read before reading `<repo/.hg/hgrc>`.
152 `<share-source/.hg/hgrc>` is read before reading `<repo/.hg/hgrc>`.
153
153
154 For configs which should not be shared, `<repo/.hg/hgrc-not-shared>`
154 For configs which should not be shared, `<repo/.hg/hgrc-not-shared>`
155 should be used.
155 should be used.
156
156
157 Syntax
157 Syntax
158 ======
158 ======
159
159
160 A configuration file consists of sections, led by a ``[section]`` header
160 A configuration file consists of sections, led by a ``[section]`` header
161 and followed by ``name = value`` entries (sometimes called
161 and followed by ``name = value`` entries (sometimes called
162 ``configuration keys``)::
162 ``configuration keys``)::
163
163
164 [spam]
164 [spam]
165 eggs=ham
165 eggs=ham
166 green=
166 green=
167 eggs
167 eggs
168
168
169 Each line contains one entry. If the lines that follow are indented,
169 Each line contains one entry. If the lines that follow are indented,
170 they are treated as continuations of that entry. Leading whitespace is
170 they are treated as continuations of that entry. Leading whitespace is
171 removed from values. Empty lines are skipped. Lines beginning with
171 removed from values. Empty lines are skipped. Lines beginning with
172 ``#`` or ``;`` are ignored and may be used to provide comments.
172 ``#`` or ``;`` are ignored and may be used to provide comments.
173
173
174 Configuration keys can be set multiple times, in which case Mercurial
174 Configuration keys can be set multiple times, in which case Mercurial
175 will use the value that was configured last. As an example::
175 will use the value that was configured last. As an example::
176
176
177 [spam]
177 [spam]
178 eggs=large
178 eggs=large
179 ham=serrano
179 ham=serrano
180 eggs=small
180 eggs=small
181
181
182 This would set the configuration key named ``eggs`` to ``small``.
182 This would set the configuration key named ``eggs`` to ``small``.
183
183
184 It is also possible to define a section multiple times. A section can
184 It is also possible to define a section multiple times. A section can
185 be redefined on the same and/or on different configuration files. For
185 be redefined on the same and/or on different configuration files. For
186 example::
186 example::
187
187
188 [foo]
188 [foo]
189 eggs=large
189 eggs=large
190 ham=serrano
190 ham=serrano
191 eggs=small
191 eggs=small
192
192
193 [bar]
193 [bar]
194 eggs=ham
194 eggs=ham
195 green=
195 green=
196 eggs
196 eggs
197
197
198 [foo]
198 [foo]
199 ham=prosciutto
199 ham=prosciutto
200 eggs=medium
200 eggs=medium
201 bread=toasted
201 bread=toasted
202
202
203 This would set the ``eggs``, ``ham``, and ``bread`` configuration keys
203 This would set the ``eggs``, ``ham``, and ``bread`` configuration keys
204 of the ``foo`` section to ``medium``, ``prosciutto``, and ``toasted``,
204 of the ``foo`` section to ``medium``, ``prosciutto``, and ``toasted``,
205 respectively. As you can see there only thing that matters is the last
205 respectively. As you can see there only thing that matters is the last
206 value that was set for each of the configuration keys.
206 value that was set for each of the configuration keys.
207
207
208 If a configuration key is set multiple times in different
208 If a configuration key is set multiple times in different
209 configuration files the final value will depend on the order in which
209 configuration files the final value will depend on the order in which
210 the different configuration files are read, with settings from earlier
210 the different configuration files are read, with settings from earlier
211 paths overriding later ones as described on the ``Files`` section
211 paths overriding later ones as described on the ``Files`` section
212 above.
212 above.
213
213
214 A line of the form ``%include file`` will include ``file`` into the
214 A line of the form ``%include file`` will include ``file`` into the
215 current configuration file. The inclusion is recursive, which means
215 current configuration file. The inclusion is recursive, which means
216 that included files can include other files. Filenames are relative to
216 that included files can include other files. Filenames are relative to
217 the configuration file in which the ``%include`` directive is found.
217 the configuration file in which the ``%include`` directive is found.
218 Environment variables and ``~user`` constructs are expanded in
218 Environment variables and ``~user`` constructs are expanded in
219 ``file``. This lets you do something like::
219 ``file``. This lets you do something like::
220
220
221 %include ~/.hgrc.d/$HOST.rc
221 %include ~/.hgrc.d/$HOST.rc
222
222
223 to include a different configuration file on each computer you use.
223 to include a different configuration file on each computer you use.
224
224
225 A line with ``%unset name`` will remove ``name`` from the current
225 A line with ``%unset name`` will remove ``name`` from the current
226 section, if it has been set previously.
226 section, if it has been set previously.
227
227
228 The values are either free-form text strings, lists of text strings,
228 The values are either free-form text strings, lists of text strings,
229 or Boolean values. Boolean values can be set to true using any of "1",
229 or Boolean values. Boolean values can be set to true using any of "1",
230 "yes", "true", or "on" and to false using "0", "no", "false", or "off"
230 "yes", "true", or "on" and to false using "0", "no", "false", or "off"
231 (all case insensitive).
231 (all case insensitive).
232
232
233 List values are separated by whitespace or comma, except when values are
233 List values are separated by whitespace or comma, except when values are
234 placed in double quotation marks::
234 placed in double quotation marks::
235
235
236 allow_read = "John Doe, PhD", brian, betty
236 allow_read = "John Doe, PhD", brian, betty
237
237
238 Quotation marks can be escaped by prefixing them with a backslash. Only
238 Quotation marks can be escaped by prefixing them with a backslash. Only
239 quotation marks at the beginning of a word is counted as a quotation
239 quotation marks at the beginning of a word is counted as a quotation
240 (e.g., ``foo"bar baz`` is the list of ``foo"bar`` and ``baz``).
240 (e.g., ``foo"bar baz`` is the list of ``foo"bar`` and ``baz``).
241
241
242 Sections
242 Sections
243 ========
243 ========
244
244
245 This section describes the different sections that may appear in a
245 This section describes the different sections that may appear in a
246 Mercurial configuration file, the purpose of each section, its possible
246 Mercurial configuration file, the purpose of each section, its possible
247 keys, and their possible values.
247 keys, and their possible values.
248
248
249 ``alias``
249 ``alias``
250 ---------
250 ---------
251
251
252 Defines command aliases.
252 Defines command aliases.
253
253
254 Aliases allow you to define your own commands in terms of other
254 Aliases allow you to define your own commands in terms of other
255 commands (or aliases), optionally including arguments. Positional
255 commands (or aliases), optionally including arguments. Positional
256 arguments in the form of ``$1``, ``$2``, etc. in the alias definition
256 arguments in the form of ``$1``, ``$2``, etc. in the alias definition
257 are expanded by Mercurial before execution. Positional arguments not
257 are expanded by Mercurial before execution. Positional arguments not
258 already used by ``$N`` in the definition are put at the end of the
258 already used by ``$N`` in the definition are put at the end of the
259 command to be executed.
259 command to be executed.
260
260
261 Alias definitions consist of lines of the form::
261 Alias definitions consist of lines of the form::
262
262
263 <alias> = <command> [<argument>]...
263 <alias> = <command> [<argument>]...
264
264
265 For example, this definition::
265 For example, this definition::
266
266
267 latest = log --limit 5
267 latest = log --limit 5
268
268
269 creates a new command ``latest`` that shows only the five most recent
269 creates a new command ``latest`` that shows only the five most recent
270 changesets. You can define subsequent aliases using earlier ones::
270 changesets. You can define subsequent aliases using earlier ones::
271
271
272 stable5 = latest -b stable
272 stable5 = latest -b stable
273
273
274 .. note::
274 .. note::
275
275
276 It is possible to create aliases with the same names as
276 It is possible to create aliases with the same names as
277 existing commands, which will then override the original
277 existing commands, which will then override the original
278 definitions. This is almost always a bad idea!
278 definitions. This is almost always a bad idea!
279
279
280 An alias can start with an exclamation point (``!``) to make it a
280 An alias can start with an exclamation point (``!``) to make it a
281 shell alias. A shell alias is executed with the shell and will let you
281 shell alias. A shell alias is executed with the shell and will let you
282 run arbitrary commands. As an example, ::
282 run arbitrary commands. As an example, ::
283
283
284 echo = !echo $@
284 echo = !echo $@
285
285
286 will let you do ``hg echo foo`` to have ``foo`` printed in your
286 will let you do ``hg echo foo`` to have ``foo`` printed in your
287 terminal. A better example might be::
287 terminal. A better example might be::
288
288
289 purge = !$HG status --no-status --unknown -0 re: | xargs -0 rm -f
289 purge = !$HG status --no-status --unknown -0 re: | xargs -0 rm -f
290
290
291 which will make ``hg purge`` delete all unknown files in the
291 which will make ``hg purge`` delete all unknown files in the
292 repository in the same manner as the purge extension.
292 repository in the same manner as the purge extension.
293
293
294 Positional arguments like ``$1``, ``$2``, etc. in the alias definition
294 Positional arguments like ``$1``, ``$2``, etc. in the alias definition
295 expand to the command arguments. Unmatched arguments are
295 expand to the command arguments. Unmatched arguments are
296 removed. ``$0`` expands to the alias name and ``$@`` expands to all
296 removed. ``$0`` expands to the alias name and ``$@`` expands to all
297 arguments separated by a space. ``"$@"`` (with quotes) expands to all
297 arguments separated by a space. ``"$@"`` (with quotes) expands to all
298 arguments quoted individually and separated by a space. These expansions
298 arguments quoted individually and separated by a space. These expansions
299 happen before the command is passed to the shell.
299 happen before the command is passed to the shell.
300
300
301 Shell aliases are executed in an environment where ``$HG`` expands to
301 Shell aliases are executed in an environment where ``$HG`` expands to
302 the path of the Mercurial that was used to execute the alias. This is
302 the path of the Mercurial that was used to execute the alias. This is
303 useful when you want to call further Mercurial commands in a shell
303 useful when you want to call further Mercurial commands in a shell
304 alias, as was done above for the purge alias. In addition,
304 alias, as was done above for the purge alias. In addition,
305 ``$HG_ARGS`` expands to the arguments given to Mercurial. In the ``hg
305 ``$HG_ARGS`` expands to the arguments given to Mercurial. In the ``hg
306 echo foo`` call above, ``$HG_ARGS`` would expand to ``echo foo``.
306 echo foo`` call above, ``$HG_ARGS`` would expand to ``echo foo``.
307
307
308 .. note::
308 .. note::
309
309
310 Some global configuration options such as ``-R`` are
310 Some global configuration options such as ``-R`` are
311 processed before shell aliases and will thus not be passed to
311 processed before shell aliases and will thus not be passed to
312 aliases.
312 aliases.
313
313
314
314
315 ``annotate``
315 ``annotate``
316 ------------
316 ------------
317
317
318 Settings used when displaying file annotations. All values are
318 Settings used when displaying file annotations. All values are
319 Booleans and default to False. See :hg:`help config.diff` for
319 Booleans and default to False. See :hg:`help config.diff` for
320 related options for the diff command.
320 related options for the diff command.
321
321
322 ``ignorews``
322 ``ignorews``
323 Ignore white space when comparing lines.
323 Ignore white space when comparing lines.
324
324
325 ``ignorewseol``
325 ``ignorewseol``
326 Ignore white space at the end of a line when comparing lines.
326 Ignore white space at the end of a line when comparing lines.
327
327
328 ``ignorewsamount``
328 ``ignorewsamount``
329 Ignore changes in the amount of white space.
329 Ignore changes in the amount of white space.
330
330
331 ``ignoreblanklines``
331 ``ignoreblanklines``
332 Ignore changes whose lines are all blank.
332 Ignore changes whose lines are all blank.
333
333
334
334
335 ``auth``
335 ``auth``
336 --------
336 --------
337
337
338 Authentication credentials and other authentication-like configuration
338 Authentication credentials and other authentication-like configuration
339 for HTTP connections. This section allows you to store usernames and
339 for HTTP connections. This section allows you to store usernames and
340 passwords for use when logging *into* HTTP servers. See
340 passwords for use when logging *into* HTTP servers. See
341 :hg:`help config.web` if you want to configure *who* can login to
341 :hg:`help config.web` if you want to configure *who* can login to
342 your HTTP server.
342 your HTTP server.
343
343
344 The following options apply to all hosts.
344 The following options apply to all hosts.
345
345
346 ``cookiefile``
346 ``cookiefile``
347 Path to a file containing HTTP cookie lines. Cookies matching a
347 Path to a file containing HTTP cookie lines. Cookies matching a
348 host will be sent automatically.
348 host will be sent automatically.
349
349
350 The file format uses the Mozilla cookies.txt format, which defines cookies
350 The file format uses the Mozilla cookies.txt format, which defines cookies
351 on their own lines. Each line contains 7 fields delimited by the tab
351 on their own lines. Each line contains 7 fields delimited by the tab
352 character (domain, is_domain_cookie, path, is_secure, expires, name,
352 character (domain, is_domain_cookie, path, is_secure, expires, name,
353 value). For more info, do an Internet search for "Netscape cookies.txt
353 value). For more info, do an Internet search for "Netscape cookies.txt
354 format."
354 format."
355
355
356 Note: the cookies parser does not handle port numbers on domains. You
356 Note: the cookies parser does not handle port numbers on domains. You
357 will need to remove ports from the domain for the cookie to be recognized.
357 will need to remove ports from the domain for the cookie to be recognized.
358 This could result in a cookie being disclosed to an unwanted server.
358 This could result in a cookie being disclosed to an unwanted server.
359
359
360 The cookies file is read-only.
360 The cookies file is read-only.
361
361
362 Other options in this section are grouped by name and have the following
362 Other options in this section are grouped by name and have the following
363 format::
363 format::
364
364
365 <name>.<argument> = <value>
365 <name>.<argument> = <value>
366
366
367 where ``<name>`` is used to group arguments into authentication
367 where ``<name>`` is used to group arguments into authentication
368 entries. Example::
368 entries. Example::
369
369
370 foo.prefix = hg.intevation.de/mercurial
370 foo.prefix = hg.intevation.de/mercurial
371 foo.username = foo
371 foo.username = foo
372 foo.password = bar
372 foo.password = bar
373 foo.schemes = http https
373 foo.schemes = http https
374
374
375 bar.prefix = secure.example.org
375 bar.prefix = secure.example.org
376 bar.key = path/to/file.key
376 bar.key = path/to/file.key
377 bar.cert = path/to/file.cert
377 bar.cert = path/to/file.cert
378 bar.schemes = https
378 bar.schemes = https
379
379
380 Supported arguments:
380 Supported arguments:
381
381
382 ``prefix``
382 ``prefix``
383 Either ``*`` or a URI prefix with or without the scheme part.
383 Either ``*`` or a URI prefix with or without the scheme part.
384 The authentication entry with the longest matching prefix is used
384 The authentication entry with the longest matching prefix is used
385 (where ``*`` matches everything and counts as a match of length
385 (where ``*`` matches everything and counts as a match of length
386 1). If the prefix doesn't include a scheme, the match is performed
386 1). If the prefix doesn't include a scheme, the match is performed
387 against the URI with its scheme stripped as well, and the schemes
387 against the URI with its scheme stripped as well, and the schemes
388 argument, q.v., is then subsequently consulted.
388 argument, q.v., is then subsequently consulted.
389
389
390 ``username``
390 ``username``
391 Optional. Username to authenticate with. If not given, and the
391 Optional. Username to authenticate with. If not given, and the
392 remote site requires basic or digest authentication, the user will
392 remote site requires basic or digest authentication, the user will
393 be prompted for it. Environment variables are expanded in the
393 be prompted for it. Environment variables are expanded in the
394 username letting you do ``foo.username = $USER``. If the URI
394 username letting you do ``foo.username = $USER``. If the URI
395 includes a username, only ``[auth]`` entries with a matching
395 includes a username, only ``[auth]`` entries with a matching
396 username or without a username will be considered.
396 username or without a username will be considered.
397
397
398 ``password``
398 ``password``
399 Optional. Password to authenticate with. If not given, and the
399 Optional. Password to authenticate with. If not given, and the
400 remote site requires basic or digest authentication, the user
400 remote site requires basic or digest authentication, the user
401 will be prompted for it.
401 will be prompted for it.
402
402
403 ``key``
403 ``key``
404 Optional. PEM encoded client certificate key file. Environment
404 Optional. PEM encoded client certificate key file. Environment
405 variables are expanded in the filename.
405 variables are expanded in the filename.
406
406
407 ``cert``
407 ``cert``
408 Optional. PEM encoded client certificate chain file. Environment
408 Optional. PEM encoded client certificate chain file. Environment
409 variables are expanded in the filename.
409 variables are expanded in the filename.
410
410
411 ``schemes``
411 ``schemes``
412 Optional. Space separated list of URI schemes to use this
412 Optional. Space separated list of URI schemes to use this
413 authentication entry with. Only used if the prefix doesn't include
413 authentication entry with. Only used if the prefix doesn't include
414 a scheme. Supported schemes are http and https. They will match
414 a scheme. Supported schemes are http and https. They will match
415 static-http and static-https respectively, as well.
415 static-http and static-https respectively, as well.
416 (default: https)
416 (default: https)
417
417
418 If no suitable authentication entry is found, the user is prompted
418 If no suitable authentication entry is found, the user is prompted
419 for credentials as usual if required by the remote.
419 for credentials as usual if required by the remote.
420
420
421 ``cmdserver``
421 ``cmdserver``
422 -------------
422 -------------
423
423
424 Controls command server settings. (ADVANCED)
424 Controls command server settings. (ADVANCED)
425
425
426 ``message-encodings``
426 ``message-encodings``
427 List of encodings for the ``m`` (message) channel. The first encoding
427 List of encodings for the ``m`` (message) channel. The first encoding
428 supported by the server will be selected and advertised in the hello
428 supported by the server will be selected and advertised in the hello
429 message. This is useful only when ``ui.message-output`` is set to
429 message. This is useful only when ``ui.message-output`` is set to
430 ``channel``. Supported encodings are ``cbor``.
430 ``channel``. Supported encodings are ``cbor``.
431
431
432 ``shutdown-on-interrupt``
432 ``shutdown-on-interrupt``
433 If set to false, the server's main loop will continue running after
433 If set to false, the server's main loop will continue running after
434 SIGINT received. ``runcommand`` requests can still be interrupted by
434 SIGINT received. ``runcommand`` requests can still be interrupted by
435 SIGINT. Close the write end of the pipe to shut down the server
435 SIGINT. Close the write end of the pipe to shut down the server
436 process gracefully.
436 process gracefully.
437 (default: True)
437 (default: True)
438
438
439 ``color``
439 ``color``
440 ---------
440 ---------
441
441
442 Configure the Mercurial color mode. For details about how to define your custom
442 Configure the Mercurial color mode. For details about how to define your custom
443 effect and style see :hg:`help color`.
443 effect and style see :hg:`help color`.
444
444
445 ``mode``
445 ``mode``
446 String: control the method used to output color. One of ``auto``, ``ansi``,
446 String: control the method used to output color. One of ``auto``, ``ansi``,
447 ``win32``, ``terminfo`` or ``debug``. In auto mode, Mercurial will
447 ``win32``, ``terminfo`` or ``debug``. In auto mode, Mercurial will
448 use ANSI mode by default (or win32 mode prior to Windows 10) if it detects a
448 use ANSI mode by default (or win32 mode prior to Windows 10) if it detects a
449 terminal. Any invalid value will disable color.
449 terminal. Any invalid value will disable color.
450
450
451 ``pagermode``
451 ``pagermode``
452 String: optional override of ``color.mode`` used with pager.
452 String: optional override of ``color.mode`` used with pager.
453
453
454 On some systems, terminfo mode may cause problems when using
454 On some systems, terminfo mode may cause problems when using
455 color with ``less -R`` as a pager program. less with the -R option
455 color with ``less -R`` as a pager program. less with the -R option
456 will only display ECMA-48 color codes, and terminfo mode may sometimes
456 will only display ECMA-48 color codes, and terminfo mode may sometimes
457 emit codes that less doesn't understand. You can work around this by
457 emit codes that less doesn't understand. You can work around this by
458 either using ansi mode (or auto mode), or by using less -r (which will
458 either using ansi mode (or auto mode), or by using less -r (which will
459 pass through all terminal control codes, not just color control
459 pass through all terminal control codes, not just color control
460 codes).
460 codes).
461
461
462 On some systems (such as MSYS in Windows), the terminal may support
462 On some systems (such as MSYS in Windows), the terminal may support
463 a different color mode than the pager program.
463 a different color mode than the pager program.
464
464
465 ``commands``
465 ``commands``
466 ------------
466 ------------
467
467
468 ``commit.post-status``
468 ``commit.post-status``
469 Show status of files in the working directory after successful commit.
469 Show status of files in the working directory after successful commit.
470 (default: False)
470 (default: False)
471
471
472 ``merge.require-rev``
472 ``merge.require-rev``
473 Require that the revision to merge the current commit with be specified on
473 Require that the revision to merge the current commit with be specified on
474 the command line. If this is enabled and a revision is not specified, the
474 the command line. If this is enabled and a revision is not specified, the
475 command aborts.
475 command aborts.
476 (default: False)
476 (default: False)
477
477
478 ``push.require-revs``
478 ``push.require-revs``
479 Require revisions to push be specified using one or more mechanisms such as
479 Require revisions to push be specified using one or more mechanisms such as
480 specifying them positionally on the command line, using ``-r``, ``-b``,
480 specifying them positionally on the command line, using ``-r``, ``-b``,
481 and/or ``-B`` on the command line, or using ``paths.<path>:pushrev`` in the
481 and/or ``-B`` on the command line, or using ``paths.<path>:pushrev`` in the
482 configuration. If this is enabled and revisions are not specified, the
482 configuration. If this is enabled and revisions are not specified, the
483 command aborts.
483 command aborts.
484 (default: False)
484 (default: False)
485
485
486 ``resolve.confirm``
486 ``resolve.confirm``
487 Confirm before performing action if no filename is passed.
487 Confirm before performing action if no filename is passed.
488 (default: False)
488 (default: False)
489
489
490 ``resolve.explicit-re-merge``
490 ``resolve.explicit-re-merge``
491 Require uses of ``hg resolve`` to specify which action it should perform,
491 Require uses of ``hg resolve`` to specify which action it should perform,
492 instead of re-merging files by default.
492 instead of re-merging files by default.
493 (default: False)
493 (default: False)
494
494
495 ``resolve.mark-check``
495 ``resolve.mark-check``
496 Determines what level of checking :hg:`resolve --mark` will perform before
496 Determines what level of checking :hg:`resolve --mark` will perform before
497 marking files as resolved. Valid values are ``none`, ``warn``, and
497 marking files as resolved. Valid values are ``none`, ``warn``, and
498 ``abort``. ``warn`` will output a warning listing the file(s) that still
498 ``abort``. ``warn`` will output a warning listing the file(s) that still
499 have conflict markers in them, but will still mark everything resolved.
499 have conflict markers in them, but will still mark everything resolved.
500 ``abort`` will output the same warning but will not mark things as resolved.
500 ``abort`` will output the same warning but will not mark things as resolved.
501 If --all is passed and this is set to ``abort``, only a warning will be
501 If --all is passed and this is set to ``abort``, only a warning will be
502 shown (an error will not be raised).
502 shown (an error will not be raised).
503 (default: ``none``)
503 (default: ``none``)
504
504
505 ``status.relative``
505 ``status.relative``
506 Make paths in :hg:`status` output relative to the current directory.
506 Make paths in :hg:`status` output relative to the current directory.
507 (default: False)
507 (default: False)
508
508
509 ``status.terse``
509 ``status.terse``
510 Default value for the --terse flag, which condenses status output.
510 Default value for the --terse flag, which condenses status output.
511 (default: empty)
511 (default: empty)
512
512
513 ``update.check``
513 ``update.check``
514 Determines what level of checking :hg:`update` will perform before moving
514 Determines what level of checking :hg:`update` will perform before moving
515 to a destination revision. Valid values are ``abort``, ``none``,
515 to a destination revision. Valid values are ``abort``, ``none``,
516 ``linear``, and ``noconflict``. ``abort`` always fails if the working
516 ``linear``, and ``noconflict``. ``abort`` always fails if the working
517 directory has uncommitted changes. ``none`` performs no checking, and may
517 directory has uncommitted changes. ``none`` performs no checking, and may
518 result in a merge with uncommitted changes. ``linear`` allows any update
518 result in a merge with uncommitted changes. ``linear`` allows any update
519 as long as it follows a straight line in the revision history, and may
519 as long as it follows a straight line in the revision history, and may
520 trigger a merge with uncommitted changes. ``noconflict`` will allow any
520 trigger a merge with uncommitted changes. ``noconflict`` will allow any
521 update which would not trigger a merge with uncommitted changes, if any
521 update which would not trigger a merge with uncommitted changes, if any
522 are present.
522 are present.
523 (default: ``linear``)
523 (default: ``linear``)
524
524
525 ``update.requiredest``
525 ``update.requiredest``
526 Require that the user pass a destination when running :hg:`update`.
526 Require that the user pass a destination when running :hg:`update`.
527 For example, :hg:`update .::` will be allowed, but a plain :hg:`update`
527 For example, :hg:`update .::` will be allowed, but a plain :hg:`update`
528 will be disallowed.
528 will be disallowed.
529 (default: False)
529 (default: False)
530
530
531 ``committemplate``
531 ``committemplate``
532 ------------------
532 ------------------
533
533
534 ``changeset``
534 ``changeset``
535 String: configuration in this section is used as the template to
535 String: configuration in this section is used as the template to
536 customize the text shown in the editor when committing.
536 customize the text shown in the editor when committing.
537
537
538 In addition to pre-defined template keywords, commit log specific one
538 In addition to pre-defined template keywords, commit log specific one
539 below can be used for customization:
539 below can be used for customization:
540
540
541 ``extramsg``
541 ``extramsg``
542 String: Extra message (typically 'Leave message empty to abort
542 String: Extra message (typically 'Leave message empty to abort
543 commit.'). This may be changed by some commands or extensions.
543 commit.'). This may be changed by some commands or extensions.
544
544
545 For example, the template configuration below shows as same text as
545 For example, the template configuration below shows as same text as
546 one shown by default::
546 one shown by default::
547
547
548 [committemplate]
548 [committemplate]
549 changeset = {desc}\n\n
549 changeset = {desc}\n\n
550 HG: Enter commit message. Lines beginning with 'HG:' are removed.
550 HG: Enter commit message. Lines beginning with 'HG:' are removed.
551 HG: {extramsg}
551 HG: {extramsg}
552 HG: --
552 HG: --
553 HG: user: {author}\n{ifeq(p2rev, "-1", "",
553 HG: user: {author}\n{ifeq(p2rev, "-1", "",
554 "HG: branch merge\n")
554 "HG: branch merge\n")
555 }HG: branch '{branch}'\n{if(activebookmark,
555 }HG: branch '{branch}'\n{if(activebookmark,
556 "HG: bookmark '{activebookmark}'\n") }{subrepos %
556 "HG: bookmark '{activebookmark}'\n") }{subrepos %
557 "HG: subrepo {subrepo}\n" }{file_adds %
557 "HG: subrepo {subrepo}\n" }{file_adds %
558 "HG: added {file}\n" }{file_mods %
558 "HG: added {file}\n" }{file_mods %
559 "HG: changed {file}\n" }{file_dels %
559 "HG: changed {file}\n" }{file_dels %
560 "HG: removed {file}\n" }{if(files, "",
560 "HG: removed {file}\n" }{if(files, "",
561 "HG: no files changed\n")}
561 "HG: no files changed\n")}
562
562
563 ``diff()``
563 ``diff()``
564 String: show the diff (see :hg:`help templates` for detail)
564 String: show the diff (see :hg:`help templates` for detail)
565
565
566 Sometimes it is helpful to show the diff of the changeset in the editor without
566 Sometimes it is helpful to show the diff of the changeset in the editor without
567 having to prefix 'HG: ' to each line so that highlighting works correctly. For
567 having to prefix 'HG: ' to each line so that highlighting works correctly. For
568 this, Mercurial provides a special string which will ignore everything below
568 this, Mercurial provides a special string which will ignore everything below
569 it::
569 it::
570
570
571 HG: ------------------------ >8 ------------------------
571 HG: ------------------------ >8 ------------------------
572
572
573 For example, the template configuration below will show the diff below the
573 For example, the template configuration below will show the diff below the
574 extra message::
574 extra message::
575
575
576 [committemplate]
576 [committemplate]
577 changeset = {desc}\n\n
577 changeset = {desc}\n\n
578 HG: Enter commit message. Lines beginning with 'HG:' are removed.
578 HG: Enter commit message. Lines beginning with 'HG:' are removed.
579 HG: {extramsg}
579 HG: {extramsg}
580 HG: ------------------------ >8 ------------------------
580 HG: ------------------------ >8 ------------------------
581 HG: Do not touch the line above.
581 HG: Do not touch the line above.
582 HG: Everything below will be removed.
582 HG: Everything below will be removed.
583 {diff()}
583 {diff()}
584
584
585 .. note::
585 .. note::
586
586
587 For some problematic encodings (see :hg:`help win32mbcs` for
587 For some problematic encodings (see :hg:`help win32mbcs` for
588 detail), this customization should be configured carefully, to
588 detail), this customization should be configured carefully, to
589 avoid showing broken characters.
589 avoid showing broken characters.
590
590
591 For example, if a multibyte character ending with backslash (0x5c) is
591 For example, if a multibyte character ending with backslash (0x5c) is
592 followed by the ASCII character 'n' in the customized template,
592 followed by the ASCII character 'n' in the customized template,
593 the sequence of backslash and 'n' is treated as line-feed unexpectedly
593 the sequence of backslash and 'n' is treated as line-feed unexpectedly
594 (and the multibyte character is broken, too).
594 (and the multibyte character is broken, too).
595
595
596 Customized template is used for commands below (``--edit`` may be
596 Customized template is used for commands below (``--edit`` may be
597 required):
597 required):
598
598
599 - :hg:`backout`
599 - :hg:`backout`
600 - :hg:`commit`
600 - :hg:`commit`
601 - :hg:`fetch` (for merge commit only)
601 - :hg:`fetch` (for merge commit only)
602 - :hg:`graft`
602 - :hg:`graft`
603 - :hg:`histedit`
603 - :hg:`histedit`
604 - :hg:`import`
604 - :hg:`import`
605 - :hg:`qfold`, :hg:`qnew` and :hg:`qrefresh`
605 - :hg:`qfold`, :hg:`qnew` and :hg:`qrefresh`
606 - :hg:`rebase`
606 - :hg:`rebase`
607 - :hg:`shelve`
607 - :hg:`shelve`
608 - :hg:`sign`
608 - :hg:`sign`
609 - :hg:`tag`
609 - :hg:`tag`
610 - :hg:`transplant`
610 - :hg:`transplant`
611
611
612 Configuring items below instead of ``changeset`` allows showing
612 Configuring items below instead of ``changeset`` allows showing
613 customized message only for specific actions, or showing different
613 customized message only for specific actions, or showing different
614 messages for each action.
614 messages for each action.
615
615
616 - ``changeset.backout`` for :hg:`backout`
616 - ``changeset.backout`` for :hg:`backout`
617 - ``changeset.commit.amend.merge`` for :hg:`commit --amend` on merges
617 - ``changeset.commit.amend.merge`` for :hg:`commit --amend` on merges
618 - ``changeset.commit.amend.normal`` for :hg:`commit --amend` on other
618 - ``changeset.commit.amend.normal`` for :hg:`commit --amend` on other
619 - ``changeset.commit.normal.merge`` for :hg:`commit` on merges
619 - ``changeset.commit.normal.merge`` for :hg:`commit` on merges
620 - ``changeset.commit.normal.normal`` for :hg:`commit` on other
620 - ``changeset.commit.normal.normal`` for :hg:`commit` on other
621 - ``changeset.fetch`` for :hg:`fetch` (impling merge commit)
621 - ``changeset.fetch`` for :hg:`fetch` (impling merge commit)
622 - ``changeset.gpg.sign`` for :hg:`sign`
622 - ``changeset.gpg.sign`` for :hg:`sign`
623 - ``changeset.graft`` for :hg:`graft`
623 - ``changeset.graft`` for :hg:`graft`
624 - ``changeset.histedit.edit`` for ``edit`` of :hg:`histedit`
624 - ``changeset.histedit.edit`` for ``edit`` of :hg:`histedit`
625 - ``changeset.histedit.fold`` for ``fold`` of :hg:`histedit`
625 - ``changeset.histedit.fold`` for ``fold`` of :hg:`histedit`
626 - ``changeset.histedit.mess`` for ``mess`` of :hg:`histedit`
626 - ``changeset.histedit.mess`` for ``mess`` of :hg:`histedit`
627 - ``changeset.histedit.pick`` for ``pick`` of :hg:`histedit`
627 - ``changeset.histedit.pick`` for ``pick`` of :hg:`histedit`
628 - ``changeset.import.bypass`` for :hg:`import --bypass`
628 - ``changeset.import.bypass`` for :hg:`import --bypass`
629 - ``changeset.import.normal.merge`` for :hg:`import` on merges
629 - ``changeset.import.normal.merge`` for :hg:`import` on merges
630 - ``changeset.import.normal.normal`` for :hg:`import` on other
630 - ``changeset.import.normal.normal`` for :hg:`import` on other
631 - ``changeset.mq.qnew`` for :hg:`qnew`
631 - ``changeset.mq.qnew`` for :hg:`qnew`
632 - ``changeset.mq.qfold`` for :hg:`qfold`
632 - ``changeset.mq.qfold`` for :hg:`qfold`
633 - ``changeset.mq.qrefresh`` for :hg:`qrefresh`
633 - ``changeset.mq.qrefresh`` for :hg:`qrefresh`
634 - ``changeset.rebase.collapse`` for :hg:`rebase --collapse`
634 - ``changeset.rebase.collapse`` for :hg:`rebase --collapse`
635 - ``changeset.rebase.merge`` for :hg:`rebase` on merges
635 - ``changeset.rebase.merge`` for :hg:`rebase` on merges
636 - ``changeset.rebase.normal`` for :hg:`rebase` on other
636 - ``changeset.rebase.normal`` for :hg:`rebase` on other
637 - ``changeset.shelve.shelve`` for :hg:`shelve`
637 - ``changeset.shelve.shelve`` for :hg:`shelve`
638 - ``changeset.tag.add`` for :hg:`tag` without ``--remove``
638 - ``changeset.tag.add`` for :hg:`tag` without ``--remove``
639 - ``changeset.tag.remove`` for :hg:`tag --remove`
639 - ``changeset.tag.remove`` for :hg:`tag --remove`
640 - ``changeset.transplant.merge`` for :hg:`transplant` on merges
640 - ``changeset.transplant.merge`` for :hg:`transplant` on merges
641 - ``changeset.transplant.normal`` for :hg:`transplant` on other
641 - ``changeset.transplant.normal`` for :hg:`transplant` on other
642
642
643 These dot-separated lists of names are treated as hierarchical ones.
643 These dot-separated lists of names are treated as hierarchical ones.
644 For example, ``changeset.tag.remove`` customizes the commit message
644 For example, ``changeset.tag.remove`` customizes the commit message
645 only for :hg:`tag --remove`, but ``changeset.tag`` customizes the
645 only for :hg:`tag --remove`, but ``changeset.tag`` customizes the
646 commit message for :hg:`tag` regardless of ``--remove`` option.
646 commit message for :hg:`tag` regardless of ``--remove`` option.
647
647
648 When the external editor is invoked for a commit, the corresponding
648 When the external editor is invoked for a commit, the corresponding
649 dot-separated list of names without the ``changeset.`` prefix
649 dot-separated list of names without the ``changeset.`` prefix
650 (e.g. ``commit.normal.normal``) is in the ``HGEDITFORM`` environment
650 (e.g. ``commit.normal.normal``) is in the ``HGEDITFORM`` environment
651 variable.
651 variable.
652
652
653 In this section, items other than ``changeset`` can be referred from
653 In this section, items other than ``changeset`` can be referred from
654 others. For example, the configuration to list committed files up
654 others. For example, the configuration to list committed files up
655 below can be referred as ``{listupfiles}``::
655 below can be referred as ``{listupfiles}``::
656
656
657 [committemplate]
657 [committemplate]
658 listupfiles = {file_adds %
658 listupfiles = {file_adds %
659 "HG: added {file}\n" }{file_mods %
659 "HG: added {file}\n" }{file_mods %
660 "HG: changed {file}\n" }{file_dels %
660 "HG: changed {file}\n" }{file_dels %
661 "HG: removed {file}\n" }{if(files, "",
661 "HG: removed {file}\n" }{if(files, "",
662 "HG: no files changed\n")}
662 "HG: no files changed\n")}
663
663
664 ``decode/encode``
664 ``decode/encode``
665 -----------------
665 -----------------
666
666
667 Filters for transforming files on checkout/checkin. This would
667 Filters for transforming files on checkout/checkin. This would
668 typically be used for newline processing or other
668 typically be used for newline processing or other
669 localization/canonicalization of files.
669 localization/canonicalization of files.
670
670
671 Filters consist of a filter pattern followed by a filter command.
671 Filters consist of a filter pattern followed by a filter command.
672 Filter patterns are globs by default, rooted at the repository root.
672 Filter patterns are globs by default, rooted at the repository root.
673 For example, to match any file ending in ``.txt`` in the root
673 For example, to match any file ending in ``.txt`` in the root
674 directory only, use the pattern ``*.txt``. To match any file ending
674 directory only, use the pattern ``*.txt``. To match any file ending
675 in ``.c`` anywhere in the repository, use the pattern ``**.c``.
675 in ``.c`` anywhere in the repository, use the pattern ``**.c``.
676 For each file only the first matching filter applies.
676 For each file only the first matching filter applies.
677
677
678 The filter command can start with a specifier, either ``pipe:`` or
678 The filter command can start with a specifier, either ``pipe:`` or
679 ``tempfile:``. If no specifier is given, ``pipe:`` is used by default.
679 ``tempfile:``. If no specifier is given, ``pipe:`` is used by default.
680
680
681 A ``pipe:`` command must accept data on stdin and return the transformed
681 A ``pipe:`` command must accept data on stdin and return the transformed
682 data on stdout.
682 data on stdout.
683
683
684 Pipe example::
684 Pipe example::
685
685
686 [encode]
686 [encode]
687 # uncompress gzip files on checkin to improve delta compression
687 # uncompress gzip files on checkin to improve delta compression
688 # note: not necessarily a good idea, just an example
688 # note: not necessarily a good idea, just an example
689 *.gz = pipe: gunzip
689 *.gz = pipe: gunzip
690
690
691 [decode]
691 [decode]
692 # recompress gzip files when writing them to the working dir (we
692 # recompress gzip files when writing them to the working dir (we
693 # can safely omit "pipe:", because it's the default)
693 # can safely omit "pipe:", because it's the default)
694 *.gz = gzip
694 *.gz = gzip
695
695
696 A ``tempfile:`` command is a template. The string ``INFILE`` is replaced
696 A ``tempfile:`` command is a template. The string ``INFILE`` is replaced
697 with the name of a temporary file that contains the data to be
697 with the name of a temporary file that contains the data to be
698 filtered by the command. The string ``OUTFILE`` is replaced with the name
698 filtered by the command. The string ``OUTFILE`` is replaced with the name
699 of an empty temporary file, where the filtered data must be written by
699 of an empty temporary file, where the filtered data must be written by
700 the command.
700 the command.
701
701
702 .. container:: windows
702 .. container:: windows
703
703
704 .. note::
704 .. note::
705
705
706 The tempfile mechanism is recommended for Windows systems,
706 The tempfile mechanism is recommended for Windows systems,
707 where the standard shell I/O redirection operators often have
707 where the standard shell I/O redirection operators often have
708 strange effects and may corrupt the contents of your files.
708 strange effects and may corrupt the contents of your files.
709
709
710 This filter mechanism is used internally by the ``eol`` extension to
710 This filter mechanism is used internally by the ``eol`` extension to
711 translate line ending characters between Windows (CRLF) and Unix (LF)
711 translate line ending characters between Windows (CRLF) and Unix (LF)
712 format. We suggest you use the ``eol`` extension for convenience.
712 format. We suggest you use the ``eol`` extension for convenience.
713
713
714
714
715 ``defaults``
715 ``defaults``
716 ------------
716 ------------
717
717
718 (defaults are deprecated. Don't use them. Use aliases instead.)
718 (defaults are deprecated. Don't use them. Use aliases instead.)
719
719
720 Use the ``[defaults]`` section to define command defaults, i.e. the
720 Use the ``[defaults]`` section to define command defaults, i.e. the
721 default options/arguments to pass to the specified commands.
721 default options/arguments to pass to the specified commands.
722
722
723 The following example makes :hg:`log` run in verbose mode, and
723 The following example makes :hg:`log` run in verbose mode, and
724 :hg:`status` show only the modified files, by default::
724 :hg:`status` show only the modified files, by default::
725
725
726 [defaults]
726 [defaults]
727 log = -v
727 log = -v
728 status = -m
728 status = -m
729
729
730 The actual commands, instead of their aliases, must be used when
730 The actual commands, instead of their aliases, must be used when
731 defining command defaults. The command defaults will also be applied
731 defining command defaults. The command defaults will also be applied
732 to the aliases of the commands defined.
732 to the aliases of the commands defined.
733
733
734
734
735 ``diff``
735 ``diff``
736 --------
736 --------
737
737
738 Settings used when displaying diffs. Everything except for ``unified``
738 Settings used when displaying diffs. Everything except for ``unified``
739 is a Boolean and defaults to False. See :hg:`help config.annotate`
739 is a Boolean and defaults to False. See :hg:`help config.annotate`
740 for related options for the annotate command.
740 for related options for the annotate command.
741
741
742 ``git``
742 ``git``
743 Use git extended diff format.
743 Use git extended diff format.
744
744
745 ``nobinary``
745 ``nobinary``
746 Omit git binary patches.
746 Omit git binary patches.
747
747
748 ``nodates``
748 ``nodates``
749 Don't include dates in diff headers.
749 Don't include dates in diff headers.
750
750
751 ``noprefix``
751 ``noprefix``
752 Omit 'a/' and 'b/' prefixes from filenames. Ignored in plain mode.
752 Omit 'a/' and 'b/' prefixes from filenames. Ignored in plain mode.
753
753
754 ``showfunc``
754 ``showfunc``
755 Show which function each change is in.
755 Show which function each change is in.
756
756
757 ``ignorews``
757 ``ignorews``
758 Ignore white space when comparing lines.
758 Ignore white space when comparing lines.
759
759
760 ``ignorewsamount``
760 ``ignorewsamount``
761 Ignore changes in the amount of white space.
761 Ignore changes in the amount of white space.
762
762
763 ``ignoreblanklines``
763 ``ignoreblanklines``
764 Ignore changes whose lines are all blank.
764 Ignore changes whose lines are all blank.
765
765
766 ``unified``
766 ``unified``
767 Number of lines of context to show.
767 Number of lines of context to show.
768
768
769 ``word-diff``
769 ``word-diff``
770 Highlight changed words.
770 Highlight changed words.
771
771
772 ``email``
772 ``email``
773 ---------
773 ---------
774
774
775 Settings for extensions that send email messages.
775 Settings for extensions that send email messages.
776
776
777 ``from``
777 ``from``
778 Optional. Email address to use in "From" header and SMTP envelope
778 Optional. Email address to use in "From" header and SMTP envelope
779 of outgoing messages.
779 of outgoing messages.
780
780
781 ``to``
781 ``to``
782 Optional. Comma-separated list of recipients' email addresses.
782 Optional. Comma-separated list of recipients' email addresses.
783
783
784 ``cc``
784 ``cc``
785 Optional. Comma-separated list of carbon copy recipients'
785 Optional. Comma-separated list of carbon copy recipients'
786 email addresses.
786 email addresses.
787
787
788 ``bcc``
788 ``bcc``
789 Optional. Comma-separated list of blind carbon copy recipients'
789 Optional. Comma-separated list of blind carbon copy recipients'
790 email addresses.
790 email addresses.
791
791
792 ``method``
792 ``method``
793 Optional. Method to use to send email messages. If value is ``smtp``
793 Optional. Method to use to send email messages. If value is ``smtp``
794 (default), use SMTP (see the ``[smtp]`` section for configuration).
794 (default), use SMTP (see the ``[smtp]`` section for configuration).
795 Otherwise, use as name of program to run that acts like sendmail
795 Otherwise, use as name of program to run that acts like sendmail
796 (takes ``-f`` option for sender, list of recipients on command line,
796 (takes ``-f`` option for sender, list of recipients on command line,
797 message on stdin). Normally, setting this to ``sendmail`` or
797 message on stdin). Normally, setting this to ``sendmail`` or
798 ``/usr/sbin/sendmail`` is enough to use sendmail to send messages.
798 ``/usr/sbin/sendmail`` is enough to use sendmail to send messages.
799
799
800 ``charsets``
800 ``charsets``
801 Optional. Comma-separated list of character sets considered
801 Optional. Comma-separated list of character sets considered
802 convenient for recipients. Addresses, headers, and parts not
802 convenient for recipients. Addresses, headers, and parts not
803 containing patches of outgoing messages will be encoded in the
803 containing patches of outgoing messages will be encoded in the
804 first character set to which conversion from local encoding
804 first character set to which conversion from local encoding
805 (``$HGENCODING``, ``ui.fallbackencoding``) succeeds. If correct
805 (``$HGENCODING``, ``ui.fallbackencoding``) succeeds. If correct
806 conversion fails, the text in question is sent as is.
806 conversion fails, the text in question is sent as is.
807 (default: '')
807 (default: '')
808
808
809 Order of outgoing email character sets:
809 Order of outgoing email character sets:
810
810
811 1. ``us-ascii``: always first, regardless of settings
811 1. ``us-ascii``: always first, regardless of settings
812 2. ``email.charsets``: in order given by user
812 2. ``email.charsets``: in order given by user
813 3. ``ui.fallbackencoding``: if not in email.charsets
813 3. ``ui.fallbackencoding``: if not in email.charsets
814 4. ``$HGENCODING``: if not in email.charsets
814 4. ``$HGENCODING``: if not in email.charsets
815 5. ``utf-8``: always last, regardless of settings
815 5. ``utf-8``: always last, regardless of settings
816
816
817 Email example::
817 Email example::
818
818
819 [email]
819 [email]
820 from = Joseph User <joe.user@example.com>
820 from = Joseph User <joe.user@example.com>
821 method = /usr/sbin/sendmail
821 method = /usr/sbin/sendmail
822 # charsets for western Europeans
822 # charsets for western Europeans
823 # us-ascii, utf-8 omitted, as they are tried first and last
823 # us-ascii, utf-8 omitted, as they are tried first and last
824 charsets = iso-8859-1, iso-8859-15, windows-1252
824 charsets = iso-8859-1, iso-8859-15, windows-1252
825
825
826
826
827 ``extensions``
827 ``extensions``
828 --------------
828 --------------
829
829
830 Mercurial has an extension mechanism for adding new features. To
830 Mercurial has an extension mechanism for adding new features. To
831 enable an extension, create an entry for it in this section.
831 enable an extension, create an entry for it in this section.
832
832
833 If you know that the extension is already in Python's search path,
833 If you know that the extension is already in Python's search path,
834 you can give the name of the module, followed by ``=``, with nothing
834 you can give the name of the module, followed by ``=``, with nothing
835 after the ``=``.
835 after the ``=``.
836
836
837 Otherwise, give a name that you choose, followed by ``=``, followed by
837 Otherwise, give a name that you choose, followed by ``=``, followed by
838 the path to the ``.py`` file (including the file name extension) that
838 the path to the ``.py`` file (including the file name extension) that
839 defines the extension.
839 defines the extension.
840
840
841 To explicitly disable an extension that is enabled in an hgrc of
841 To explicitly disable an extension that is enabled in an hgrc of
842 broader scope, prepend its path with ``!``, as in ``foo = !/ext/path``
842 broader scope, prepend its path with ``!``, as in ``foo = !/ext/path``
843 or ``foo = !`` when path is not supplied.
843 or ``foo = !`` when path is not supplied.
844
844
845 Example for ``~/.hgrc``::
845 Example for ``~/.hgrc``::
846
846
847 [extensions]
847 [extensions]
848 # (the churn extension will get loaded from Mercurial's path)
848 # (the churn extension will get loaded from Mercurial's path)
849 churn =
849 churn =
850 # (this extension will get loaded from the file specified)
850 # (this extension will get loaded from the file specified)
851 myfeature = ~/.hgext/myfeature.py
851 myfeature = ~/.hgext/myfeature.py
852
852
853
853
854 ``format``
854 ``format``
855 ----------
855 ----------
856
856
857 Configuration that controls the repository format. Newer format options are more
857 Configuration that controls the repository format. Newer format options are more
858 powerful, but incompatible with some older versions of Mercurial. Format options
858 powerful, but incompatible with some older versions of Mercurial. Format options
859 are considered at repository initialization only. You need to make a new clone
859 are considered at repository initialization only. You need to make a new clone
860 for config changes to be taken into account.
860 for config changes to be taken into account.
861
861
862 For more details about repository format and version compatibility, see
862 For more details about repository format and version compatibility, see
863 https://www.mercurial-scm.org/wiki/MissingRequirement
863 https://www.mercurial-scm.org/wiki/MissingRequirement
864
864
865 ``usegeneraldelta``
865 ``usegeneraldelta``
866 Enable or disable the "generaldelta" repository format which improves
866 Enable or disable the "generaldelta" repository format which improves
867 repository compression by allowing "revlog" to store deltas against
867 repository compression by allowing "revlog" to store deltas against
868 arbitrary revisions instead of the previously stored one. This provides
868 arbitrary revisions instead of the previously stored one. This provides
869 significant improvement for repositories with branches.
869 significant improvement for repositories with branches.
870
870
871 Repositories with this on-disk format require Mercurial version 1.9.
871 Repositories with this on-disk format require Mercurial version 1.9.
872
872
873 Enabled by default.
873 Enabled by default.
874
874
875 ``dotencode``
875 ``dotencode``
876 Enable or disable the "dotencode" repository format which enhances
876 Enable or disable the "dotencode" repository format which enhances
877 the "fncache" repository format (which has to be enabled to use
877 the "fncache" repository format (which has to be enabled to use
878 dotencode) to avoid issues with filenames starting with "._" on
878 dotencode) to avoid issues with filenames starting with "._" on
879 Mac OS X and spaces on Windows.
879 Mac OS X and spaces on Windows.
880
880
881 Repositories with this on-disk format require Mercurial version 1.7.
881 Repositories with this on-disk format require Mercurial version 1.7.
882
882
883 Enabled by default.
883 Enabled by default.
884
884
885 ``usefncache``
885 ``usefncache``
886 Enable or disable the "fncache" repository format which enhances
886 Enable or disable the "fncache" repository format which enhances
887 the "store" repository format (which has to be enabled to use
887 the "store" repository format (which has to be enabled to use
888 fncache) to allow longer filenames and avoids using Windows
888 fncache) to allow longer filenames and avoids using Windows
889 reserved names, e.g. "nul".
889 reserved names, e.g. "nul".
890
890
891 Repositories with this on-disk format require Mercurial version 1.1.
891 Repositories with this on-disk format require Mercurial version 1.1.
892
892
893 Enabled by default.
893 Enabled by default.
894
894
895 ``use-persistent-nodemap``
895 ``use-persistent-nodemap``
896 Enable or disable the "persistent-nodemap" feature which improves
896 Enable or disable the "persistent-nodemap" feature which improves
897 performance if the rust extensions are available.
897 performance if the rust extensions are available.
898
898
899 The "persistence-nodemap" persist the "node -> rev" on disk removing the
899 The "persistence-nodemap" persist the "node -> rev" on disk removing the
900 need to dynamically build that mapping for each Mercurial invocation. This
900 need to dynamically build that mapping for each Mercurial invocation. This
901 significantly reduce the startup cost of various local and server-side
901 significantly reduce the startup cost of various local and server-side
902 operation for larger repository.
902 operation for larger repository.
903
903
904 The performance improving version of this feature is currently only
904 The performance improving version of this feature is currently only
905 implemented in Rust, so people not using a version of Mercurial compiled
905 implemented in Rust, so people not using a version of Mercurial compiled
906 with the Rust part might actually suffer some slowdown. For this reason,
906 with the Rust part might actually suffer some slowdown. For this reason,
907 Such version will by default refuse to access such repositories. That
907 Such version will by default refuse to access such repositories. That
908 behavior can be controlled by configuration. Check
908 behavior can be controlled by configuration. Check
909 :hg:`help config.storage.revlog.persistent-nodemap.slowpath` for details.
909 :hg:`help config.storage.revlog.persistent-nodemap.slowpath` for details.
910
910
911 Repository with this on-disk format require Mercurial version 5.4 or above.
911 Repository with this on-disk format require Mercurial version 5.4 or above.
912
912
913 Disabled by default.
913 Disabled by default.
914
914
915 ``use-share-safe``
915 ``use-share-safe``
916 Enforce "safe" behaviors for all "shares" that access this repository.
916 Enforce "safe" behaviors for all "shares" that access this repository.
917
917
918 With this feature, "shares" using this repository as a source will:
918 With this feature, "shares" using this repository as a source will:
919
919
920 * read the source repository's configuration (`<source>/.hg/hgrc`).
920 * read the source repository's configuration (`<source>/.hg/hgrc`).
921 * read and use the source repository's "requirements"
921 * read and use the source repository's "requirements"
922 (except the working copy specific one).
922 (except the working copy specific one).
923
923
924 Without this feature, "shares" using this repository as a source will:
924 Without this feature, "shares" using this repository as a source will:
925
925
926 * keep tracking the repository "requirements" in the share only, ignoring
926 * keep tracking the repository "requirements" in the share only, ignoring
927 the source "requirements", possibly diverging from them.
927 the source "requirements", possibly diverging from them.
928 * ignore source repository config. This can create problems, like silently
928 * ignore source repository config. This can create problems, like silently
929 ignoring important hooks.
929 ignoring important hooks.
930
930
931 Beware that existing shares will not be upgraded/downgraded, and by
931 Beware that existing shares will not be upgraded/downgraded, and by
932 default, Mercurial will refuse to interact with them until the mismatch
932 default, Mercurial will refuse to interact with them until the mismatch
933 is resolved. See :hg:`help config share.safe-mismatch.source-safe` and
933 is resolved. See :hg:`help config share.safe-mismatch.source-safe` and
934 :hg:`help config share.safe-mismatch.source-not-safe` for details.
934 :hg:`help config share.safe-mismatch.source-not-safe` for details.
935
935
936 Introduced in Mercurial 5.7.
936 Introduced in Mercurial 5.7.
937
937
938 Disabled by default.
938 Disabled by default.
939
939
940 ``usestore``
940 ``usestore``
941 Enable or disable the "store" repository format which improves
941 Enable or disable the "store" repository format which improves
942 compatibility with systems that fold case or otherwise mangle
942 compatibility with systems that fold case or otherwise mangle
943 filenames. Disabling this option will allow you to store longer filenames
943 filenames. Disabling this option will allow you to store longer filenames
944 in some situations at the expense of compatibility.
944 in some situations at the expense of compatibility.
945
945
946 Repositories with this on-disk format require Mercurial version 0.9.4.
946 Repositories with this on-disk format require Mercurial version 0.9.4.
947
947
948 Enabled by default.
948 Enabled by default.
949
949
950 ``sparse-revlog``
950 ``sparse-revlog``
951 Enable or disable the ``sparse-revlog`` delta strategy. This format improves
951 Enable or disable the ``sparse-revlog`` delta strategy. This format improves
952 delta re-use inside revlog. For very branchy repositories, it results in a
952 delta re-use inside revlog. For very branchy repositories, it results in a
953 smaller store. For repositories with many revisions, it also helps
953 smaller store. For repositories with many revisions, it also helps
954 performance (by using shortened delta chains.)
954 performance (by using shortened delta chains.)
955
955
956 Repositories with this on-disk format require Mercurial version 4.7
956 Repositories with this on-disk format require Mercurial version 4.7
957
957
958 Enabled by default.
958 Enabled by default.
959
959
960 ``revlog-compression``
960 ``revlog-compression``
961 Compression algorithm used by revlog. Supported values are `zlib` and
961 Compression algorithm used by revlog. Supported values are `zlib` and
962 `zstd`. The `zlib` engine is the historical default of Mercurial. `zstd` is
962 `zstd`. The `zlib` engine is the historical default of Mercurial. `zstd` is
963 a newer format that is usually a net win over `zlib`, operating faster at
963 a newer format that is usually a net win over `zlib`, operating faster at
964 better compression rates. Use `zstd` to reduce CPU usage. Multiple values
964 better compression rates. Use `zstd` to reduce CPU usage. Multiple values
965 can be specified, the first available one will be used.
965 can be specified, the first available one will be used.
966
966
967 On some systems, the Mercurial installation may lack `zstd` support.
967 On some systems, the Mercurial installation may lack `zstd` support.
968
968
969 Default is `zlib`.
969 Default is `zlib`.
970
970
971 ``bookmarks-in-store``
971 ``bookmarks-in-store``
972 Store bookmarks in .hg/store/. This means that bookmarks are shared when
972 Store bookmarks in .hg/store/. This means that bookmarks are shared when
973 using `hg share` regardless of the `-B` option.
973 using `hg share` regardless of the `-B` option.
974
974
975 Repositories with this on-disk format require Mercurial version 5.1.
975 Repositories with this on-disk format require Mercurial version 5.1.
976
976
977 Disabled by default.
977 Disabled by default.
978
978
979
979
980 ``graph``
980 ``graph``
981 ---------
981 ---------
982
982
983 Web graph view configuration. This section let you change graph
983 Web graph view configuration. This section let you change graph
984 elements display properties by branches, for instance to make the
984 elements display properties by branches, for instance to make the
985 ``default`` branch stand out.
985 ``default`` branch stand out.
986
986
987 Each line has the following format::
987 Each line has the following format::
988
988
989 <branch>.<argument> = <value>
989 <branch>.<argument> = <value>
990
990
991 where ``<branch>`` is the name of the branch being
991 where ``<branch>`` is the name of the branch being
992 customized. Example::
992 customized. Example::
993
993
994 [graph]
994 [graph]
995 # 2px width
995 # 2px width
996 default.width = 2
996 default.width = 2
997 # red color
997 # red color
998 default.color = FF0000
998 default.color = FF0000
999
999
1000 Supported arguments:
1000 Supported arguments:
1001
1001
1002 ``width``
1002 ``width``
1003 Set branch edges width in pixels.
1003 Set branch edges width in pixels.
1004
1004
1005 ``color``
1005 ``color``
1006 Set branch edges color in hexadecimal RGB notation.
1006 Set branch edges color in hexadecimal RGB notation.
1007
1007
1008 ``hooks``
1008 ``hooks``
1009 ---------
1009 ---------
1010
1010
1011 Commands or Python functions that get automatically executed by
1011 Commands or Python functions that get automatically executed by
1012 various actions such as starting or finishing a commit. Multiple
1012 various actions such as starting or finishing a commit. Multiple
1013 hooks can be run for the same action by appending a suffix to the
1013 hooks can be run for the same action by appending a suffix to the
1014 action. Overriding a site-wide hook can be done by changing its
1014 action. Overriding a site-wide hook can be done by changing its
1015 value or setting it to an empty string. Hooks can be prioritized
1015 value or setting it to an empty string. Hooks can be prioritized
1016 by adding a prefix of ``priority.`` to the hook name on a new line
1016 by adding a prefix of ``priority.`` to the hook name on a new line
1017 and setting the priority. The default priority is 0.
1017 and setting the priority. The default priority is 0.
1018
1018
1019 Example ``.hg/hgrc``::
1019 Example ``.hg/hgrc``::
1020
1020
1021 [hooks]
1021 [hooks]
1022 # update working directory after adding changesets
1022 # update working directory after adding changesets
1023 changegroup.update = hg update
1023 changegroup.update = hg update
1024 # do not use the site-wide hook
1024 # do not use the site-wide hook
1025 incoming =
1025 incoming =
1026 incoming.email = /my/email/hook
1026 incoming.email = /my/email/hook
1027 incoming.autobuild = /my/build/hook
1027 incoming.autobuild = /my/build/hook
1028 # force autobuild hook to run before other incoming hooks
1028 # force autobuild hook to run before other incoming hooks
1029 priority.incoming.autobuild = 1
1029 priority.incoming.autobuild = 1
1030 ### control HGPLAIN setting when running autobuild hook
1030 ### control HGPLAIN setting when running autobuild hook
1031 # HGPLAIN always set (default from Mercurial 5.7)
1031 # HGPLAIN always set (default from Mercurial 5.7)
1032 incoming.autobuild:run-with-plain = yes
1032 incoming.autobuild:run-with-plain = yes
1033 # HGPLAIN never set
1033 # HGPLAIN never set
1034 incoming.autobuild:run-with-plain = no
1034 incoming.autobuild:run-with-plain = no
1035 # HGPLAIN inherited from environment (default before Mercurila 5.7)
1036 incoming.autobuild:run-with-plain = auto
1035
1037
1036 Most hooks are run with environment variables set that give useful
1038 Most hooks are run with environment variables set that give useful
1037 additional information. For each hook below, the environment variables
1039 additional information. For each hook below, the environment variables
1038 it is passed are listed with names in the form ``$HG_foo``. The
1040 it is passed are listed with names in the form ``$HG_foo``. The
1039 ``$HG_HOOKTYPE`` and ``$HG_HOOKNAME`` variables are set for all hooks.
1041 ``$HG_HOOKTYPE`` and ``$HG_HOOKNAME`` variables are set for all hooks.
1040 They contain the type of hook which triggered the run and the full name
1042 They contain the type of hook which triggered the run and the full name
1041 of the hook in the config, respectively. In the example above, this will
1043 of the hook in the config, respectively. In the example above, this will
1042 be ``$HG_HOOKTYPE=incoming`` and ``$HG_HOOKNAME=incoming.email``.
1044 be ``$HG_HOOKTYPE=incoming`` and ``$HG_HOOKNAME=incoming.email``.
1043
1045
1044 .. container:: windows
1046 .. container:: windows
1045
1047
1046 Some basic Unix syntax can be enabled for portability, including ``$VAR``
1048 Some basic Unix syntax can be enabled for portability, including ``$VAR``
1047 and ``${VAR}`` style variables. A ``~`` followed by ``\`` or ``/`` will
1049 and ``${VAR}`` style variables. A ``~`` followed by ``\`` or ``/`` will
1048 be expanded to ``%USERPROFILE%`` to simulate a subset of tilde expansion
1050 be expanded to ``%USERPROFILE%`` to simulate a subset of tilde expansion
1049 on Unix. To use a literal ``$`` or ``~``, it must be escaped with a back
1051 on Unix. To use a literal ``$`` or ``~``, it must be escaped with a back
1050 slash or inside of a strong quote. Strong quotes will be replaced by
1052 slash or inside of a strong quote. Strong quotes will be replaced by
1051 double quotes after processing.
1053 double quotes after processing.
1052
1054
1053 This feature is enabled by adding a prefix of ``tonative.`` to the hook
1055 This feature is enabled by adding a prefix of ``tonative.`` to the hook
1054 name on a new line, and setting it to ``True``. For example::
1056 name on a new line, and setting it to ``True``. For example::
1055
1057
1056 [hooks]
1058 [hooks]
1057 incoming.autobuild = /my/build/hook
1059 incoming.autobuild = /my/build/hook
1058 # enable translation to cmd.exe syntax for autobuild hook
1060 # enable translation to cmd.exe syntax for autobuild hook
1059 tonative.incoming.autobuild = True
1061 tonative.incoming.autobuild = True
1060
1062
1061 ``changegroup``
1063 ``changegroup``
1062 Run after a changegroup has been added via push, pull or unbundle. The ID of
1064 Run after a changegroup has been added via push, pull or unbundle. The ID of
1063 the first new changeset is in ``$HG_NODE`` and last is in ``$HG_NODE_LAST``.
1065 the first new changeset is in ``$HG_NODE`` and last is in ``$HG_NODE_LAST``.
1064 The URL from which changes came is in ``$HG_URL``.
1066 The URL from which changes came is in ``$HG_URL``.
1065
1067
1066 ``commit``
1068 ``commit``
1067 Run after a changeset has been created in the local repository. The ID
1069 Run after a changeset has been created in the local repository. The ID
1068 of the newly created changeset is in ``$HG_NODE``. Parent changeset
1070 of the newly created changeset is in ``$HG_NODE``. Parent changeset
1069 IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``.
1071 IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``.
1070
1072
1071 ``incoming``
1073 ``incoming``
1072 Run after a changeset has been pulled, pushed, or unbundled into
1074 Run after a changeset has been pulled, pushed, or unbundled into
1073 the local repository. The ID of the newly arrived changeset is in
1075 the local repository. The ID of the newly arrived changeset is in
1074 ``$HG_NODE``. The URL that was source of the changes is in ``$HG_URL``.
1076 ``$HG_NODE``. The URL that was source of the changes is in ``$HG_URL``.
1075
1077
1076 ``outgoing``
1078 ``outgoing``
1077 Run after sending changes from the local repository to another. The ID of
1079 Run after sending changes from the local repository to another. The ID of
1078 first changeset sent is in ``$HG_NODE``. The source of operation is in
1080 first changeset sent is in ``$HG_NODE``. The source of operation is in
1079 ``$HG_SOURCE``. Also see :hg:`help config.hooks.preoutgoing`.
1081 ``$HG_SOURCE``. Also see :hg:`help config.hooks.preoutgoing`.
1080
1082
1081 ``post-<command>``
1083 ``post-<command>``
1082 Run after successful invocations of the associated command. The
1084 Run after successful invocations of the associated command. The
1083 contents of the command line are passed as ``$HG_ARGS`` and the result
1085 contents of the command line are passed as ``$HG_ARGS`` and the result
1084 code in ``$HG_RESULT``. Parsed command line arguments are passed as
1086 code in ``$HG_RESULT``. Parsed command line arguments are passed as
1085 ``$HG_PATS`` and ``$HG_OPTS``. These contain string representations of
1087 ``$HG_PATS`` and ``$HG_OPTS``. These contain string representations of
1086 the python data internally passed to <command>. ``$HG_OPTS`` is a
1088 the python data internally passed to <command>. ``$HG_OPTS`` is a
1087 dictionary of options (with unspecified options set to their defaults).
1089 dictionary of options (with unspecified options set to their defaults).
1088 ``$HG_PATS`` is a list of arguments. Hook failure is ignored.
1090 ``$HG_PATS`` is a list of arguments. Hook failure is ignored.
1089
1091
1090 ``fail-<command>``
1092 ``fail-<command>``
1091 Run after a failed invocation of an associated command. The contents
1093 Run after a failed invocation of an associated command. The contents
1092 of the command line are passed as ``$HG_ARGS``. Parsed command line
1094 of the command line are passed as ``$HG_ARGS``. Parsed command line
1093 arguments are passed as ``$HG_PATS`` and ``$HG_OPTS``. These contain
1095 arguments are passed as ``$HG_PATS`` and ``$HG_OPTS``. These contain
1094 string representations of the python data internally passed to
1096 string representations of the python data internally passed to
1095 <command>. ``$HG_OPTS`` is a dictionary of options (with unspecified
1097 <command>. ``$HG_OPTS`` is a dictionary of options (with unspecified
1096 options set to their defaults). ``$HG_PATS`` is a list of arguments.
1098 options set to their defaults). ``$HG_PATS`` is a list of arguments.
1097 Hook failure is ignored.
1099 Hook failure is ignored.
1098
1100
1099 ``pre-<command>``
1101 ``pre-<command>``
1100 Run before executing the associated command. The contents of the
1102 Run before executing the associated command. The contents of the
1101 command line are passed as ``$HG_ARGS``. Parsed command line arguments
1103 command line are passed as ``$HG_ARGS``. Parsed command line arguments
1102 are passed as ``$HG_PATS`` and ``$HG_OPTS``. These contain string
1104 are passed as ``$HG_PATS`` and ``$HG_OPTS``. These contain string
1103 representations of the data internally passed to <command>. ``$HG_OPTS``
1105 representations of the data internally passed to <command>. ``$HG_OPTS``
1104 is a dictionary of options (with unspecified options set to their
1106 is a dictionary of options (with unspecified options set to their
1105 defaults). ``$HG_PATS`` is a list of arguments. If the hook returns
1107 defaults). ``$HG_PATS`` is a list of arguments. If the hook returns
1106 failure, the command doesn't execute and Mercurial returns the failure
1108 failure, the command doesn't execute and Mercurial returns the failure
1107 code.
1109 code.
1108
1110
1109 ``prechangegroup``
1111 ``prechangegroup``
1110 Run before a changegroup is added via push, pull or unbundle. Exit
1112 Run before a changegroup is added via push, pull or unbundle. Exit
1111 status 0 allows the changegroup to proceed. A non-zero status will
1113 status 0 allows the changegroup to proceed. A non-zero status will
1112 cause the push, pull or unbundle to fail. The URL from which changes
1114 cause the push, pull or unbundle to fail. The URL from which changes
1113 will come is in ``$HG_URL``.
1115 will come is in ``$HG_URL``.
1114
1116
1115 ``precommit``
1117 ``precommit``
1116 Run before starting a local commit. Exit status 0 allows the
1118 Run before starting a local commit. Exit status 0 allows the
1117 commit to proceed. A non-zero status will cause the commit to fail.
1119 commit to proceed. A non-zero status will cause the commit to fail.
1118 Parent changeset IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``.
1120 Parent changeset IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``.
1119
1121
1120 ``prelistkeys``
1122 ``prelistkeys``
1121 Run before listing pushkeys (like bookmarks) in the
1123 Run before listing pushkeys (like bookmarks) in the
1122 repository. A non-zero status will cause failure. The key namespace is
1124 repository. A non-zero status will cause failure. The key namespace is
1123 in ``$HG_NAMESPACE``.
1125 in ``$HG_NAMESPACE``.
1124
1126
1125 ``preoutgoing``
1127 ``preoutgoing``
1126 Run before collecting changes to send from the local repository to
1128 Run before collecting changes to send from the local repository to
1127 another. A non-zero status will cause failure. This lets you prevent
1129 another. A non-zero status will cause failure. This lets you prevent
1128 pull over HTTP or SSH. It can also prevent propagating commits (via
1130 pull over HTTP or SSH. It can also prevent propagating commits (via
1129 local pull, push (outbound) or bundle commands), but not completely,
1131 local pull, push (outbound) or bundle commands), but not completely,
1130 since you can just copy files instead. The source of operation is in
1132 since you can just copy files instead. The source of operation is in
1131 ``$HG_SOURCE``. If "serve", the operation is happening on behalf of a remote
1133 ``$HG_SOURCE``. If "serve", the operation is happening on behalf of a remote
1132 SSH or HTTP repository. If "push", "pull" or "bundle", the operation
1134 SSH or HTTP repository. If "push", "pull" or "bundle", the operation
1133 is happening on behalf of a repository on same system.
1135 is happening on behalf of a repository on same system.
1134
1136
1135 ``prepushkey``
1137 ``prepushkey``
1136 Run before a pushkey (like a bookmark) is added to the
1138 Run before a pushkey (like a bookmark) is added to the
1137 repository. A non-zero status will cause the key to be rejected. The
1139 repository. A non-zero status will cause the key to be rejected. The
1138 key namespace is in ``$HG_NAMESPACE``, the key is in ``$HG_KEY``,
1140 key namespace is in ``$HG_NAMESPACE``, the key is in ``$HG_KEY``,
1139 the old value (if any) is in ``$HG_OLD``, and the new value is in
1141 the old value (if any) is in ``$HG_OLD``, and the new value is in
1140 ``$HG_NEW``.
1142 ``$HG_NEW``.
1141
1143
1142 ``pretag``
1144 ``pretag``
1143 Run before creating a tag. Exit status 0 allows the tag to be
1145 Run before creating a tag. Exit status 0 allows the tag to be
1144 created. A non-zero status will cause the tag to fail. The ID of the
1146 created. A non-zero status will cause the tag to fail. The ID of the
1145 changeset to tag is in ``$HG_NODE``. The name of tag is in ``$HG_TAG``. The
1147 changeset to tag is in ``$HG_NODE``. The name of tag is in ``$HG_TAG``. The
1146 tag is local if ``$HG_LOCAL=1``, or in the repository if ``$HG_LOCAL=0``.
1148 tag is local if ``$HG_LOCAL=1``, or in the repository if ``$HG_LOCAL=0``.
1147
1149
1148 ``pretxnopen``
1150 ``pretxnopen``
1149 Run before any new repository transaction is open. The reason for the
1151 Run before any new repository transaction is open. The reason for the
1150 transaction will be in ``$HG_TXNNAME``, and a unique identifier for the
1152 transaction will be in ``$HG_TXNNAME``, and a unique identifier for the
1151 transaction will be in ``HG_TXNID``. A non-zero status will prevent the
1153 transaction will be in ``HG_TXNID``. A non-zero status will prevent the
1152 transaction from being opened.
1154 transaction from being opened.
1153
1155
1154 ``pretxnclose``
1156 ``pretxnclose``
1155 Run right before the transaction is actually finalized. Any repository change
1157 Run right before the transaction is actually finalized. Any repository change
1156 will be visible to the hook program. This lets you validate the transaction
1158 will be visible to the hook program. This lets you validate the transaction
1157 content or change it. Exit status 0 allows the commit to proceed. A non-zero
1159 content or change it. Exit status 0 allows the commit to proceed. A non-zero
1158 status will cause the transaction to be rolled back. The reason for the
1160 status will cause the transaction to be rolled back. The reason for the
1159 transaction opening will be in ``$HG_TXNNAME``, and a unique identifier for
1161 transaction opening will be in ``$HG_TXNNAME``, and a unique identifier for
1160 the transaction will be in ``HG_TXNID``. The rest of the available data will
1162 the transaction will be in ``HG_TXNID``. The rest of the available data will
1161 vary according the transaction type. New changesets will add ``$HG_NODE``
1163 vary according the transaction type. New changesets will add ``$HG_NODE``
1162 (the ID of the first added changeset), ``$HG_NODE_LAST`` (the ID of the last
1164 (the ID of the first added changeset), ``$HG_NODE_LAST`` (the ID of the last
1163 added changeset), ``$HG_URL`` and ``$HG_SOURCE`` variables. Bookmark and
1165 added changeset), ``$HG_URL`` and ``$HG_SOURCE`` variables. Bookmark and
1164 phase changes will set ``HG_BOOKMARK_MOVED`` and ``HG_PHASES_MOVED`` to ``1``
1166 phase changes will set ``HG_BOOKMARK_MOVED`` and ``HG_PHASES_MOVED`` to ``1``
1165 respectively, etc.
1167 respectively, etc.
1166
1168
1167 ``pretxnclose-bookmark``
1169 ``pretxnclose-bookmark``
1168 Run right before a bookmark change is actually finalized. Any repository
1170 Run right before a bookmark change is actually finalized. Any repository
1169 change will be visible to the hook program. This lets you validate the
1171 change will be visible to the hook program. This lets you validate the
1170 transaction content or change it. Exit status 0 allows the commit to
1172 transaction content or change it. Exit status 0 allows the commit to
1171 proceed. A non-zero status will cause the transaction to be rolled back.
1173 proceed. A non-zero status will cause the transaction to be rolled back.
1172 The name of the bookmark will be available in ``$HG_BOOKMARK``, the new
1174 The name of the bookmark will be available in ``$HG_BOOKMARK``, the new
1173 bookmark location will be available in ``$HG_NODE`` while the previous
1175 bookmark location will be available in ``$HG_NODE`` while the previous
1174 location will be available in ``$HG_OLDNODE``. In case of a bookmark
1176 location will be available in ``$HG_OLDNODE``. In case of a bookmark
1175 creation ``$HG_OLDNODE`` will be empty. In case of deletion ``$HG_NODE``
1177 creation ``$HG_OLDNODE`` will be empty. In case of deletion ``$HG_NODE``
1176 will be empty.
1178 will be empty.
1177 In addition, the reason for the transaction opening will be in
1179 In addition, the reason for the transaction opening will be in
1178 ``$HG_TXNNAME``, and a unique identifier for the transaction will be in
1180 ``$HG_TXNNAME``, and a unique identifier for the transaction will be in
1179 ``HG_TXNID``.
1181 ``HG_TXNID``.
1180
1182
1181 ``pretxnclose-phase``
1183 ``pretxnclose-phase``
1182 Run right before a phase change is actually finalized. Any repository change
1184 Run right before a phase change is actually finalized. Any repository change
1183 will be visible to the hook program. This lets you validate the transaction
1185 will be visible to the hook program. This lets you validate the transaction
1184 content or change it. Exit status 0 allows the commit to proceed. A non-zero
1186 content or change it. Exit status 0 allows the commit to proceed. A non-zero
1185 status will cause the transaction to be rolled back. The hook is called
1187 status will cause the transaction to be rolled back. The hook is called
1186 multiple times, once for each revision affected by a phase change.
1188 multiple times, once for each revision affected by a phase change.
1187 The affected node is available in ``$HG_NODE``, the phase in ``$HG_PHASE``
1189 The affected node is available in ``$HG_NODE``, the phase in ``$HG_PHASE``
1188 while the previous ``$HG_OLDPHASE``. In case of new node, ``$HG_OLDPHASE``
1190 while the previous ``$HG_OLDPHASE``. In case of new node, ``$HG_OLDPHASE``
1189 will be empty. In addition, the reason for the transaction opening will be in
1191 will be empty. In addition, the reason for the transaction opening will be in
1190 ``$HG_TXNNAME``, and a unique identifier for the transaction will be in
1192 ``$HG_TXNNAME``, and a unique identifier for the transaction will be in
1191 ``HG_TXNID``. The hook is also run for newly added revisions. In this case
1193 ``HG_TXNID``. The hook is also run for newly added revisions. In this case
1192 the ``$HG_OLDPHASE`` entry will be empty.
1194 the ``$HG_OLDPHASE`` entry will be empty.
1193
1195
1194 ``txnclose``
1196 ``txnclose``
1195 Run after any repository transaction has been committed. At this
1197 Run after any repository transaction has been committed. At this
1196 point, the transaction can no longer be rolled back. The hook will run
1198 point, the transaction can no longer be rolled back. The hook will run
1197 after the lock is released. See :hg:`help config.hooks.pretxnclose` for
1199 after the lock is released. See :hg:`help config.hooks.pretxnclose` for
1198 details about available variables.
1200 details about available variables.
1199
1201
1200 ``txnclose-bookmark``
1202 ``txnclose-bookmark``
1201 Run after any bookmark change has been committed. At this point, the
1203 Run after any bookmark change has been committed. At this point, the
1202 transaction can no longer be rolled back. The hook will run after the lock
1204 transaction can no longer be rolled back. The hook will run after the lock
1203 is released. See :hg:`help config.hooks.pretxnclose-bookmark` for details
1205 is released. See :hg:`help config.hooks.pretxnclose-bookmark` for details
1204 about available variables.
1206 about available variables.
1205
1207
1206 ``txnclose-phase``
1208 ``txnclose-phase``
1207 Run after any phase change has been committed. At this point, the
1209 Run after any phase change has been committed. At this point, the
1208 transaction can no longer be rolled back. The hook will run after the lock
1210 transaction can no longer be rolled back. The hook will run after the lock
1209 is released. See :hg:`help config.hooks.pretxnclose-phase` for details about
1211 is released. See :hg:`help config.hooks.pretxnclose-phase` for details about
1210 available variables.
1212 available variables.
1211
1213
1212 ``txnabort``
1214 ``txnabort``
1213 Run when a transaction is aborted. See :hg:`help config.hooks.pretxnclose`
1215 Run when a transaction is aborted. See :hg:`help config.hooks.pretxnclose`
1214 for details about available variables.
1216 for details about available variables.
1215
1217
1216 ``pretxnchangegroup``
1218 ``pretxnchangegroup``
1217 Run after a changegroup has been added via push, pull or unbundle, but before
1219 Run after a changegroup has been added via push, pull or unbundle, but before
1218 the transaction has been committed. The changegroup is visible to the hook
1220 the transaction has been committed. The changegroup is visible to the hook
1219 program. This allows validation of incoming changes before accepting them.
1221 program. This allows validation of incoming changes before accepting them.
1220 The ID of the first new changeset is in ``$HG_NODE`` and last is in
1222 The ID of the first new changeset is in ``$HG_NODE`` and last is in
1221 ``$HG_NODE_LAST``. Exit status 0 allows the transaction to commit. A non-zero
1223 ``$HG_NODE_LAST``. Exit status 0 allows the transaction to commit. A non-zero
1222 status will cause the transaction to be rolled back, and the push, pull or
1224 status will cause the transaction to be rolled back, and the push, pull or
1223 unbundle will fail. The URL that was the source of changes is in ``$HG_URL``.
1225 unbundle will fail. The URL that was the source of changes is in ``$HG_URL``.
1224
1226
1225 ``pretxncommit``
1227 ``pretxncommit``
1226 Run after a changeset has been created, but before the transaction is
1228 Run after a changeset has been created, but before the transaction is
1227 committed. The changeset is visible to the hook program. This allows
1229 committed. The changeset is visible to the hook program. This allows
1228 validation of the commit message and changes. Exit status 0 allows the
1230 validation of the commit message and changes. Exit status 0 allows the
1229 commit to proceed. A non-zero status will cause the transaction to
1231 commit to proceed. A non-zero status will cause the transaction to
1230 be rolled back. The ID of the new changeset is in ``$HG_NODE``. The parent
1232 be rolled back. The ID of the new changeset is in ``$HG_NODE``. The parent
1231 changeset IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``.
1233 changeset IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``.
1232
1234
1233 ``preupdate``
1235 ``preupdate``
1234 Run before updating the working directory. Exit status 0 allows
1236 Run before updating the working directory. Exit status 0 allows
1235 the update to proceed. A non-zero status will prevent the update.
1237 the update to proceed. A non-zero status will prevent the update.
1236 The changeset ID of first new parent is in ``$HG_PARENT1``. If updating to a
1238 The changeset ID of first new parent is in ``$HG_PARENT1``. If updating to a
1237 merge, the ID of second new parent is in ``$HG_PARENT2``.
1239 merge, the ID of second new parent is in ``$HG_PARENT2``.
1238
1240
1239 ``listkeys``
1241 ``listkeys``
1240 Run after listing pushkeys (like bookmarks) in the repository. The
1242 Run after listing pushkeys (like bookmarks) in the repository. The
1241 key namespace is in ``$HG_NAMESPACE``. ``$HG_VALUES`` is a
1243 key namespace is in ``$HG_NAMESPACE``. ``$HG_VALUES`` is a
1242 dictionary containing the keys and values.
1244 dictionary containing the keys and values.
1243
1245
1244 ``pushkey``
1246 ``pushkey``
1245 Run after a pushkey (like a bookmark) is added to the
1247 Run after a pushkey (like a bookmark) is added to the
1246 repository. The key namespace is in ``$HG_NAMESPACE``, the key is in
1248 repository. The key namespace is in ``$HG_NAMESPACE``, the key is in
1247 ``$HG_KEY``, the old value (if any) is in ``$HG_OLD``, and the new
1249 ``$HG_KEY``, the old value (if any) is in ``$HG_OLD``, and the new
1248 value is in ``$HG_NEW``.
1250 value is in ``$HG_NEW``.
1249
1251
1250 ``tag``
1252 ``tag``
1251 Run after a tag is created. The ID of the tagged changeset is in ``$HG_NODE``.
1253 Run after a tag is created. The ID of the tagged changeset is in ``$HG_NODE``.
1252 The name of tag is in ``$HG_TAG``. The tag is local if ``$HG_LOCAL=1``, or in
1254 The name of tag is in ``$HG_TAG``. The tag is local if ``$HG_LOCAL=1``, or in
1253 the repository if ``$HG_LOCAL=0``.
1255 the repository if ``$HG_LOCAL=0``.
1254
1256
1255 ``update``
1257 ``update``
1256 Run after updating the working directory. The changeset ID of first
1258 Run after updating the working directory. The changeset ID of first
1257 new parent is in ``$HG_PARENT1``. If updating to a merge, the ID of second new
1259 new parent is in ``$HG_PARENT1``. If updating to a merge, the ID of second new
1258 parent is in ``$HG_PARENT2``. If the update succeeded, ``$HG_ERROR=0``. If the
1260 parent is in ``$HG_PARENT2``. If the update succeeded, ``$HG_ERROR=0``. If the
1259 update failed (e.g. because conflicts were not resolved), ``$HG_ERROR=1``.
1261 update failed (e.g. because conflicts were not resolved), ``$HG_ERROR=1``.
1260
1262
1261 .. note::
1263 .. note::
1262
1264
1263 It is generally better to use standard hooks rather than the
1265 It is generally better to use standard hooks rather than the
1264 generic pre- and post- command hooks, as they are guaranteed to be
1266 generic pre- and post- command hooks, as they are guaranteed to be
1265 called in the appropriate contexts for influencing transactions.
1267 called in the appropriate contexts for influencing transactions.
1266 Also, hooks like "commit" will be called in all contexts that
1268 Also, hooks like "commit" will be called in all contexts that
1267 generate a commit (e.g. tag) and not just the commit command.
1269 generate a commit (e.g. tag) and not just the commit command.
1268
1270
1269 .. note::
1271 .. note::
1270
1272
1271 Environment variables with empty values may not be passed to
1273 Environment variables with empty values may not be passed to
1272 hooks on platforms such as Windows. As an example, ``$HG_PARENT2``
1274 hooks on platforms such as Windows. As an example, ``$HG_PARENT2``
1273 will have an empty value under Unix-like platforms for non-merge
1275 will have an empty value under Unix-like platforms for non-merge
1274 changesets, while it will not be available at all under Windows.
1276 changesets, while it will not be available at all under Windows.
1275
1277
1276 The syntax for Python hooks is as follows::
1278 The syntax for Python hooks is as follows::
1277
1279
1278 hookname = python:modulename.submodule.callable
1280 hookname = python:modulename.submodule.callable
1279 hookname = python:/path/to/python/module.py:callable
1281 hookname = python:/path/to/python/module.py:callable
1280
1282
1281 Python hooks are run within the Mercurial process. Each hook is
1283 Python hooks are run within the Mercurial process. Each hook is
1282 called with at least three keyword arguments: a ui object (keyword
1284 called with at least three keyword arguments: a ui object (keyword
1283 ``ui``), a repository object (keyword ``repo``), and a ``hooktype``
1285 ``ui``), a repository object (keyword ``repo``), and a ``hooktype``
1284 keyword that tells what kind of hook is used. Arguments listed as
1286 keyword that tells what kind of hook is used. Arguments listed as
1285 environment variables above are passed as keyword arguments, with no
1287 environment variables above are passed as keyword arguments, with no
1286 ``HG_`` prefix, and names in lower case.
1288 ``HG_`` prefix, and names in lower case.
1287
1289
1288 If a Python hook returns a "true" value or raises an exception, this
1290 If a Python hook returns a "true" value or raises an exception, this
1289 is treated as a failure.
1291 is treated as a failure.
1290
1292
1291
1293
1292 ``hostfingerprints``
1294 ``hostfingerprints``
1293 --------------------
1295 --------------------
1294
1296
1295 (Deprecated. Use ``[hostsecurity]``'s ``fingerprints`` options instead.)
1297 (Deprecated. Use ``[hostsecurity]``'s ``fingerprints`` options instead.)
1296
1298
1297 Fingerprints of the certificates of known HTTPS servers.
1299 Fingerprints of the certificates of known HTTPS servers.
1298
1300
1299 A HTTPS connection to a server with a fingerprint configured here will
1301 A HTTPS connection to a server with a fingerprint configured here will
1300 only succeed if the servers certificate matches the fingerprint.
1302 only succeed if the servers certificate matches the fingerprint.
1301 This is very similar to how ssh known hosts works.
1303 This is very similar to how ssh known hosts works.
1302
1304
1303 The fingerprint is the SHA-1 hash value of the DER encoded certificate.
1305 The fingerprint is the SHA-1 hash value of the DER encoded certificate.
1304 Multiple values can be specified (separated by spaces or commas). This can
1306 Multiple values can be specified (separated by spaces or commas). This can
1305 be used to define both old and new fingerprints while a host transitions
1307 be used to define both old and new fingerprints while a host transitions
1306 to a new certificate.
1308 to a new certificate.
1307
1309
1308 The CA chain and web.cacerts is not used for servers with a fingerprint.
1310 The CA chain and web.cacerts is not used for servers with a fingerprint.
1309
1311
1310 For example::
1312 For example::
1311
1313
1312 [hostfingerprints]
1314 [hostfingerprints]
1313 hg.intevation.de = fc:e2:8d:d9:51:cd:cb:c1:4d:18:6b:b7:44:8d:49:72:57:e6:cd:33
1315 hg.intevation.de = fc:e2:8d:d9:51:cd:cb:c1:4d:18:6b:b7:44:8d:49:72:57:e6:cd:33
1314 hg.intevation.org = fc:e2:8d:d9:51:cd:cb:c1:4d:18:6b:b7:44:8d:49:72:57:e6:cd:33
1316 hg.intevation.org = fc:e2:8d:d9:51:cd:cb:c1:4d:18:6b:b7:44:8d:49:72:57:e6:cd:33
1315
1317
1316 ``hostsecurity``
1318 ``hostsecurity``
1317 ----------------
1319 ----------------
1318
1320
1319 Used to specify global and per-host security settings for connecting to
1321 Used to specify global and per-host security settings for connecting to
1320 other machines.
1322 other machines.
1321
1323
1322 The following options control default behavior for all hosts.
1324 The following options control default behavior for all hosts.
1323
1325
1324 ``ciphers``
1326 ``ciphers``
1325 Defines the cryptographic ciphers to use for connections.
1327 Defines the cryptographic ciphers to use for connections.
1326
1328
1327 Value must be a valid OpenSSL Cipher List Format as documented at
1329 Value must be a valid OpenSSL Cipher List Format as documented at
1328 https://www.openssl.org/docs/manmaster/apps/ciphers.html#CIPHER-LIST-FORMAT.
1330 https://www.openssl.org/docs/manmaster/apps/ciphers.html#CIPHER-LIST-FORMAT.
1329
1331
1330 This setting is for advanced users only. Setting to incorrect values
1332 This setting is for advanced users only. Setting to incorrect values
1331 can significantly lower connection security or decrease performance.
1333 can significantly lower connection security or decrease performance.
1332 You have been warned.
1334 You have been warned.
1333
1335
1334 This option requires Python 2.7.
1336 This option requires Python 2.7.
1335
1337
1336 ``minimumprotocol``
1338 ``minimumprotocol``
1337 Defines the minimum channel encryption protocol to use.
1339 Defines the minimum channel encryption protocol to use.
1338
1340
1339 By default, the highest version of TLS supported by both client and server
1341 By default, the highest version of TLS supported by both client and server
1340 is used.
1342 is used.
1341
1343
1342 Allowed values are: ``tls1.0``, ``tls1.1``, ``tls1.2``.
1344 Allowed values are: ``tls1.0``, ``tls1.1``, ``tls1.2``.
1343
1345
1344 When running on an old Python version, only ``tls1.0`` is allowed since
1346 When running on an old Python version, only ``tls1.0`` is allowed since
1345 old versions of Python only support up to TLS 1.0.
1347 old versions of Python only support up to TLS 1.0.
1346
1348
1347 When running a Python that supports modern TLS versions, the default is
1349 When running a Python that supports modern TLS versions, the default is
1348 ``tls1.1``. ``tls1.0`` can still be used to allow TLS 1.0. However, this
1350 ``tls1.1``. ``tls1.0`` can still be used to allow TLS 1.0. However, this
1349 weakens security and should only be used as a feature of last resort if
1351 weakens security and should only be used as a feature of last resort if
1350 a server does not support TLS 1.1+.
1352 a server does not support TLS 1.1+.
1351
1353
1352 Options in the ``[hostsecurity]`` section can have the form
1354 Options in the ``[hostsecurity]`` section can have the form
1353 ``hostname``:``setting``. This allows multiple settings to be defined on a
1355 ``hostname``:``setting``. This allows multiple settings to be defined on a
1354 per-host basis.
1356 per-host basis.
1355
1357
1356 The following per-host settings can be defined.
1358 The following per-host settings can be defined.
1357
1359
1358 ``ciphers``
1360 ``ciphers``
1359 This behaves like ``ciphers`` as described above except it only applies
1361 This behaves like ``ciphers`` as described above except it only applies
1360 to the host on which it is defined.
1362 to the host on which it is defined.
1361
1363
1362 ``fingerprints``
1364 ``fingerprints``
1363 A list of hashes of the DER encoded peer/remote certificate. Values have
1365 A list of hashes of the DER encoded peer/remote certificate. Values have
1364 the form ``algorithm``:``fingerprint``. e.g.
1366 the form ``algorithm``:``fingerprint``. e.g.
1365 ``sha256:c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2``.
1367 ``sha256:c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2``.
1366 In addition, colons (``:``) can appear in the fingerprint part.
1368 In addition, colons (``:``) can appear in the fingerprint part.
1367
1369
1368 The following algorithms/prefixes are supported: ``sha1``, ``sha256``,
1370 The following algorithms/prefixes are supported: ``sha1``, ``sha256``,
1369 ``sha512``.
1371 ``sha512``.
1370
1372
1371 Use of ``sha256`` or ``sha512`` is preferred.
1373 Use of ``sha256`` or ``sha512`` is preferred.
1372
1374
1373 If a fingerprint is specified, the CA chain is not validated for this
1375 If a fingerprint is specified, the CA chain is not validated for this
1374 host and Mercurial will require the remote certificate to match one
1376 host and Mercurial will require the remote certificate to match one
1375 of the fingerprints specified. This means if the server updates its
1377 of the fingerprints specified. This means if the server updates its
1376 certificate, Mercurial will abort until a new fingerprint is defined.
1378 certificate, Mercurial will abort until a new fingerprint is defined.
1377 This can provide stronger security than traditional CA-based validation
1379 This can provide stronger security than traditional CA-based validation
1378 at the expense of convenience.
1380 at the expense of convenience.
1379
1381
1380 This option takes precedence over ``verifycertsfile``.
1382 This option takes precedence over ``verifycertsfile``.
1381
1383
1382 ``minimumprotocol``
1384 ``minimumprotocol``
1383 This behaves like ``minimumprotocol`` as described above except it
1385 This behaves like ``minimumprotocol`` as described above except it
1384 only applies to the host on which it is defined.
1386 only applies to the host on which it is defined.
1385
1387
1386 ``verifycertsfile``
1388 ``verifycertsfile``
1387 Path to file a containing a list of PEM encoded certificates used to
1389 Path to file a containing a list of PEM encoded certificates used to
1388 verify the server certificate. Environment variables and ``~user``
1390 verify the server certificate. Environment variables and ``~user``
1389 constructs are expanded in the filename.
1391 constructs are expanded in the filename.
1390
1392
1391 The server certificate or the certificate's certificate authority (CA)
1393 The server certificate or the certificate's certificate authority (CA)
1392 must match a certificate from this file or certificate verification
1394 must match a certificate from this file or certificate verification
1393 will fail and connections to the server will be refused.
1395 will fail and connections to the server will be refused.
1394
1396
1395 If defined, only certificates provided by this file will be used:
1397 If defined, only certificates provided by this file will be used:
1396 ``web.cacerts`` and any system/default certificates will not be
1398 ``web.cacerts`` and any system/default certificates will not be
1397 used.
1399 used.
1398
1400
1399 This option has no effect if the per-host ``fingerprints`` option
1401 This option has no effect if the per-host ``fingerprints`` option
1400 is set.
1402 is set.
1401
1403
1402 The format of the file is as follows::
1404 The format of the file is as follows::
1403
1405
1404 -----BEGIN CERTIFICATE-----
1406 -----BEGIN CERTIFICATE-----
1405 ... (certificate in base64 PEM encoding) ...
1407 ... (certificate in base64 PEM encoding) ...
1406 -----END CERTIFICATE-----
1408 -----END CERTIFICATE-----
1407 -----BEGIN CERTIFICATE-----
1409 -----BEGIN CERTIFICATE-----
1408 ... (certificate in base64 PEM encoding) ...
1410 ... (certificate in base64 PEM encoding) ...
1409 -----END CERTIFICATE-----
1411 -----END CERTIFICATE-----
1410
1412
1411 For example::
1413 For example::
1412
1414
1413 [hostsecurity]
1415 [hostsecurity]
1414 hg.example.com:fingerprints = sha256:c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2
1416 hg.example.com:fingerprints = sha256:c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2
1415 hg2.example.com:fingerprints = sha1:914f1aff87249c09b6859b88b1906d30756491ca, sha1:fc:e2:8d:d9:51:cd:cb:c1:4d:18:6b:b7:44:8d:49:72:57:e6:cd:33
1417 hg2.example.com:fingerprints = sha1:914f1aff87249c09b6859b88b1906d30756491ca, sha1:fc:e2:8d:d9:51:cd:cb:c1:4d:18:6b:b7:44:8d:49:72:57:e6:cd:33
1416 hg3.example.com:fingerprints = sha256:9a:b0:dc:e2:75:ad:8a:b7:84:58:e5:1f:07:32:f1:87:e6:bd:24:22:af:b7:ce:8e:9c:b4:10:cf:b9:f4:0e:d2
1418 hg3.example.com:fingerprints = sha256:9a:b0:dc:e2:75:ad:8a:b7:84:58:e5:1f:07:32:f1:87:e6:bd:24:22:af:b7:ce:8e:9c:b4:10:cf:b9:f4:0e:d2
1417 foo.example.com:verifycertsfile = /etc/ssl/trusted-ca-certs.pem
1419 foo.example.com:verifycertsfile = /etc/ssl/trusted-ca-certs.pem
1418
1420
1419 To change the default minimum protocol version to TLS 1.2 but to allow TLS 1.1
1421 To change the default minimum protocol version to TLS 1.2 but to allow TLS 1.1
1420 when connecting to ``hg.example.com``::
1422 when connecting to ``hg.example.com``::
1421
1423
1422 [hostsecurity]
1424 [hostsecurity]
1423 minimumprotocol = tls1.2
1425 minimumprotocol = tls1.2
1424 hg.example.com:minimumprotocol = tls1.1
1426 hg.example.com:minimumprotocol = tls1.1
1425
1427
1426 ``http_proxy``
1428 ``http_proxy``
1427 --------------
1429 --------------
1428
1430
1429 Used to access web-based Mercurial repositories through a HTTP
1431 Used to access web-based Mercurial repositories through a HTTP
1430 proxy.
1432 proxy.
1431
1433
1432 ``host``
1434 ``host``
1433 Host name and (optional) port of the proxy server, for example
1435 Host name and (optional) port of the proxy server, for example
1434 "myproxy:8000".
1436 "myproxy:8000".
1435
1437
1436 ``no``
1438 ``no``
1437 Optional. Comma-separated list of host names that should bypass
1439 Optional. Comma-separated list of host names that should bypass
1438 the proxy.
1440 the proxy.
1439
1441
1440 ``passwd``
1442 ``passwd``
1441 Optional. Password to authenticate with at the proxy server.
1443 Optional. Password to authenticate with at the proxy server.
1442
1444
1443 ``user``
1445 ``user``
1444 Optional. User name to authenticate with at the proxy server.
1446 Optional. User name to authenticate with at the proxy server.
1445
1447
1446 ``always``
1448 ``always``
1447 Optional. Always use the proxy, even for localhost and any entries
1449 Optional. Always use the proxy, even for localhost and any entries
1448 in ``http_proxy.no``. (default: False)
1450 in ``http_proxy.no``. (default: False)
1449
1451
1450 ``http``
1452 ``http``
1451 ----------
1453 ----------
1452
1454
1453 Used to configure access to Mercurial repositories via HTTP.
1455 Used to configure access to Mercurial repositories via HTTP.
1454
1456
1455 ``timeout``
1457 ``timeout``
1456 If set, blocking operations will timeout after that many seconds.
1458 If set, blocking operations will timeout after that many seconds.
1457 (default: None)
1459 (default: None)
1458
1460
1459 ``merge``
1461 ``merge``
1460 ---------
1462 ---------
1461
1463
1462 This section specifies behavior during merges and updates.
1464 This section specifies behavior during merges and updates.
1463
1465
1464 ``checkignored``
1466 ``checkignored``
1465 Controls behavior when an ignored file on disk has the same name as a tracked
1467 Controls behavior when an ignored file on disk has the same name as a tracked
1466 file in the changeset being merged or updated to, and has different
1468 file in the changeset being merged or updated to, and has different
1467 contents. Options are ``abort``, ``warn`` and ``ignore``. With ``abort``,
1469 contents. Options are ``abort``, ``warn`` and ``ignore``. With ``abort``,
1468 abort on such files. With ``warn``, warn on such files and back them up as
1470 abort on such files. With ``warn``, warn on such files and back them up as
1469 ``.orig``. With ``ignore``, don't print a warning and back them up as
1471 ``.orig``. With ``ignore``, don't print a warning and back them up as
1470 ``.orig``. (default: ``abort``)
1472 ``.orig``. (default: ``abort``)
1471
1473
1472 ``checkunknown``
1474 ``checkunknown``
1473 Controls behavior when an unknown file that isn't ignored has the same name
1475 Controls behavior when an unknown file that isn't ignored has the same name
1474 as a tracked file in the changeset being merged or updated to, and has
1476 as a tracked file in the changeset being merged or updated to, and has
1475 different contents. Similar to ``merge.checkignored``, except for files that
1477 different contents. Similar to ``merge.checkignored``, except for files that
1476 are not ignored. (default: ``abort``)
1478 are not ignored. (default: ``abort``)
1477
1479
1478 ``on-failure``
1480 ``on-failure``
1479 When set to ``continue`` (the default), the merge process attempts to
1481 When set to ``continue`` (the default), the merge process attempts to
1480 merge all unresolved files using the merge chosen tool, regardless of
1482 merge all unresolved files using the merge chosen tool, regardless of
1481 whether previous file merge attempts during the process succeeded or not.
1483 whether previous file merge attempts during the process succeeded or not.
1482 Setting this to ``prompt`` will prompt after any merge failure continue
1484 Setting this to ``prompt`` will prompt after any merge failure continue
1483 or halt the merge process. Setting this to ``halt`` will automatically
1485 or halt the merge process. Setting this to ``halt`` will automatically
1484 halt the merge process on any merge tool failure. The merge process
1486 halt the merge process on any merge tool failure. The merge process
1485 can be restarted by using the ``resolve`` command. When a merge is
1487 can be restarted by using the ``resolve`` command. When a merge is
1486 halted, the repository is left in a normal ``unresolved`` merge state.
1488 halted, the repository is left in a normal ``unresolved`` merge state.
1487 (default: ``continue``)
1489 (default: ``continue``)
1488
1490
1489 ``strict-capability-check``
1491 ``strict-capability-check``
1490 Whether capabilities of internal merge tools are checked strictly
1492 Whether capabilities of internal merge tools are checked strictly
1491 or not, while examining rules to decide merge tool to be used.
1493 or not, while examining rules to decide merge tool to be used.
1492 (default: False)
1494 (default: False)
1493
1495
1494 ``merge-patterns``
1496 ``merge-patterns``
1495 ------------------
1497 ------------------
1496
1498
1497 This section specifies merge tools to associate with particular file
1499 This section specifies merge tools to associate with particular file
1498 patterns. Tools matched here will take precedence over the default
1500 patterns. Tools matched here will take precedence over the default
1499 merge tool. Patterns are globs by default, rooted at the repository
1501 merge tool. Patterns are globs by default, rooted at the repository
1500 root.
1502 root.
1501
1503
1502 Example::
1504 Example::
1503
1505
1504 [merge-patterns]
1506 [merge-patterns]
1505 **.c = kdiff3
1507 **.c = kdiff3
1506 **.jpg = myimgmerge
1508 **.jpg = myimgmerge
1507
1509
1508 ``merge-tools``
1510 ``merge-tools``
1509 ---------------
1511 ---------------
1510
1512
1511 This section configures external merge tools to use for file-level
1513 This section configures external merge tools to use for file-level
1512 merges. This section has likely been preconfigured at install time.
1514 merges. This section has likely been preconfigured at install time.
1513 Use :hg:`config merge-tools` to check the existing configuration.
1515 Use :hg:`config merge-tools` to check the existing configuration.
1514 Also see :hg:`help merge-tools` for more details.
1516 Also see :hg:`help merge-tools` for more details.
1515
1517
1516 Example ``~/.hgrc``::
1518 Example ``~/.hgrc``::
1517
1519
1518 [merge-tools]
1520 [merge-tools]
1519 # Override stock tool location
1521 # Override stock tool location
1520 kdiff3.executable = ~/bin/kdiff3
1522 kdiff3.executable = ~/bin/kdiff3
1521 # Specify command line
1523 # Specify command line
1522 kdiff3.args = $base $local $other -o $output
1524 kdiff3.args = $base $local $other -o $output
1523 # Give higher priority
1525 # Give higher priority
1524 kdiff3.priority = 1
1526 kdiff3.priority = 1
1525
1527
1526 # Changing the priority of preconfigured tool
1528 # Changing the priority of preconfigured tool
1527 meld.priority = 0
1529 meld.priority = 0
1528
1530
1529 # Disable a preconfigured tool
1531 # Disable a preconfigured tool
1530 vimdiff.disabled = yes
1532 vimdiff.disabled = yes
1531
1533
1532 # Define new tool
1534 # Define new tool
1533 myHtmlTool.args = -m $local $other $base $output
1535 myHtmlTool.args = -m $local $other $base $output
1534 myHtmlTool.regkey = Software\FooSoftware\HtmlMerge
1536 myHtmlTool.regkey = Software\FooSoftware\HtmlMerge
1535 myHtmlTool.priority = 1
1537 myHtmlTool.priority = 1
1536
1538
1537 Supported arguments:
1539 Supported arguments:
1538
1540
1539 ``priority``
1541 ``priority``
1540 The priority in which to evaluate this tool.
1542 The priority in which to evaluate this tool.
1541 (default: 0)
1543 (default: 0)
1542
1544
1543 ``executable``
1545 ``executable``
1544 Either just the name of the executable or its pathname.
1546 Either just the name of the executable or its pathname.
1545
1547
1546 .. container:: windows
1548 .. container:: windows
1547
1549
1548 On Windows, the path can use environment variables with ${ProgramFiles}
1550 On Windows, the path can use environment variables with ${ProgramFiles}
1549 syntax.
1551 syntax.
1550
1552
1551 (default: the tool name)
1553 (default: the tool name)
1552
1554
1553 ``args``
1555 ``args``
1554 The arguments to pass to the tool executable. You can refer to the
1556 The arguments to pass to the tool executable. You can refer to the
1555 files being merged as well as the output file through these
1557 files being merged as well as the output file through these
1556 variables: ``$base``, ``$local``, ``$other``, ``$output``.
1558 variables: ``$base``, ``$local``, ``$other``, ``$output``.
1557
1559
1558 The meaning of ``$local`` and ``$other`` can vary depending on which action is
1560 The meaning of ``$local`` and ``$other`` can vary depending on which action is
1559 being performed. During an update or merge, ``$local`` represents the original
1561 being performed. During an update or merge, ``$local`` represents the original
1560 state of the file, while ``$other`` represents the commit you are updating to or
1562 state of the file, while ``$other`` represents the commit you are updating to or
1561 the commit you are merging with. During a rebase, ``$local`` represents the
1563 the commit you are merging with. During a rebase, ``$local`` represents the
1562 destination of the rebase, and ``$other`` represents the commit being rebased.
1564 destination of the rebase, and ``$other`` represents the commit being rebased.
1563
1565
1564 Some operations define custom labels to assist with identifying the revisions,
1566 Some operations define custom labels to assist with identifying the revisions,
1565 accessible via ``$labellocal``, ``$labelother``, and ``$labelbase``. If custom
1567 accessible via ``$labellocal``, ``$labelother``, and ``$labelbase``. If custom
1566 labels are not available, these will be ``local``, ``other``, and ``base``,
1568 labels are not available, these will be ``local``, ``other``, and ``base``,
1567 respectively.
1569 respectively.
1568 (default: ``$local $base $other``)
1570 (default: ``$local $base $other``)
1569
1571
1570 ``premerge``
1572 ``premerge``
1571 Attempt to run internal non-interactive 3-way merge tool before
1573 Attempt to run internal non-interactive 3-way merge tool before
1572 launching external tool. Options are ``true``, ``false``, ``keep``,
1574 launching external tool. Options are ``true``, ``false``, ``keep``,
1573 ``keep-merge3``, or ``keep-mergediff`` (experimental). The ``keep`` option
1575 ``keep-merge3``, or ``keep-mergediff`` (experimental). The ``keep`` option
1574 will leave markers in the file if the premerge fails. The ``keep-merge3``
1576 will leave markers in the file if the premerge fails. The ``keep-merge3``
1575 will do the same but include information about the base of the merge in the
1577 will do the same but include information about the base of the merge in the
1576 marker (see internal :merge3 in :hg:`help merge-tools`). The
1578 marker (see internal :merge3 in :hg:`help merge-tools`). The
1577 ``keep-mergediff`` option is similar but uses a different marker style
1579 ``keep-mergediff`` option is similar but uses a different marker style
1578 (see internal :merge3 in :hg:`help merge-tools`). (default: True)
1580 (see internal :merge3 in :hg:`help merge-tools`). (default: True)
1579
1581
1580 ``binary``
1582 ``binary``
1581 This tool can merge binary files. (default: False, unless tool
1583 This tool can merge binary files. (default: False, unless tool
1582 was selected by file pattern match)
1584 was selected by file pattern match)
1583
1585
1584 ``symlink``
1586 ``symlink``
1585 This tool can merge symlinks. (default: False)
1587 This tool can merge symlinks. (default: False)
1586
1588
1587 ``check``
1589 ``check``
1588 A list of merge success-checking options:
1590 A list of merge success-checking options:
1589
1591
1590 ``changed``
1592 ``changed``
1591 Ask whether merge was successful when the merged file shows no changes.
1593 Ask whether merge was successful when the merged file shows no changes.
1592 ``conflicts``
1594 ``conflicts``
1593 Check whether there are conflicts even though the tool reported success.
1595 Check whether there are conflicts even though the tool reported success.
1594 ``prompt``
1596 ``prompt``
1595 Always prompt for merge success, regardless of success reported by tool.
1597 Always prompt for merge success, regardless of success reported by tool.
1596
1598
1597 ``fixeol``
1599 ``fixeol``
1598 Attempt to fix up EOL changes caused by the merge tool.
1600 Attempt to fix up EOL changes caused by the merge tool.
1599 (default: False)
1601 (default: False)
1600
1602
1601 ``gui``
1603 ``gui``
1602 This tool requires a graphical interface to run. (default: False)
1604 This tool requires a graphical interface to run. (default: False)
1603
1605
1604 ``mergemarkers``
1606 ``mergemarkers``
1605 Controls whether the labels passed via ``$labellocal``, ``$labelother``, and
1607 Controls whether the labels passed via ``$labellocal``, ``$labelother``, and
1606 ``$labelbase`` are ``detailed`` (respecting ``mergemarkertemplate``) or
1608 ``$labelbase`` are ``detailed`` (respecting ``mergemarkertemplate``) or
1607 ``basic``. If ``premerge`` is ``keep`` or ``keep-merge3``, the conflict
1609 ``basic``. If ``premerge`` is ``keep`` or ``keep-merge3``, the conflict
1608 markers generated during premerge will be ``detailed`` if either this option or
1610 markers generated during premerge will be ``detailed`` if either this option or
1609 the corresponding option in the ``[ui]`` section is ``detailed``.
1611 the corresponding option in the ``[ui]`` section is ``detailed``.
1610 (default: ``basic``)
1612 (default: ``basic``)
1611
1613
1612 ``mergemarkertemplate``
1614 ``mergemarkertemplate``
1613 This setting can be used to override ``mergemarker`` from the
1615 This setting can be used to override ``mergemarker`` from the
1614 ``[command-templates]`` section on a per-tool basis; this applies to the
1616 ``[command-templates]`` section on a per-tool basis; this applies to the
1615 ``$label``-prefixed variables and to the conflict markers that are generated
1617 ``$label``-prefixed variables and to the conflict markers that are generated
1616 if ``premerge`` is ``keep` or ``keep-merge3``. See the corresponding variable
1618 if ``premerge`` is ``keep` or ``keep-merge3``. See the corresponding variable
1617 in ``[ui]`` for more information.
1619 in ``[ui]`` for more information.
1618
1620
1619 .. container:: windows
1621 .. container:: windows
1620
1622
1621 ``regkey``
1623 ``regkey``
1622 Windows registry key which describes install location of this
1624 Windows registry key which describes install location of this
1623 tool. Mercurial will search for this key first under
1625 tool. Mercurial will search for this key first under
1624 ``HKEY_CURRENT_USER`` and then under ``HKEY_LOCAL_MACHINE``.
1626 ``HKEY_CURRENT_USER`` and then under ``HKEY_LOCAL_MACHINE``.
1625 (default: None)
1627 (default: None)
1626
1628
1627 ``regkeyalt``
1629 ``regkeyalt``
1628 An alternate Windows registry key to try if the first key is not
1630 An alternate Windows registry key to try if the first key is not
1629 found. The alternate key uses the same ``regname`` and ``regappend``
1631 found. The alternate key uses the same ``regname`` and ``regappend``
1630 semantics of the primary key. The most common use for this key
1632 semantics of the primary key. The most common use for this key
1631 is to search for 32bit applications on 64bit operating systems.
1633 is to search for 32bit applications on 64bit operating systems.
1632 (default: None)
1634 (default: None)
1633
1635
1634 ``regname``
1636 ``regname``
1635 Name of value to read from specified registry key.
1637 Name of value to read from specified registry key.
1636 (default: the unnamed (default) value)
1638 (default: the unnamed (default) value)
1637
1639
1638 ``regappend``
1640 ``regappend``
1639 String to append to the value read from the registry, typically
1641 String to append to the value read from the registry, typically
1640 the executable name of the tool.
1642 the executable name of the tool.
1641 (default: None)
1643 (default: None)
1642
1644
1643 ``pager``
1645 ``pager``
1644 ---------
1646 ---------
1645
1647
1646 Setting used to control when to paginate and with what external tool. See
1648 Setting used to control when to paginate and with what external tool. See
1647 :hg:`help pager` for details.
1649 :hg:`help pager` for details.
1648
1650
1649 ``pager``
1651 ``pager``
1650 Define the external tool used as pager.
1652 Define the external tool used as pager.
1651
1653
1652 If no pager is set, Mercurial uses the environment variable $PAGER.
1654 If no pager is set, Mercurial uses the environment variable $PAGER.
1653 If neither pager.pager, nor $PAGER is set, a default pager will be
1655 If neither pager.pager, nor $PAGER is set, a default pager will be
1654 used, typically `less` on Unix and `more` on Windows. Example::
1656 used, typically `less` on Unix and `more` on Windows. Example::
1655
1657
1656 [pager]
1658 [pager]
1657 pager = less -FRX
1659 pager = less -FRX
1658
1660
1659 ``ignore``
1661 ``ignore``
1660 List of commands to disable the pager for. Example::
1662 List of commands to disable the pager for. Example::
1661
1663
1662 [pager]
1664 [pager]
1663 ignore = version, help, update
1665 ignore = version, help, update
1664
1666
1665 ``patch``
1667 ``patch``
1666 ---------
1668 ---------
1667
1669
1668 Settings used when applying patches, for instance through the 'import'
1670 Settings used when applying patches, for instance through the 'import'
1669 command or with Mercurial Queues extension.
1671 command or with Mercurial Queues extension.
1670
1672
1671 ``eol``
1673 ``eol``
1672 When set to 'strict' patch content and patched files end of lines
1674 When set to 'strict' patch content and patched files end of lines
1673 are preserved. When set to ``lf`` or ``crlf``, both files end of
1675 are preserved. When set to ``lf`` or ``crlf``, both files end of
1674 lines are ignored when patching and the result line endings are
1676 lines are ignored when patching and the result line endings are
1675 normalized to either LF (Unix) or CRLF (Windows). When set to
1677 normalized to either LF (Unix) or CRLF (Windows). When set to
1676 ``auto``, end of lines are again ignored while patching but line
1678 ``auto``, end of lines are again ignored while patching but line
1677 endings in patched files are normalized to their original setting
1679 endings in patched files are normalized to their original setting
1678 on a per-file basis. If target file does not exist or has no end
1680 on a per-file basis. If target file does not exist or has no end
1679 of line, patch line endings are preserved.
1681 of line, patch line endings are preserved.
1680 (default: strict)
1682 (default: strict)
1681
1683
1682 ``fuzz``
1684 ``fuzz``
1683 The number of lines of 'fuzz' to allow when applying patches. This
1685 The number of lines of 'fuzz' to allow when applying patches. This
1684 controls how much context the patcher is allowed to ignore when
1686 controls how much context the patcher is allowed to ignore when
1685 trying to apply a patch.
1687 trying to apply a patch.
1686 (default: 2)
1688 (default: 2)
1687
1689
1688 ``paths``
1690 ``paths``
1689 ---------
1691 ---------
1690
1692
1691 Assigns symbolic names and behavior to repositories.
1693 Assigns symbolic names and behavior to repositories.
1692
1694
1693 Options are symbolic names defining the URL or directory that is the
1695 Options are symbolic names defining the URL or directory that is the
1694 location of the repository. Example::
1696 location of the repository. Example::
1695
1697
1696 [paths]
1698 [paths]
1697 my_server = https://example.com/my_repo
1699 my_server = https://example.com/my_repo
1698 local_path = /home/me/repo
1700 local_path = /home/me/repo
1699
1701
1700 These symbolic names can be used from the command line. To pull
1702 These symbolic names can be used from the command line. To pull
1701 from ``my_server``: :hg:`pull my_server`. To push to ``local_path``:
1703 from ``my_server``: :hg:`pull my_server`. To push to ``local_path``:
1702 :hg:`push local_path`.
1704 :hg:`push local_path`.
1703
1705
1704 Options containing colons (``:``) denote sub-options that can influence
1706 Options containing colons (``:``) denote sub-options that can influence
1705 behavior for that specific path. Example::
1707 behavior for that specific path. Example::
1706
1708
1707 [paths]
1709 [paths]
1708 my_server = https://example.com/my_path
1710 my_server = https://example.com/my_path
1709 my_server:pushurl = ssh://example.com/my_path
1711 my_server:pushurl = ssh://example.com/my_path
1710
1712
1711 The following sub-options can be defined:
1713 The following sub-options can be defined:
1712
1714
1713 ``pushurl``
1715 ``pushurl``
1714 The URL to use for push operations. If not defined, the location
1716 The URL to use for push operations. If not defined, the location
1715 defined by the path's main entry is used.
1717 defined by the path's main entry is used.
1716
1718
1717 ``pushrev``
1719 ``pushrev``
1718 A revset defining which revisions to push by default.
1720 A revset defining which revisions to push by default.
1719
1721
1720 When :hg:`push` is executed without a ``-r`` argument, the revset
1722 When :hg:`push` is executed without a ``-r`` argument, the revset
1721 defined by this sub-option is evaluated to determine what to push.
1723 defined by this sub-option is evaluated to determine what to push.
1722
1724
1723 For example, a value of ``.`` will push the working directory's
1725 For example, a value of ``.`` will push the working directory's
1724 revision by default.
1726 revision by default.
1725
1727
1726 Revsets specifying bookmarks will not result in the bookmark being
1728 Revsets specifying bookmarks will not result in the bookmark being
1727 pushed.
1729 pushed.
1728
1730
1729 The following special named paths exist:
1731 The following special named paths exist:
1730
1732
1731 ``default``
1733 ``default``
1732 The URL or directory to use when no source or remote is specified.
1734 The URL or directory to use when no source or remote is specified.
1733
1735
1734 :hg:`clone` will automatically define this path to the location the
1736 :hg:`clone` will automatically define this path to the location the
1735 repository was cloned from.
1737 repository was cloned from.
1736
1738
1737 ``default-push``
1739 ``default-push``
1738 (deprecated) The URL or directory for the default :hg:`push` location.
1740 (deprecated) The URL or directory for the default :hg:`push` location.
1739 ``default:pushurl`` should be used instead.
1741 ``default:pushurl`` should be used instead.
1740
1742
1741 ``phases``
1743 ``phases``
1742 ----------
1744 ----------
1743
1745
1744 Specifies default handling of phases. See :hg:`help phases` for more
1746 Specifies default handling of phases. See :hg:`help phases` for more
1745 information about working with phases.
1747 information about working with phases.
1746
1748
1747 ``publish``
1749 ``publish``
1748 Controls draft phase behavior when working as a server. When true,
1750 Controls draft phase behavior when working as a server. When true,
1749 pushed changesets are set to public in both client and server and
1751 pushed changesets are set to public in both client and server and
1750 pulled or cloned changesets are set to public in the client.
1752 pulled or cloned changesets are set to public in the client.
1751 (default: True)
1753 (default: True)
1752
1754
1753 ``new-commit``
1755 ``new-commit``
1754 Phase of newly-created commits.
1756 Phase of newly-created commits.
1755 (default: draft)
1757 (default: draft)
1756
1758
1757 ``checksubrepos``
1759 ``checksubrepos``
1758 Check the phase of the current revision of each subrepository. Allowed
1760 Check the phase of the current revision of each subrepository. Allowed
1759 values are "ignore", "follow" and "abort". For settings other than
1761 values are "ignore", "follow" and "abort". For settings other than
1760 "ignore", the phase of the current revision of each subrepository is
1762 "ignore", the phase of the current revision of each subrepository is
1761 checked before committing the parent repository. If any of those phases is
1763 checked before committing the parent repository. If any of those phases is
1762 greater than the phase of the parent repository (e.g. if a subrepo is in a
1764 greater than the phase of the parent repository (e.g. if a subrepo is in a
1763 "secret" phase while the parent repo is in "draft" phase), the commit is
1765 "secret" phase while the parent repo is in "draft" phase), the commit is
1764 either aborted (if checksubrepos is set to "abort") or the higher phase is
1766 either aborted (if checksubrepos is set to "abort") or the higher phase is
1765 used for the parent repository commit (if set to "follow").
1767 used for the parent repository commit (if set to "follow").
1766 (default: follow)
1768 (default: follow)
1767
1769
1768
1770
1769 ``profiling``
1771 ``profiling``
1770 -------------
1772 -------------
1771
1773
1772 Specifies profiling type, format, and file output. Two profilers are
1774 Specifies profiling type, format, and file output. Two profilers are
1773 supported: an instrumenting profiler (named ``ls``), and a sampling
1775 supported: an instrumenting profiler (named ``ls``), and a sampling
1774 profiler (named ``stat``).
1776 profiler (named ``stat``).
1775
1777
1776 In this section description, 'profiling data' stands for the raw data
1778 In this section description, 'profiling data' stands for the raw data
1777 collected during profiling, while 'profiling report' stands for a
1779 collected during profiling, while 'profiling report' stands for a
1778 statistical text report generated from the profiling data.
1780 statistical text report generated from the profiling data.
1779
1781
1780 ``enabled``
1782 ``enabled``
1781 Enable the profiler.
1783 Enable the profiler.
1782 (default: false)
1784 (default: false)
1783
1785
1784 This is equivalent to passing ``--profile`` on the command line.
1786 This is equivalent to passing ``--profile`` on the command line.
1785
1787
1786 ``type``
1788 ``type``
1787 The type of profiler to use.
1789 The type of profiler to use.
1788 (default: stat)
1790 (default: stat)
1789
1791
1790 ``ls``
1792 ``ls``
1791 Use Python's built-in instrumenting profiler. This profiler
1793 Use Python's built-in instrumenting profiler. This profiler
1792 works on all platforms, but each line number it reports is the
1794 works on all platforms, but each line number it reports is the
1793 first line of a function. This restriction makes it difficult to
1795 first line of a function. This restriction makes it difficult to
1794 identify the expensive parts of a non-trivial function.
1796 identify the expensive parts of a non-trivial function.
1795 ``stat``
1797 ``stat``
1796 Use a statistical profiler, statprof. This profiler is most
1798 Use a statistical profiler, statprof. This profiler is most
1797 useful for profiling commands that run for longer than about 0.1
1799 useful for profiling commands that run for longer than about 0.1
1798 seconds.
1800 seconds.
1799
1801
1800 ``format``
1802 ``format``
1801 Profiling format. Specific to the ``ls`` instrumenting profiler.
1803 Profiling format. Specific to the ``ls`` instrumenting profiler.
1802 (default: text)
1804 (default: text)
1803
1805
1804 ``text``
1806 ``text``
1805 Generate a profiling report. When saving to a file, it should be
1807 Generate a profiling report. When saving to a file, it should be
1806 noted that only the report is saved, and the profiling data is
1808 noted that only the report is saved, and the profiling data is
1807 not kept.
1809 not kept.
1808 ``kcachegrind``
1810 ``kcachegrind``
1809 Format profiling data for kcachegrind use: when saving to a
1811 Format profiling data for kcachegrind use: when saving to a
1810 file, the generated file can directly be loaded into
1812 file, the generated file can directly be loaded into
1811 kcachegrind.
1813 kcachegrind.
1812
1814
1813 ``statformat``
1815 ``statformat``
1814 Profiling format for the ``stat`` profiler.
1816 Profiling format for the ``stat`` profiler.
1815 (default: hotpath)
1817 (default: hotpath)
1816
1818
1817 ``hotpath``
1819 ``hotpath``
1818 Show a tree-based display containing the hot path of execution (where
1820 Show a tree-based display containing the hot path of execution (where
1819 most time was spent).
1821 most time was spent).
1820 ``bymethod``
1822 ``bymethod``
1821 Show a table of methods ordered by how frequently they are active.
1823 Show a table of methods ordered by how frequently they are active.
1822 ``byline``
1824 ``byline``
1823 Show a table of lines in files ordered by how frequently they are active.
1825 Show a table of lines in files ordered by how frequently they are active.
1824 ``json``
1826 ``json``
1825 Render profiling data as JSON.
1827 Render profiling data as JSON.
1826
1828
1827 ``frequency``
1829 ``frequency``
1828 Sampling frequency. Specific to the ``stat`` sampling profiler.
1830 Sampling frequency. Specific to the ``stat`` sampling profiler.
1829 (default: 1000)
1831 (default: 1000)
1830
1832
1831 ``output``
1833 ``output``
1832 File path where profiling data or report should be saved. If the
1834 File path where profiling data or report should be saved. If the
1833 file exists, it is replaced. (default: None, data is printed on
1835 file exists, it is replaced. (default: None, data is printed on
1834 stderr)
1836 stderr)
1835
1837
1836 ``sort``
1838 ``sort``
1837 Sort field. Specific to the ``ls`` instrumenting profiler.
1839 Sort field. Specific to the ``ls`` instrumenting profiler.
1838 One of ``callcount``, ``reccallcount``, ``totaltime`` and
1840 One of ``callcount``, ``reccallcount``, ``totaltime`` and
1839 ``inlinetime``.
1841 ``inlinetime``.
1840 (default: inlinetime)
1842 (default: inlinetime)
1841
1843
1842 ``time-track``
1844 ``time-track``
1843 Control if the stat profiler track ``cpu`` or ``real`` time.
1845 Control if the stat profiler track ``cpu`` or ``real`` time.
1844 (default: ``cpu`` on Windows, otherwise ``real``)
1846 (default: ``cpu`` on Windows, otherwise ``real``)
1845
1847
1846 ``limit``
1848 ``limit``
1847 Number of lines to show. Specific to the ``ls`` instrumenting profiler.
1849 Number of lines to show. Specific to the ``ls`` instrumenting profiler.
1848 (default: 30)
1850 (default: 30)
1849
1851
1850 ``nested``
1852 ``nested``
1851 Show at most this number of lines of drill-down info after each main entry.
1853 Show at most this number of lines of drill-down info after each main entry.
1852 This can help explain the difference between Total and Inline.
1854 This can help explain the difference between Total and Inline.
1853 Specific to the ``ls`` instrumenting profiler.
1855 Specific to the ``ls`` instrumenting profiler.
1854 (default: 0)
1856 (default: 0)
1855
1857
1856 ``showmin``
1858 ``showmin``
1857 Minimum fraction of samples an entry must have for it to be displayed.
1859 Minimum fraction of samples an entry must have for it to be displayed.
1858 Can be specified as a float between ``0.0`` and ``1.0`` or can have a
1860 Can be specified as a float between ``0.0`` and ``1.0`` or can have a
1859 ``%`` afterwards to allow values up to ``100``. e.g. ``5%``.
1861 ``%`` afterwards to allow values up to ``100``. e.g. ``5%``.
1860
1862
1861 Only used by the ``stat`` profiler.
1863 Only used by the ``stat`` profiler.
1862
1864
1863 For the ``hotpath`` format, default is ``0.05``.
1865 For the ``hotpath`` format, default is ``0.05``.
1864 For the ``chrome`` format, default is ``0.005``.
1866 For the ``chrome`` format, default is ``0.005``.
1865
1867
1866 The option is unused on other formats.
1868 The option is unused on other formats.
1867
1869
1868 ``showmax``
1870 ``showmax``
1869 Maximum fraction of samples an entry can have before it is ignored in
1871 Maximum fraction of samples an entry can have before it is ignored in
1870 display. Values format is the same as ``showmin``.
1872 display. Values format is the same as ``showmin``.
1871
1873
1872 Only used by the ``stat`` profiler.
1874 Only used by the ``stat`` profiler.
1873
1875
1874 For the ``chrome`` format, default is ``0.999``.
1876 For the ``chrome`` format, default is ``0.999``.
1875
1877
1876 The option is unused on other formats.
1878 The option is unused on other formats.
1877
1879
1878 ``showtime``
1880 ``showtime``
1879 Show time taken as absolute durations, in addition to percentages.
1881 Show time taken as absolute durations, in addition to percentages.
1880 Only used by the ``hotpath`` format.
1882 Only used by the ``hotpath`` format.
1881 (default: true)
1883 (default: true)
1882
1884
1883 ``progress``
1885 ``progress``
1884 ------------
1886 ------------
1885
1887
1886 Mercurial commands can draw progress bars that are as informative as
1888 Mercurial commands can draw progress bars that are as informative as
1887 possible. Some progress bars only offer indeterminate information, while others
1889 possible. Some progress bars only offer indeterminate information, while others
1888 have a definite end point.
1890 have a definite end point.
1889
1891
1890 ``debug``
1892 ``debug``
1891 Whether to print debug info when updating the progress bar. (default: False)
1893 Whether to print debug info when updating the progress bar. (default: False)
1892
1894
1893 ``delay``
1895 ``delay``
1894 Number of seconds (float) before showing the progress bar. (default: 3)
1896 Number of seconds (float) before showing the progress bar. (default: 3)
1895
1897
1896 ``changedelay``
1898 ``changedelay``
1897 Minimum delay before showing a new topic. When set to less than 3 * refresh,
1899 Minimum delay before showing a new topic. When set to less than 3 * refresh,
1898 that value will be used instead. (default: 1)
1900 that value will be used instead. (default: 1)
1899
1901
1900 ``estimateinterval``
1902 ``estimateinterval``
1901 Maximum sampling interval in seconds for speed and estimated time
1903 Maximum sampling interval in seconds for speed and estimated time
1902 calculation. (default: 60)
1904 calculation. (default: 60)
1903
1905
1904 ``refresh``
1906 ``refresh``
1905 Time in seconds between refreshes of the progress bar. (default: 0.1)
1907 Time in seconds between refreshes of the progress bar. (default: 0.1)
1906
1908
1907 ``format``
1909 ``format``
1908 Format of the progress bar.
1910 Format of the progress bar.
1909
1911
1910 Valid entries for the format field are ``topic``, ``bar``, ``number``,
1912 Valid entries for the format field are ``topic``, ``bar``, ``number``,
1911 ``unit``, ``estimate``, ``speed``, and ``item``. ``item`` defaults to the
1913 ``unit``, ``estimate``, ``speed``, and ``item``. ``item`` defaults to the
1912 last 20 characters of the item, but this can be changed by adding either
1914 last 20 characters of the item, but this can be changed by adding either
1913 ``-<num>`` which would take the last num characters, or ``+<num>`` for the
1915 ``-<num>`` which would take the last num characters, or ``+<num>`` for the
1914 first num characters.
1916 first num characters.
1915
1917
1916 (default: topic bar number estimate)
1918 (default: topic bar number estimate)
1917
1919
1918 ``width``
1920 ``width``
1919 If set, the maximum width of the progress information (that is, min(width,
1921 If set, the maximum width of the progress information (that is, min(width,
1920 term width) will be used).
1922 term width) will be used).
1921
1923
1922 ``clear-complete``
1924 ``clear-complete``
1923 Clear the progress bar after it's done. (default: True)
1925 Clear the progress bar after it's done. (default: True)
1924
1926
1925 ``disable``
1927 ``disable``
1926 If true, don't show a progress bar.
1928 If true, don't show a progress bar.
1927
1929
1928 ``assume-tty``
1930 ``assume-tty``
1929 If true, ALWAYS show a progress bar, unless disable is given.
1931 If true, ALWAYS show a progress bar, unless disable is given.
1930
1932
1931 ``rebase``
1933 ``rebase``
1932 ----------
1934 ----------
1933
1935
1934 ``evolution.allowdivergence``
1936 ``evolution.allowdivergence``
1935 Default to False, when True allow creating divergence when performing
1937 Default to False, when True allow creating divergence when performing
1936 rebase of obsolete changesets.
1938 rebase of obsolete changesets.
1937
1939
1938 ``revsetalias``
1940 ``revsetalias``
1939 ---------------
1941 ---------------
1940
1942
1941 Alias definitions for revsets. See :hg:`help revsets` for details.
1943 Alias definitions for revsets. See :hg:`help revsets` for details.
1942
1944
1943 ``rewrite``
1945 ``rewrite``
1944 -----------
1946 -----------
1945
1947
1946 ``backup-bundle``
1948 ``backup-bundle``
1947 Whether to save stripped changesets to a bundle file. (default: True)
1949 Whether to save stripped changesets to a bundle file. (default: True)
1948
1950
1949 ``update-timestamp``
1951 ``update-timestamp``
1950 If true, updates the date and time of the changeset to current. It is only
1952 If true, updates the date and time of the changeset to current. It is only
1951 applicable for `hg amend`, `hg commit --amend` and `hg uncommit` in the
1953 applicable for `hg amend`, `hg commit --amend` and `hg uncommit` in the
1952 current version.
1954 current version.
1953
1955
1954 ``empty-successor``
1956 ``empty-successor``
1955
1957
1956 Control what happens with empty successors that are the result of rewrite
1958 Control what happens with empty successors that are the result of rewrite
1957 operations. If set to ``skip``, the successor is not created. If set to
1959 operations. If set to ``skip``, the successor is not created. If set to
1958 ``keep``, the empty successor is created and kept.
1960 ``keep``, the empty successor is created and kept.
1959
1961
1960 Currently, only the rebase and absorb commands consider this configuration.
1962 Currently, only the rebase and absorb commands consider this configuration.
1961 (EXPERIMENTAL)
1963 (EXPERIMENTAL)
1962
1964
1963 ``share``
1965 ``share``
1964 ---------
1966 ---------
1965
1967
1966 ``safe-mismatch.source-safe``
1968 ``safe-mismatch.source-safe``
1967
1969
1968 Controls what happens when the shared repository does not use the
1970 Controls what happens when the shared repository does not use the
1969 share-safe mechanism but its source repository does.
1971 share-safe mechanism but its source repository does.
1970
1972
1971 Possible values are `abort` (default), `allow`, `upgrade-abort` and
1973 Possible values are `abort` (default), `allow`, `upgrade-abort` and
1972 `upgrade-abort`.
1974 `upgrade-abort`.
1973
1975
1974 ``abort``
1976 ``abort``
1975 Disallows running any command and aborts
1977 Disallows running any command and aborts
1976 ``allow``
1978 ``allow``
1977 Respects the feature presence in the share source
1979 Respects the feature presence in the share source
1978 ``upgrade-abort``
1980 ``upgrade-abort``
1979 tries to upgrade the share to use share-safe; if it fails, aborts
1981 tries to upgrade the share to use share-safe; if it fails, aborts
1980 ``upgrade-allow``
1982 ``upgrade-allow``
1981 tries to upgrade the share; if it fails, continue by
1983 tries to upgrade the share; if it fails, continue by
1982 respecting the share source setting
1984 respecting the share source setting
1983
1985
1984 Check :hg:`help config format.use-share-safe` for details about the
1986 Check :hg:`help config format.use-share-safe` for details about the
1985 share-safe feature.
1987 share-safe feature.
1986
1988
1987 ``safe-mismatch.source-safe.warn``
1989 ``safe-mismatch.source-safe.warn``
1988 Shows a warning on operations if the shared repository does not use
1990 Shows a warning on operations if the shared repository does not use
1989 share-safe, but the source repository does.
1991 share-safe, but the source repository does.
1990 (default: True)
1992 (default: True)
1991
1993
1992 ``safe-mismatch.source-not-safe``
1994 ``safe-mismatch.source-not-safe``
1993
1995
1994 Controls what happens when the shared repository uses the share-safe
1996 Controls what happens when the shared repository uses the share-safe
1995 mechanism but its source does not.
1997 mechanism but its source does not.
1996
1998
1997 Possible values are `abort` (default), `allow`, `downgrade-abort` and
1999 Possible values are `abort` (default), `allow`, `downgrade-abort` and
1998 `downgrade-abort`.
2000 `downgrade-abort`.
1999
2001
2000 ``abort``
2002 ``abort``
2001 Disallows running any command and aborts
2003 Disallows running any command and aborts
2002 ``allow``
2004 ``allow``
2003 Respects the feature presence in the share source
2005 Respects the feature presence in the share source
2004 ``downgrade-abort``
2006 ``downgrade-abort``
2005 tries to downgrade the share to not use share-safe; if it fails, aborts
2007 tries to downgrade the share to not use share-safe; if it fails, aborts
2006 ``downgrade-allow``
2008 ``downgrade-allow``
2007 tries to downgrade the share to not use share-safe;
2009 tries to downgrade the share to not use share-safe;
2008 if it fails, continue by respecting the shared source setting
2010 if it fails, continue by respecting the shared source setting
2009
2011
2010 Check :hg:`help config format.use-share-safe` for details about the
2012 Check :hg:`help config format.use-share-safe` for details about the
2011 share-safe feature.
2013 share-safe feature.
2012
2014
2013 ``safe-mismatch.source-not-safe.warn``
2015 ``safe-mismatch.source-not-safe.warn``
2014 Shows a warning on operations if the shared repository uses share-safe,
2016 Shows a warning on operations if the shared repository uses share-safe,
2015 but the source repository does not.
2017 but the source repository does not.
2016 (default: True)
2018 (default: True)
2017
2019
2018 ``storage``
2020 ``storage``
2019 -----------
2021 -----------
2020
2022
2021 Control the strategy Mercurial uses internally to store history. Options in this
2023 Control the strategy Mercurial uses internally to store history. Options in this
2022 category impact performance and repository size.
2024 category impact performance and repository size.
2023
2025
2024 ``revlog.optimize-delta-parent-choice``
2026 ``revlog.optimize-delta-parent-choice``
2025 When storing a merge revision, both parents will be equally considered as
2027 When storing a merge revision, both parents will be equally considered as
2026 a possible delta base. This results in better delta selection and improved
2028 a possible delta base. This results in better delta selection and improved
2027 revlog compression. This option is enabled by default.
2029 revlog compression. This option is enabled by default.
2028
2030
2029 Turning this option off can result in large increase of repository size for
2031 Turning this option off can result in large increase of repository size for
2030 repository with many merges.
2032 repository with many merges.
2031
2033
2032 ``revlog.persistent-nodemap.mmap``
2034 ``revlog.persistent-nodemap.mmap``
2033 Whether to use the Operating System "memory mapping" feature (when
2035 Whether to use the Operating System "memory mapping" feature (when
2034 possible) to access the persistent nodemap data. This improve performance
2036 possible) to access the persistent nodemap data. This improve performance
2035 and reduce memory pressure.
2037 and reduce memory pressure.
2036
2038
2037 Default to True.
2039 Default to True.
2038
2040
2039 For details on the "persistent-nodemap" feature, see:
2041 For details on the "persistent-nodemap" feature, see:
2040 :hg:`help config format.use-persistent-nodemap`.
2042 :hg:`help config format.use-persistent-nodemap`.
2041
2043
2042 ``revlog.persistent-nodemap.slow-path``
2044 ``revlog.persistent-nodemap.slow-path``
2043 Control the behavior of Merucrial when using a repository with "persistent"
2045 Control the behavior of Merucrial when using a repository with "persistent"
2044 nodemap with an installation of Mercurial without a fast implementation for
2046 nodemap with an installation of Mercurial without a fast implementation for
2045 the feature:
2047 the feature:
2046
2048
2047 ``allow``: Silently use the slower implementation to access the repository.
2049 ``allow``: Silently use the slower implementation to access the repository.
2048 ``warn``: Warn, but use the slower implementation to access the repository.
2050 ``warn``: Warn, but use the slower implementation to access the repository.
2049 ``abort``: Prevent access to such repositories. (This is the default)
2051 ``abort``: Prevent access to such repositories. (This is the default)
2050
2052
2051 For details on the "persistent-nodemap" feature, see:
2053 For details on the "persistent-nodemap" feature, see:
2052 :hg:`help config format.use-persistent-nodemap`.
2054 :hg:`help config format.use-persistent-nodemap`.
2053
2055
2054 ``revlog.reuse-external-delta-parent``
2056 ``revlog.reuse-external-delta-parent``
2055 Control the order in which delta parents are considered when adding new
2057 Control the order in which delta parents are considered when adding new
2056 revisions from an external source.
2058 revisions from an external source.
2057 (typically: apply bundle from `hg pull` or `hg push`).
2059 (typically: apply bundle from `hg pull` or `hg push`).
2058
2060
2059 New revisions are usually provided as a delta against other revisions. By
2061 New revisions are usually provided as a delta against other revisions. By
2060 default, Mercurial will try to reuse this delta first, therefore using the
2062 default, Mercurial will try to reuse this delta first, therefore using the
2061 same "delta parent" as the source. Directly using delta's from the source
2063 same "delta parent" as the source. Directly using delta's from the source
2062 reduces CPU usage and usually speeds up operation. However, in some case,
2064 reduces CPU usage and usually speeds up operation. However, in some case,
2063 the source might have sub-optimal delta bases and forcing their reevaluation
2065 the source might have sub-optimal delta bases and forcing their reevaluation
2064 is useful. For example, pushes from an old client could have sub-optimal
2066 is useful. For example, pushes from an old client could have sub-optimal
2065 delta's parent that the server want to optimize. (lack of general delta, bad
2067 delta's parent that the server want to optimize. (lack of general delta, bad
2066 parents, choice, lack of sparse-revlog, etc).
2068 parents, choice, lack of sparse-revlog, etc).
2067
2069
2068 This option is enabled by default. Turning it off will ensure bad delta
2070 This option is enabled by default. Turning it off will ensure bad delta
2069 parent choices from older client do not propagate to this repository, at
2071 parent choices from older client do not propagate to this repository, at
2070 the cost of a small increase in CPU consumption.
2072 the cost of a small increase in CPU consumption.
2071
2073
2072 Note: this option only control the order in which delta parents are
2074 Note: this option only control the order in which delta parents are
2073 considered. Even when disabled, the existing delta from the source will be
2075 considered. Even when disabled, the existing delta from the source will be
2074 reused if the same delta parent is selected.
2076 reused if the same delta parent is selected.
2075
2077
2076 ``revlog.reuse-external-delta``
2078 ``revlog.reuse-external-delta``
2077 Control the reuse of delta from external source.
2079 Control the reuse of delta from external source.
2078 (typically: apply bundle from `hg pull` or `hg push`).
2080 (typically: apply bundle from `hg pull` or `hg push`).
2079
2081
2080 New revisions are usually provided as a delta against another revision. By
2082 New revisions are usually provided as a delta against another revision. By
2081 default, Mercurial will not recompute the same delta again, trusting
2083 default, Mercurial will not recompute the same delta again, trusting
2082 externally provided deltas. There have been rare cases of small adjustment
2084 externally provided deltas. There have been rare cases of small adjustment
2083 to the diffing algorithm in the past. So in some rare case, recomputing
2085 to the diffing algorithm in the past. So in some rare case, recomputing
2084 delta provided by ancient clients can provides better results. Disabling
2086 delta provided by ancient clients can provides better results. Disabling
2085 this option means going through a full delta recomputation for all incoming
2087 this option means going through a full delta recomputation for all incoming
2086 revisions. It means a large increase in CPU usage and will slow operations
2088 revisions. It means a large increase in CPU usage and will slow operations
2087 down.
2089 down.
2088
2090
2089 This option is enabled by default. When disabled, it also disables the
2091 This option is enabled by default. When disabled, it also disables the
2090 related ``storage.revlog.reuse-external-delta-parent`` option.
2092 related ``storage.revlog.reuse-external-delta-parent`` option.
2091
2093
2092 ``revlog.zlib.level``
2094 ``revlog.zlib.level``
2093 Zlib compression level used when storing data into the repository. Accepted
2095 Zlib compression level used when storing data into the repository. Accepted
2094 Value range from 1 (lowest compression) to 9 (highest compression). Zlib
2096 Value range from 1 (lowest compression) to 9 (highest compression). Zlib
2095 default value is 6.
2097 default value is 6.
2096
2098
2097
2099
2098 ``revlog.zstd.level``
2100 ``revlog.zstd.level``
2099 zstd compression level used when storing data into the repository. Accepted
2101 zstd compression level used when storing data into the repository. Accepted
2100 Value range from 1 (lowest compression) to 22 (highest compression).
2102 Value range from 1 (lowest compression) to 22 (highest compression).
2101 (default 3)
2103 (default 3)
2102
2104
2103 ``server``
2105 ``server``
2104 ----------
2106 ----------
2105
2107
2106 Controls generic server settings.
2108 Controls generic server settings.
2107
2109
2108 ``bookmarks-pushkey-compat``
2110 ``bookmarks-pushkey-compat``
2109 Trigger pushkey hook when being pushed bookmark updates. This config exist
2111 Trigger pushkey hook when being pushed bookmark updates. This config exist
2110 for compatibility purpose (default to True)
2112 for compatibility purpose (default to True)
2111
2113
2112 If you use ``pushkey`` and ``pre-pushkey`` hooks to control bookmark
2114 If you use ``pushkey`` and ``pre-pushkey`` hooks to control bookmark
2113 movement we recommend you migrate them to ``txnclose-bookmark`` and
2115 movement we recommend you migrate them to ``txnclose-bookmark`` and
2114 ``pretxnclose-bookmark``.
2116 ``pretxnclose-bookmark``.
2115
2117
2116 ``compressionengines``
2118 ``compressionengines``
2117 List of compression engines and their relative priority to advertise
2119 List of compression engines and their relative priority to advertise
2118 to clients.
2120 to clients.
2119
2121
2120 The order of compression engines determines their priority, the first
2122 The order of compression engines determines their priority, the first
2121 having the highest priority. If a compression engine is not listed
2123 having the highest priority. If a compression engine is not listed
2122 here, it won't be advertised to clients.
2124 here, it won't be advertised to clients.
2123
2125
2124 If not set (the default), built-in defaults are used. Run
2126 If not set (the default), built-in defaults are used. Run
2125 :hg:`debuginstall` to list available compression engines and their
2127 :hg:`debuginstall` to list available compression engines and their
2126 default wire protocol priority.
2128 default wire protocol priority.
2127
2129
2128 Older Mercurial clients only support zlib compression and this setting
2130 Older Mercurial clients only support zlib compression and this setting
2129 has no effect for legacy clients.
2131 has no effect for legacy clients.
2130
2132
2131 ``uncompressed``
2133 ``uncompressed``
2132 Whether to allow clients to clone a repository using the
2134 Whether to allow clients to clone a repository using the
2133 uncompressed streaming protocol. This transfers about 40% more
2135 uncompressed streaming protocol. This transfers about 40% more
2134 data than a regular clone, but uses less memory and CPU on both
2136 data than a regular clone, but uses less memory and CPU on both
2135 server and client. Over a LAN (100 Mbps or better) or a very fast
2137 server and client. Over a LAN (100 Mbps or better) or a very fast
2136 WAN, an uncompressed streaming clone is a lot faster (~10x) than a
2138 WAN, an uncompressed streaming clone is a lot faster (~10x) than a
2137 regular clone. Over most WAN connections (anything slower than
2139 regular clone. Over most WAN connections (anything slower than
2138 about 6 Mbps), uncompressed streaming is slower, because of the
2140 about 6 Mbps), uncompressed streaming is slower, because of the
2139 extra data transfer overhead. This mode will also temporarily hold
2141 extra data transfer overhead. This mode will also temporarily hold
2140 the write lock while determining what data to transfer.
2142 the write lock while determining what data to transfer.
2141 (default: True)
2143 (default: True)
2142
2144
2143 ``uncompressedallowsecret``
2145 ``uncompressedallowsecret``
2144 Whether to allow stream clones when the repository contains secret
2146 Whether to allow stream clones when the repository contains secret
2145 changesets. (default: False)
2147 changesets. (default: False)
2146
2148
2147 ``preferuncompressed``
2149 ``preferuncompressed``
2148 When set, clients will try to use the uncompressed streaming
2150 When set, clients will try to use the uncompressed streaming
2149 protocol. (default: False)
2151 protocol. (default: False)
2150
2152
2151 ``disablefullbundle``
2153 ``disablefullbundle``
2152 When set, servers will refuse attempts to do pull-based clones.
2154 When set, servers will refuse attempts to do pull-based clones.
2153 If this option is set, ``preferuncompressed`` and/or clone bundles
2155 If this option is set, ``preferuncompressed`` and/or clone bundles
2154 are highly recommended. Partial clones will still be allowed.
2156 are highly recommended. Partial clones will still be allowed.
2155 (default: False)
2157 (default: False)
2156
2158
2157 ``streamunbundle``
2159 ``streamunbundle``
2158 When set, servers will apply data sent from the client directly,
2160 When set, servers will apply data sent from the client directly,
2159 otherwise it will be written to a temporary file first. This option
2161 otherwise it will be written to a temporary file first. This option
2160 effectively prevents concurrent pushes.
2162 effectively prevents concurrent pushes.
2161
2163
2162 ``pullbundle``
2164 ``pullbundle``
2163 When set, the server will check pullbundle.manifest for bundles
2165 When set, the server will check pullbundle.manifest for bundles
2164 covering the requested heads and common nodes. The first matching
2166 covering the requested heads and common nodes. The first matching
2165 entry will be streamed to the client.
2167 entry will be streamed to the client.
2166
2168
2167 For HTTP transport, the stream will still use zlib compression
2169 For HTTP transport, the stream will still use zlib compression
2168 for older clients.
2170 for older clients.
2169
2171
2170 ``concurrent-push-mode``
2172 ``concurrent-push-mode``
2171 Level of allowed race condition between two pushing clients.
2173 Level of allowed race condition between two pushing clients.
2172
2174
2173 - 'strict': push is abort if another client touched the repository
2175 - 'strict': push is abort if another client touched the repository
2174 while the push was preparing.
2176 while the push was preparing.
2175 - 'check-related': push is only aborted if it affects head that got also
2177 - 'check-related': push is only aborted if it affects head that got also
2176 affected while the push was preparing. (default since 5.4)
2178 affected while the push was preparing. (default since 5.4)
2177
2179
2178 'check-related' only takes effect for compatible clients (version
2180 'check-related' only takes effect for compatible clients (version
2179 4.3 and later). Older clients will use 'strict'.
2181 4.3 and later). Older clients will use 'strict'.
2180
2182
2181 ``validate``
2183 ``validate``
2182 Whether to validate the completeness of pushed changesets by
2184 Whether to validate the completeness of pushed changesets by
2183 checking that all new file revisions specified in manifests are
2185 checking that all new file revisions specified in manifests are
2184 present. (default: False)
2186 present. (default: False)
2185
2187
2186 ``maxhttpheaderlen``
2188 ``maxhttpheaderlen``
2187 Instruct HTTP clients not to send request headers longer than this
2189 Instruct HTTP clients not to send request headers longer than this
2188 many bytes. (default: 1024)
2190 many bytes. (default: 1024)
2189
2191
2190 ``bundle1``
2192 ``bundle1``
2191 Whether to allow clients to push and pull using the legacy bundle1
2193 Whether to allow clients to push and pull using the legacy bundle1
2192 exchange format. (default: True)
2194 exchange format. (default: True)
2193
2195
2194 ``bundle1gd``
2196 ``bundle1gd``
2195 Like ``bundle1`` but only used if the repository is using the
2197 Like ``bundle1`` but only used if the repository is using the
2196 *generaldelta* storage format. (default: True)
2198 *generaldelta* storage format. (default: True)
2197
2199
2198 ``bundle1.push``
2200 ``bundle1.push``
2199 Whether to allow clients to push using the legacy bundle1 exchange
2201 Whether to allow clients to push using the legacy bundle1 exchange
2200 format. (default: True)
2202 format. (default: True)
2201
2203
2202 ``bundle1gd.push``
2204 ``bundle1gd.push``
2203 Like ``bundle1.push`` but only used if the repository is using the
2205 Like ``bundle1.push`` but only used if the repository is using the
2204 *generaldelta* storage format. (default: True)
2206 *generaldelta* storage format. (default: True)
2205
2207
2206 ``bundle1.pull``
2208 ``bundle1.pull``
2207 Whether to allow clients to pull using the legacy bundle1 exchange
2209 Whether to allow clients to pull using the legacy bundle1 exchange
2208 format. (default: True)
2210 format. (default: True)
2209
2211
2210 ``bundle1gd.pull``
2212 ``bundle1gd.pull``
2211 Like ``bundle1.pull`` but only used if the repository is using the
2213 Like ``bundle1.pull`` but only used if the repository is using the
2212 *generaldelta* storage format. (default: True)
2214 *generaldelta* storage format. (default: True)
2213
2215
2214 Large repositories using the *generaldelta* storage format should
2216 Large repositories using the *generaldelta* storage format should
2215 consider setting this option because converting *generaldelta*
2217 consider setting this option because converting *generaldelta*
2216 repositories to the exchange format required by the bundle1 data
2218 repositories to the exchange format required by the bundle1 data
2217 format can consume a lot of CPU.
2219 format can consume a lot of CPU.
2218
2220
2219 ``bundle2.stream``
2221 ``bundle2.stream``
2220 Whether to allow clients to pull using the bundle2 streaming protocol.
2222 Whether to allow clients to pull using the bundle2 streaming protocol.
2221 (default: True)
2223 (default: True)
2222
2224
2223 ``zliblevel``
2225 ``zliblevel``
2224 Integer between ``-1`` and ``9`` that controls the zlib compression level
2226 Integer between ``-1`` and ``9`` that controls the zlib compression level
2225 for wire protocol commands that send zlib compressed output (notably the
2227 for wire protocol commands that send zlib compressed output (notably the
2226 commands that send repository history data).
2228 commands that send repository history data).
2227
2229
2228 The default (``-1``) uses the default zlib compression level, which is
2230 The default (``-1``) uses the default zlib compression level, which is
2229 likely equivalent to ``6``. ``0`` means no compression. ``9`` means
2231 likely equivalent to ``6``. ``0`` means no compression. ``9`` means
2230 maximum compression.
2232 maximum compression.
2231
2233
2232 Setting this option allows server operators to make trade-offs between
2234 Setting this option allows server operators to make trade-offs between
2233 bandwidth and CPU used. Lowering the compression lowers CPU utilization
2235 bandwidth and CPU used. Lowering the compression lowers CPU utilization
2234 but sends more bytes to clients.
2236 but sends more bytes to clients.
2235
2237
2236 This option only impacts the HTTP server.
2238 This option only impacts the HTTP server.
2237
2239
2238 ``zstdlevel``
2240 ``zstdlevel``
2239 Integer between ``1`` and ``22`` that controls the zstd compression level
2241 Integer between ``1`` and ``22`` that controls the zstd compression level
2240 for wire protocol commands. ``1`` is the minimal amount of compression and
2242 for wire protocol commands. ``1`` is the minimal amount of compression and
2241 ``22`` is the highest amount of compression.
2243 ``22`` is the highest amount of compression.
2242
2244
2243 The default (``3``) should be significantly faster than zlib while likely
2245 The default (``3``) should be significantly faster than zlib while likely
2244 delivering better compression ratios.
2246 delivering better compression ratios.
2245
2247
2246 This option only impacts the HTTP server.
2248 This option only impacts the HTTP server.
2247
2249
2248 See also ``server.zliblevel``.
2250 See also ``server.zliblevel``.
2249
2251
2250 ``view``
2252 ``view``
2251 Repository filter used when exchanging revisions with the peer.
2253 Repository filter used when exchanging revisions with the peer.
2252
2254
2253 The default view (``served``) excludes secret and hidden changesets.
2255 The default view (``served``) excludes secret and hidden changesets.
2254 Another useful value is ``immutable`` (no draft, secret or hidden
2256 Another useful value is ``immutable`` (no draft, secret or hidden
2255 changesets). (EXPERIMENTAL)
2257 changesets). (EXPERIMENTAL)
2256
2258
2257 ``smtp``
2259 ``smtp``
2258 --------
2260 --------
2259
2261
2260 Configuration for extensions that need to send email messages.
2262 Configuration for extensions that need to send email messages.
2261
2263
2262 ``host``
2264 ``host``
2263 Host name of mail server, e.g. "mail.example.com".
2265 Host name of mail server, e.g. "mail.example.com".
2264
2266
2265 ``port``
2267 ``port``
2266 Optional. Port to connect to on mail server. (default: 465 if
2268 Optional. Port to connect to on mail server. (default: 465 if
2267 ``tls`` is smtps; 25 otherwise)
2269 ``tls`` is smtps; 25 otherwise)
2268
2270
2269 ``tls``
2271 ``tls``
2270 Optional. Method to enable TLS when connecting to mail server: starttls,
2272 Optional. Method to enable TLS when connecting to mail server: starttls,
2271 smtps or none. (default: none)
2273 smtps or none. (default: none)
2272
2274
2273 ``username``
2275 ``username``
2274 Optional. User name for authenticating with the SMTP server.
2276 Optional. User name for authenticating with the SMTP server.
2275 (default: None)
2277 (default: None)
2276
2278
2277 ``password``
2279 ``password``
2278 Optional. Password for authenticating with the SMTP server. If not
2280 Optional. Password for authenticating with the SMTP server. If not
2279 specified, interactive sessions will prompt the user for a
2281 specified, interactive sessions will prompt the user for a
2280 password; non-interactive sessions will fail. (default: None)
2282 password; non-interactive sessions will fail. (default: None)
2281
2283
2282 ``local_hostname``
2284 ``local_hostname``
2283 Optional. The hostname that the sender can use to identify
2285 Optional. The hostname that the sender can use to identify
2284 itself to the MTA.
2286 itself to the MTA.
2285
2287
2286
2288
2287 ``subpaths``
2289 ``subpaths``
2288 ------------
2290 ------------
2289
2291
2290 Subrepository source URLs can go stale if a remote server changes name
2292 Subrepository source URLs can go stale if a remote server changes name
2291 or becomes temporarily unavailable. This section lets you define
2293 or becomes temporarily unavailable. This section lets you define
2292 rewrite rules of the form::
2294 rewrite rules of the form::
2293
2295
2294 <pattern> = <replacement>
2296 <pattern> = <replacement>
2295
2297
2296 where ``pattern`` is a regular expression matching a subrepository
2298 where ``pattern`` is a regular expression matching a subrepository
2297 source URL and ``replacement`` is the replacement string used to
2299 source URL and ``replacement`` is the replacement string used to
2298 rewrite it. Groups can be matched in ``pattern`` and referenced in
2300 rewrite it. Groups can be matched in ``pattern`` and referenced in
2299 ``replacements``. For instance::
2301 ``replacements``. For instance::
2300
2302
2301 http://server/(.*)-hg/ = http://hg.server/\1/
2303 http://server/(.*)-hg/ = http://hg.server/\1/
2302
2304
2303 rewrites ``http://server/foo-hg/`` into ``http://hg.server/foo/``.
2305 rewrites ``http://server/foo-hg/`` into ``http://hg.server/foo/``.
2304
2306
2305 Relative subrepository paths are first made absolute, and the
2307 Relative subrepository paths are first made absolute, and the
2306 rewrite rules are then applied on the full (absolute) path. If ``pattern``
2308 rewrite rules are then applied on the full (absolute) path. If ``pattern``
2307 doesn't match the full path, an attempt is made to apply it on the
2309 doesn't match the full path, an attempt is made to apply it on the
2308 relative path alone. The rules are applied in definition order.
2310 relative path alone. The rules are applied in definition order.
2309
2311
2310 ``subrepos``
2312 ``subrepos``
2311 ------------
2313 ------------
2312
2314
2313 This section contains options that control the behavior of the
2315 This section contains options that control the behavior of the
2314 subrepositories feature. See also :hg:`help subrepos`.
2316 subrepositories feature. See also :hg:`help subrepos`.
2315
2317
2316 Security note: auditing in Mercurial is known to be insufficient to
2318 Security note: auditing in Mercurial is known to be insufficient to
2317 prevent clone-time code execution with carefully constructed Git
2319 prevent clone-time code execution with carefully constructed Git
2318 subrepos. It is unknown if a similar detect is present in Subversion
2320 subrepos. It is unknown if a similar detect is present in Subversion
2319 subrepos. Both Git and Subversion subrepos are disabled by default
2321 subrepos. Both Git and Subversion subrepos are disabled by default
2320 out of security concerns. These subrepo types can be enabled using
2322 out of security concerns. These subrepo types can be enabled using
2321 the respective options below.
2323 the respective options below.
2322
2324
2323 ``allowed``
2325 ``allowed``
2324 Whether subrepositories are allowed in the working directory.
2326 Whether subrepositories are allowed in the working directory.
2325
2327
2326 When false, commands involving subrepositories (like :hg:`update`)
2328 When false, commands involving subrepositories (like :hg:`update`)
2327 will fail for all subrepository types.
2329 will fail for all subrepository types.
2328 (default: true)
2330 (default: true)
2329
2331
2330 ``hg:allowed``
2332 ``hg:allowed``
2331 Whether Mercurial subrepositories are allowed in the working
2333 Whether Mercurial subrepositories are allowed in the working
2332 directory. This option only has an effect if ``subrepos.allowed``
2334 directory. This option only has an effect if ``subrepos.allowed``
2333 is true.
2335 is true.
2334 (default: true)
2336 (default: true)
2335
2337
2336 ``git:allowed``
2338 ``git:allowed``
2337 Whether Git subrepositories are allowed in the working directory.
2339 Whether Git subrepositories are allowed in the working directory.
2338 This option only has an effect if ``subrepos.allowed`` is true.
2340 This option only has an effect if ``subrepos.allowed`` is true.
2339
2341
2340 See the security note above before enabling Git subrepos.
2342 See the security note above before enabling Git subrepos.
2341 (default: false)
2343 (default: false)
2342
2344
2343 ``svn:allowed``
2345 ``svn:allowed``
2344 Whether Subversion subrepositories are allowed in the working
2346 Whether Subversion subrepositories are allowed in the working
2345 directory. This option only has an effect if ``subrepos.allowed``
2347 directory. This option only has an effect if ``subrepos.allowed``
2346 is true.
2348 is true.
2347
2349
2348 See the security note above before enabling Subversion subrepos.
2350 See the security note above before enabling Subversion subrepos.
2349 (default: false)
2351 (default: false)
2350
2352
2351 ``templatealias``
2353 ``templatealias``
2352 -----------------
2354 -----------------
2353
2355
2354 Alias definitions for templates. See :hg:`help templates` for details.
2356 Alias definitions for templates. See :hg:`help templates` for details.
2355
2357
2356 ``templates``
2358 ``templates``
2357 -------------
2359 -------------
2358
2360
2359 Use the ``[templates]`` section to define template strings.
2361 Use the ``[templates]`` section to define template strings.
2360 See :hg:`help templates` for details.
2362 See :hg:`help templates` for details.
2361
2363
2362 ``trusted``
2364 ``trusted``
2363 -----------
2365 -----------
2364
2366
2365 Mercurial will not use the settings in the
2367 Mercurial will not use the settings in the
2366 ``.hg/hgrc`` file from a repository if it doesn't belong to a trusted
2368 ``.hg/hgrc`` file from a repository if it doesn't belong to a trusted
2367 user or to a trusted group, as various hgrc features allow arbitrary
2369 user or to a trusted group, as various hgrc features allow arbitrary
2368 commands to be run. This issue is often encountered when configuring
2370 commands to be run. This issue is often encountered when configuring
2369 hooks or extensions for shared repositories or servers. However,
2371 hooks or extensions for shared repositories or servers. However,
2370 the web interface will use some safe settings from the ``[web]``
2372 the web interface will use some safe settings from the ``[web]``
2371 section.
2373 section.
2372
2374
2373 This section specifies what users and groups are trusted. The
2375 This section specifies what users and groups are trusted. The
2374 current user is always trusted. To trust everybody, list a user or a
2376 current user is always trusted. To trust everybody, list a user or a
2375 group with name ``*``. These settings must be placed in an
2377 group with name ``*``. These settings must be placed in an
2376 *already-trusted file* to take effect, such as ``$HOME/.hgrc`` of the
2378 *already-trusted file* to take effect, such as ``$HOME/.hgrc`` of the
2377 user or service running Mercurial.
2379 user or service running Mercurial.
2378
2380
2379 ``users``
2381 ``users``
2380 Comma-separated list of trusted users.
2382 Comma-separated list of trusted users.
2381
2383
2382 ``groups``
2384 ``groups``
2383 Comma-separated list of trusted groups.
2385 Comma-separated list of trusted groups.
2384
2386
2385
2387
2386 ``ui``
2388 ``ui``
2387 ------
2389 ------
2388
2390
2389 User interface controls.
2391 User interface controls.
2390
2392
2391 ``archivemeta``
2393 ``archivemeta``
2392 Whether to include the .hg_archival.txt file containing meta data
2394 Whether to include the .hg_archival.txt file containing meta data
2393 (hashes for the repository base and for tip) in archives created
2395 (hashes for the repository base and for tip) in archives created
2394 by the :hg:`archive` command or downloaded via hgweb.
2396 by the :hg:`archive` command or downloaded via hgweb.
2395 (default: True)
2397 (default: True)
2396
2398
2397 ``askusername``
2399 ``askusername``
2398 Whether to prompt for a username when committing. If True, and
2400 Whether to prompt for a username when committing. If True, and
2399 neither ``$HGUSER`` nor ``$EMAIL`` has been specified, then the user will
2401 neither ``$HGUSER`` nor ``$EMAIL`` has been specified, then the user will
2400 be prompted to enter a username. If no username is entered, the
2402 be prompted to enter a username. If no username is entered, the
2401 default ``USER@HOST`` is used instead.
2403 default ``USER@HOST`` is used instead.
2402 (default: False)
2404 (default: False)
2403
2405
2404 ``clonebundles``
2406 ``clonebundles``
2405 Whether the "clone bundles" feature is enabled.
2407 Whether the "clone bundles" feature is enabled.
2406
2408
2407 When enabled, :hg:`clone` may download and apply a server-advertised
2409 When enabled, :hg:`clone` may download and apply a server-advertised
2408 bundle file from a URL instead of using the normal exchange mechanism.
2410 bundle file from a URL instead of using the normal exchange mechanism.
2409
2411
2410 This can likely result in faster and more reliable clones.
2412 This can likely result in faster and more reliable clones.
2411
2413
2412 (default: True)
2414 (default: True)
2413
2415
2414 ``clonebundlefallback``
2416 ``clonebundlefallback``
2415 Whether failure to apply an advertised "clone bundle" from a server
2417 Whether failure to apply an advertised "clone bundle" from a server
2416 should result in fallback to a regular clone.
2418 should result in fallback to a regular clone.
2417
2419
2418 This is disabled by default because servers advertising "clone
2420 This is disabled by default because servers advertising "clone
2419 bundles" often do so to reduce server load. If advertised bundles
2421 bundles" often do so to reduce server load. If advertised bundles
2420 start mass failing and clients automatically fall back to a regular
2422 start mass failing and clients automatically fall back to a regular
2421 clone, this would add significant and unexpected load to the server
2423 clone, this would add significant and unexpected load to the server
2422 since the server is expecting clone operations to be offloaded to
2424 since the server is expecting clone operations to be offloaded to
2423 pre-generated bundles. Failing fast (the default behavior) ensures
2425 pre-generated bundles. Failing fast (the default behavior) ensures
2424 clients don't overwhelm the server when "clone bundle" application
2426 clients don't overwhelm the server when "clone bundle" application
2425 fails.
2427 fails.
2426
2428
2427 (default: False)
2429 (default: False)
2428
2430
2429 ``clonebundleprefers``
2431 ``clonebundleprefers``
2430 Defines preferences for which "clone bundles" to use.
2432 Defines preferences for which "clone bundles" to use.
2431
2433
2432 Servers advertising "clone bundles" may advertise multiple available
2434 Servers advertising "clone bundles" may advertise multiple available
2433 bundles. Each bundle may have different attributes, such as the bundle
2435 bundles. Each bundle may have different attributes, such as the bundle
2434 type and compression format. This option is used to prefer a particular
2436 type and compression format. This option is used to prefer a particular
2435 bundle over another.
2437 bundle over another.
2436
2438
2437 The following keys are defined by Mercurial:
2439 The following keys are defined by Mercurial:
2438
2440
2439 BUNDLESPEC
2441 BUNDLESPEC
2440 A bundle type specifier. These are strings passed to :hg:`bundle -t`.
2442 A bundle type specifier. These are strings passed to :hg:`bundle -t`.
2441 e.g. ``gzip-v2`` or ``bzip2-v1``.
2443 e.g. ``gzip-v2`` or ``bzip2-v1``.
2442
2444
2443 COMPRESSION
2445 COMPRESSION
2444 The compression format of the bundle. e.g. ``gzip`` and ``bzip2``.
2446 The compression format of the bundle. e.g. ``gzip`` and ``bzip2``.
2445
2447
2446 Server operators may define custom keys.
2448 Server operators may define custom keys.
2447
2449
2448 Example values: ``COMPRESSION=bzip2``,
2450 Example values: ``COMPRESSION=bzip2``,
2449 ``BUNDLESPEC=gzip-v2, COMPRESSION=gzip``.
2451 ``BUNDLESPEC=gzip-v2, COMPRESSION=gzip``.
2450
2452
2451 By default, the first bundle advertised by the server is used.
2453 By default, the first bundle advertised by the server is used.
2452
2454
2453 ``color``
2455 ``color``
2454 When to colorize output. Possible value are Boolean ("yes" or "no"), or
2456 When to colorize output. Possible value are Boolean ("yes" or "no"), or
2455 "debug", or "always". (default: "yes"). "yes" will use color whenever it
2457 "debug", or "always". (default: "yes"). "yes" will use color whenever it
2456 seems possible. See :hg:`help color` for details.
2458 seems possible. See :hg:`help color` for details.
2457
2459
2458 ``commitsubrepos``
2460 ``commitsubrepos``
2459 Whether to commit modified subrepositories when committing the
2461 Whether to commit modified subrepositories when committing the
2460 parent repository. If False and one subrepository has uncommitted
2462 parent repository. If False and one subrepository has uncommitted
2461 changes, abort the commit.
2463 changes, abort the commit.
2462 (default: False)
2464 (default: False)
2463
2465
2464 ``debug``
2466 ``debug``
2465 Print debugging information. (default: False)
2467 Print debugging information. (default: False)
2466
2468
2467 ``editor``
2469 ``editor``
2468 The editor to use during a commit. (default: ``$EDITOR`` or ``vi``)
2470 The editor to use during a commit. (default: ``$EDITOR`` or ``vi``)
2469
2471
2470 ``fallbackencoding``
2472 ``fallbackencoding``
2471 Encoding to try if it's not possible to decode the changelog using
2473 Encoding to try if it's not possible to decode the changelog using
2472 UTF-8. (default: ISO-8859-1)
2474 UTF-8. (default: ISO-8859-1)
2473
2475
2474 ``graphnodetemplate``
2476 ``graphnodetemplate``
2475 (DEPRECATED) Use ``command-templates.graphnode`` instead.
2477 (DEPRECATED) Use ``command-templates.graphnode`` instead.
2476
2478
2477 ``ignore``
2479 ``ignore``
2478 A file to read per-user ignore patterns from. This file should be
2480 A file to read per-user ignore patterns from. This file should be
2479 in the same format as a repository-wide .hgignore file. Filenames
2481 in the same format as a repository-wide .hgignore file. Filenames
2480 are relative to the repository root. This option supports hook syntax,
2482 are relative to the repository root. This option supports hook syntax,
2481 so if you want to specify multiple ignore files, you can do so by
2483 so if you want to specify multiple ignore files, you can do so by
2482 setting something like ``ignore.other = ~/.hgignore2``. For details
2484 setting something like ``ignore.other = ~/.hgignore2``. For details
2483 of the ignore file format, see the ``hgignore(5)`` man page.
2485 of the ignore file format, see the ``hgignore(5)`` man page.
2484
2486
2485 ``interactive``
2487 ``interactive``
2486 Allow to prompt the user. (default: True)
2488 Allow to prompt the user. (default: True)
2487
2489
2488 ``interface``
2490 ``interface``
2489 Select the default interface for interactive features (default: text).
2491 Select the default interface for interactive features (default: text).
2490 Possible values are 'text' and 'curses'.
2492 Possible values are 'text' and 'curses'.
2491
2493
2492 ``interface.chunkselector``
2494 ``interface.chunkselector``
2493 Select the interface for change recording (e.g. :hg:`commit -i`).
2495 Select the interface for change recording (e.g. :hg:`commit -i`).
2494 Possible values are 'text' and 'curses'.
2496 Possible values are 'text' and 'curses'.
2495 This config overrides the interface specified by ui.interface.
2497 This config overrides the interface specified by ui.interface.
2496
2498
2497 ``large-file-limit``
2499 ``large-file-limit``
2498 Largest file size that gives no memory use warning.
2500 Largest file size that gives no memory use warning.
2499 Possible values are integers or 0 to disable the check.
2501 Possible values are integers or 0 to disable the check.
2500 (default: 10000000)
2502 (default: 10000000)
2501
2503
2502 ``logtemplate``
2504 ``logtemplate``
2503 (DEPRECATED) Use ``command-templates.log`` instead.
2505 (DEPRECATED) Use ``command-templates.log`` instead.
2504
2506
2505 ``merge``
2507 ``merge``
2506 The conflict resolution program to use during a manual merge.
2508 The conflict resolution program to use during a manual merge.
2507 For more information on merge tools see :hg:`help merge-tools`.
2509 For more information on merge tools see :hg:`help merge-tools`.
2508 For configuring merge tools see the ``[merge-tools]`` section.
2510 For configuring merge tools see the ``[merge-tools]`` section.
2509
2511
2510 ``mergemarkers``
2512 ``mergemarkers``
2511 Sets the merge conflict marker label styling. The ``detailed`` style
2513 Sets the merge conflict marker label styling. The ``detailed`` style
2512 uses the ``command-templates.mergemarker`` setting to style the labels.
2514 uses the ``command-templates.mergemarker`` setting to style the labels.
2513 The ``basic`` style just uses 'local' and 'other' as the marker label.
2515 The ``basic`` style just uses 'local' and 'other' as the marker label.
2514 One of ``basic`` or ``detailed``.
2516 One of ``basic`` or ``detailed``.
2515 (default: ``basic``)
2517 (default: ``basic``)
2516
2518
2517 ``mergemarkertemplate``
2519 ``mergemarkertemplate``
2518 (DEPRECATED) Use ``command-templates.mergemarker`` instead.
2520 (DEPRECATED) Use ``command-templates.mergemarker`` instead.
2519
2521
2520 ``message-output``
2522 ``message-output``
2521 Where to write status and error messages. (default: ``stdio``)
2523 Where to write status and error messages. (default: ``stdio``)
2522
2524
2523 ``channel``
2525 ``channel``
2524 Use separate channel for structured output. (Command-server only)
2526 Use separate channel for structured output. (Command-server only)
2525 ``stderr``
2527 ``stderr``
2526 Everything to stderr.
2528 Everything to stderr.
2527 ``stdio``
2529 ``stdio``
2528 Status to stdout, and error to stderr.
2530 Status to stdout, and error to stderr.
2529
2531
2530 ``origbackuppath``
2532 ``origbackuppath``
2531 The path to a directory used to store generated .orig files. If the path is
2533 The path to a directory used to store generated .orig files. If the path is
2532 not a directory, one will be created. If set, files stored in this
2534 not a directory, one will be created. If set, files stored in this
2533 directory have the same name as the original file and do not have a .orig
2535 directory have the same name as the original file and do not have a .orig
2534 suffix.
2536 suffix.
2535
2537
2536 ``paginate``
2538 ``paginate``
2537 Control the pagination of command output (default: True). See :hg:`help pager`
2539 Control the pagination of command output (default: True). See :hg:`help pager`
2538 for details.
2540 for details.
2539
2541
2540 ``patch``
2542 ``patch``
2541 An optional external tool that ``hg import`` and some extensions
2543 An optional external tool that ``hg import`` and some extensions
2542 will use for applying patches. By default Mercurial uses an
2544 will use for applying patches. By default Mercurial uses an
2543 internal patch utility. The external tool must work as the common
2545 internal patch utility. The external tool must work as the common
2544 Unix ``patch`` program. In particular, it must accept a ``-p``
2546 Unix ``patch`` program. In particular, it must accept a ``-p``
2545 argument to strip patch headers, a ``-d`` argument to specify the
2547 argument to strip patch headers, a ``-d`` argument to specify the
2546 current directory, a file name to patch, and a patch file to take
2548 current directory, a file name to patch, and a patch file to take
2547 from stdin.
2549 from stdin.
2548
2550
2549 It is possible to specify a patch tool together with extra
2551 It is possible to specify a patch tool together with extra
2550 arguments. For example, setting this option to ``patch --merge``
2552 arguments. For example, setting this option to ``patch --merge``
2551 will use the ``patch`` program with its 2-way merge option.
2553 will use the ``patch`` program with its 2-way merge option.
2552
2554
2553 ``portablefilenames``
2555 ``portablefilenames``
2554 Check for portable filenames. Can be ``warn``, ``ignore`` or ``abort``.
2556 Check for portable filenames. Can be ``warn``, ``ignore`` or ``abort``.
2555 (default: ``warn``)
2557 (default: ``warn``)
2556
2558
2557 ``warn``
2559 ``warn``
2558 Print a warning message on POSIX platforms, if a file with a non-portable
2560 Print a warning message on POSIX platforms, if a file with a non-portable
2559 filename is added (e.g. a file with a name that can't be created on
2561 filename is added (e.g. a file with a name that can't be created on
2560 Windows because it contains reserved parts like ``AUX``, reserved
2562 Windows because it contains reserved parts like ``AUX``, reserved
2561 characters like ``:``, or would cause a case collision with an existing
2563 characters like ``:``, or would cause a case collision with an existing
2562 file).
2564 file).
2563
2565
2564 ``ignore``
2566 ``ignore``
2565 Don't print a warning.
2567 Don't print a warning.
2566
2568
2567 ``abort``
2569 ``abort``
2568 The command is aborted.
2570 The command is aborted.
2569
2571
2570 ``true``
2572 ``true``
2571 Alias for ``warn``.
2573 Alias for ``warn``.
2572
2574
2573 ``false``
2575 ``false``
2574 Alias for ``ignore``.
2576 Alias for ``ignore``.
2575
2577
2576 .. container:: windows
2578 .. container:: windows
2577
2579
2578 On Windows, this configuration option is ignored and the command aborted.
2580 On Windows, this configuration option is ignored and the command aborted.
2579
2581
2580 ``pre-merge-tool-output-template``
2582 ``pre-merge-tool-output-template``
2581 (DEPRECATED) Use ``command-template.pre-merge-tool-output`` instead.
2583 (DEPRECATED) Use ``command-template.pre-merge-tool-output`` instead.
2582
2584
2583 ``quiet``
2585 ``quiet``
2584 Reduce the amount of output printed.
2586 Reduce the amount of output printed.
2585 (default: False)
2587 (default: False)
2586
2588
2587 ``relative-paths``
2589 ``relative-paths``
2588 Prefer relative paths in the UI.
2590 Prefer relative paths in the UI.
2589
2591
2590 ``remotecmd``
2592 ``remotecmd``
2591 Remote command to use for clone/push/pull operations.
2593 Remote command to use for clone/push/pull operations.
2592 (default: ``hg``)
2594 (default: ``hg``)
2593
2595
2594 ``report_untrusted``
2596 ``report_untrusted``
2595 Warn if a ``.hg/hgrc`` file is ignored due to not being owned by a
2597 Warn if a ``.hg/hgrc`` file is ignored due to not being owned by a
2596 trusted user or group.
2598 trusted user or group.
2597 (default: True)
2599 (default: True)
2598
2600
2599 ``slash``
2601 ``slash``
2600 (Deprecated. Use ``slashpath`` template filter instead.)
2602 (Deprecated. Use ``slashpath`` template filter instead.)
2601
2603
2602 Display paths using a slash (``/``) as the path separator. This
2604 Display paths using a slash (``/``) as the path separator. This
2603 only makes a difference on systems where the default path
2605 only makes a difference on systems where the default path
2604 separator is not the slash character (e.g. Windows uses the
2606 separator is not the slash character (e.g. Windows uses the
2605 backslash character (``\``)).
2607 backslash character (``\``)).
2606 (default: False)
2608 (default: False)
2607
2609
2608 ``statuscopies``
2610 ``statuscopies``
2609 Display copies in the status command.
2611 Display copies in the status command.
2610
2612
2611 ``ssh``
2613 ``ssh``
2612 Command to use for SSH connections. (default: ``ssh``)
2614 Command to use for SSH connections. (default: ``ssh``)
2613
2615
2614 ``ssherrorhint``
2616 ``ssherrorhint``
2615 A hint shown to the user in the case of SSH error (e.g.
2617 A hint shown to the user in the case of SSH error (e.g.
2616 ``Please see http://company/internalwiki/ssh.html``)
2618 ``Please see http://company/internalwiki/ssh.html``)
2617
2619
2618 ``strict``
2620 ``strict``
2619 Require exact command names, instead of allowing unambiguous
2621 Require exact command names, instead of allowing unambiguous
2620 abbreviations. (default: False)
2622 abbreviations. (default: False)
2621
2623
2622 ``style``
2624 ``style``
2623 Name of style to use for command output.
2625 Name of style to use for command output.
2624
2626
2625 ``supportcontact``
2627 ``supportcontact``
2626 A URL where users should report a Mercurial traceback. Use this if you are a
2628 A URL where users should report a Mercurial traceback. Use this if you are a
2627 large organisation with its own Mercurial deployment process and crash
2629 large organisation with its own Mercurial deployment process and crash
2628 reports should be addressed to your internal support.
2630 reports should be addressed to your internal support.
2629
2631
2630 ``textwidth``
2632 ``textwidth``
2631 Maximum width of help text. A longer line generated by ``hg help`` or
2633 Maximum width of help text. A longer line generated by ``hg help`` or
2632 ``hg subcommand --help`` will be broken after white space to get this
2634 ``hg subcommand --help`` will be broken after white space to get this
2633 width or the terminal width, whichever comes first.
2635 width or the terminal width, whichever comes first.
2634 A non-positive value will disable this and the terminal width will be
2636 A non-positive value will disable this and the terminal width will be
2635 used. (default: 78)
2637 used. (default: 78)
2636
2638
2637 ``timeout``
2639 ``timeout``
2638 The timeout used when a lock is held (in seconds), a negative value
2640 The timeout used when a lock is held (in seconds), a negative value
2639 means no timeout. (default: 600)
2641 means no timeout. (default: 600)
2640
2642
2641 ``timeout.warn``
2643 ``timeout.warn``
2642 Time (in seconds) before a warning is printed about held lock. A negative
2644 Time (in seconds) before a warning is printed about held lock. A negative
2643 value means no warning. (default: 0)
2645 value means no warning. (default: 0)
2644
2646
2645 ``traceback``
2647 ``traceback``
2646 Mercurial always prints a traceback when an unknown exception
2648 Mercurial always prints a traceback when an unknown exception
2647 occurs. Setting this to True will make Mercurial print a traceback
2649 occurs. Setting this to True will make Mercurial print a traceback
2648 on all exceptions, even those recognized by Mercurial (such as
2650 on all exceptions, even those recognized by Mercurial (such as
2649 IOError or MemoryError). (default: False)
2651 IOError or MemoryError). (default: False)
2650
2652
2651 ``tweakdefaults``
2653 ``tweakdefaults``
2652
2654
2653 By default Mercurial's behavior changes very little from release
2655 By default Mercurial's behavior changes very little from release
2654 to release, but over time the recommended config settings
2656 to release, but over time the recommended config settings
2655 shift. Enable this config to opt in to get automatic tweaks to
2657 shift. Enable this config to opt in to get automatic tweaks to
2656 Mercurial's behavior over time. This config setting will have no
2658 Mercurial's behavior over time. This config setting will have no
2657 effect if ``HGPLAIN`` is set or ``HGPLAINEXCEPT`` is set and does
2659 effect if ``HGPLAIN`` is set or ``HGPLAINEXCEPT`` is set and does
2658 not include ``tweakdefaults``. (default: False)
2660 not include ``tweakdefaults``. (default: False)
2659
2661
2660 It currently means::
2662 It currently means::
2661
2663
2662 .. tweakdefaultsmarker
2664 .. tweakdefaultsmarker
2663
2665
2664 ``username``
2666 ``username``
2665 The committer of a changeset created when running "commit".
2667 The committer of a changeset created when running "commit".
2666 Typically a person's name and email address, e.g. ``Fred Widget
2668 Typically a person's name and email address, e.g. ``Fred Widget
2667 <fred@example.com>``. Environment variables in the
2669 <fred@example.com>``. Environment variables in the
2668 username are expanded.
2670 username are expanded.
2669
2671
2670 (default: ``$EMAIL`` or ``username@hostname``. If the username in
2672 (default: ``$EMAIL`` or ``username@hostname``. If the username in
2671 hgrc is empty, e.g. if the system admin set ``username =`` in the
2673 hgrc is empty, e.g. if the system admin set ``username =`` in the
2672 system hgrc, it has to be specified manually or in a different
2674 system hgrc, it has to be specified manually or in a different
2673 hgrc file)
2675 hgrc file)
2674
2676
2675 ``verbose``
2677 ``verbose``
2676 Increase the amount of output printed. (default: False)
2678 Increase the amount of output printed. (default: False)
2677
2679
2678
2680
2679 ``command-templates``
2681 ``command-templates``
2680 ---------------------
2682 ---------------------
2681
2683
2682 Templates used for customizing the output of commands.
2684 Templates used for customizing the output of commands.
2683
2685
2684 ``graphnode``
2686 ``graphnode``
2685 The template used to print changeset nodes in an ASCII revision graph.
2687 The template used to print changeset nodes in an ASCII revision graph.
2686 (default: ``{graphnode}``)
2688 (default: ``{graphnode}``)
2687
2689
2688 ``log``
2690 ``log``
2689 Template string for commands that print changesets.
2691 Template string for commands that print changesets.
2690
2692
2691 ``mergemarker``
2693 ``mergemarker``
2692 The template used to print the commit description next to each conflict
2694 The template used to print the commit description next to each conflict
2693 marker during merge conflicts. See :hg:`help templates` for the template
2695 marker during merge conflicts. See :hg:`help templates` for the template
2694 format.
2696 format.
2695
2697
2696 Defaults to showing the hash, tags, branches, bookmarks, author, and
2698 Defaults to showing the hash, tags, branches, bookmarks, author, and
2697 the first line of the commit description.
2699 the first line of the commit description.
2698
2700
2699 If you use non-ASCII characters in names for tags, branches, bookmarks,
2701 If you use non-ASCII characters in names for tags, branches, bookmarks,
2700 authors, and/or commit descriptions, you must pay attention to encodings of
2702 authors, and/or commit descriptions, you must pay attention to encodings of
2701 managed files. At template expansion, non-ASCII characters use the encoding
2703 managed files. At template expansion, non-ASCII characters use the encoding
2702 specified by the ``--encoding`` global option, ``HGENCODING`` or other
2704 specified by the ``--encoding`` global option, ``HGENCODING`` or other
2703 environment variables that govern your locale. If the encoding of the merge
2705 environment variables that govern your locale. If the encoding of the merge
2704 markers is different from the encoding of the merged files,
2706 markers is different from the encoding of the merged files,
2705 serious problems may occur.
2707 serious problems may occur.
2706
2708
2707 Can be overridden per-merge-tool, see the ``[merge-tools]`` section.
2709 Can be overridden per-merge-tool, see the ``[merge-tools]`` section.
2708
2710
2709 ``oneline-summary``
2711 ``oneline-summary``
2710 A template used by `hg rebase` and other commands for showing a one-line
2712 A template used by `hg rebase` and other commands for showing a one-line
2711 summary of a commit. If the template configured here is longer than one
2713 summary of a commit. If the template configured here is longer than one
2712 line, then only the first line is used.
2714 line, then only the first line is used.
2713
2715
2714 The template can be overridden per command by defining a template in
2716 The template can be overridden per command by defining a template in
2715 `oneline-summary.<command>`, where `<command>` can be e.g. "rebase".
2717 `oneline-summary.<command>`, where `<command>` can be e.g. "rebase".
2716
2718
2717 ``pre-merge-tool-output``
2719 ``pre-merge-tool-output``
2718 A template that is printed before executing an external merge tool. This can
2720 A template that is printed before executing an external merge tool. This can
2719 be used to print out additional context that might be useful to have during
2721 be used to print out additional context that might be useful to have during
2720 the conflict resolution, such as the description of the various commits
2722 the conflict resolution, such as the description of the various commits
2721 involved or bookmarks/tags.
2723 involved or bookmarks/tags.
2722
2724
2723 Additional information is available in the ``local`, ``base``, and ``other``
2725 Additional information is available in the ``local`, ``base``, and ``other``
2724 dicts. For example: ``{local.label}``, ``{base.name}``, or
2726 dicts. For example: ``{local.label}``, ``{base.name}``, or
2725 ``{other.islink}``.
2727 ``{other.islink}``.
2726
2728
2727
2729
2728 ``web``
2730 ``web``
2729 -------
2731 -------
2730
2732
2731 Web interface configuration. The settings in this section apply to
2733 Web interface configuration. The settings in this section apply to
2732 both the builtin webserver (started by :hg:`serve`) and the script you
2734 both the builtin webserver (started by :hg:`serve`) and the script you
2733 run through a webserver (``hgweb.cgi`` and the derivatives for FastCGI
2735 run through a webserver (``hgweb.cgi`` and the derivatives for FastCGI
2734 and WSGI).
2736 and WSGI).
2735
2737
2736 The Mercurial webserver does no authentication (it does not prompt for
2738 The Mercurial webserver does no authentication (it does not prompt for
2737 usernames and passwords to validate *who* users are), but it does do
2739 usernames and passwords to validate *who* users are), but it does do
2738 authorization (it grants or denies access for *authenticated users*
2740 authorization (it grants or denies access for *authenticated users*
2739 based on settings in this section). You must either configure your
2741 based on settings in this section). You must either configure your
2740 webserver to do authentication for you, or disable the authorization
2742 webserver to do authentication for you, or disable the authorization
2741 checks.
2743 checks.
2742
2744
2743 For a quick setup in a trusted environment, e.g., a private LAN, where
2745 For a quick setup in a trusted environment, e.g., a private LAN, where
2744 you want it to accept pushes from anybody, you can use the following
2746 you want it to accept pushes from anybody, you can use the following
2745 command line::
2747 command line::
2746
2748
2747 $ hg --config web.allow-push=* --config web.push_ssl=False serve
2749 $ hg --config web.allow-push=* --config web.push_ssl=False serve
2748
2750
2749 Note that this will allow anybody to push anything to the server and
2751 Note that this will allow anybody to push anything to the server and
2750 that this should not be used for public servers.
2752 that this should not be used for public servers.
2751
2753
2752 The full set of options is:
2754 The full set of options is:
2753
2755
2754 ``accesslog``
2756 ``accesslog``
2755 Where to output the access log. (default: stdout)
2757 Where to output the access log. (default: stdout)
2756
2758
2757 ``address``
2759 ``address``
2758 Interface address to bind to. (default: all)
2760 Interface address to bind to. (default: all)
2759
2761
2760 ``allow-archive``
2762 ``allow-archive``
2761 List of archive format (bz2, gz, zip) allowed for downloading.
2763 List of archive format (bz2, gz, zip) allowed for downloading.
2762 (default: empty)
2764 (default: empty)
2763
2765
2764 ``allowbz2``
2766 ``allowbz2``
2765 (DEPRECATED) Whether to allow .tar.bz2 downloading of repository
2767 (DEPRECATED) Whether to allow .tar.bz2 downloading of repository
2766 revisions.
2768 revisions.
2767 (default: False)
2769 (default: False)
2768
2770
2769 ``allowgz``
2771 ``allowgz``
2770 (DEPRECATED) Whether to allow .tar.gz downloading of repository
2772 (DEPRECATED) Whether to allow .tar.gz downloading of repository
2771 revisions.
2773 revisions.
2772 (default: False)
2774 (default: False)
2773
2775
2774 ``allow-pull``
2776 ``allow-pull``
2775 Whether to allow pulling from the repository. (default: True)
2777 Whether to allow pulling from the repository. (default: True)
2776
2778
2777 ``allow-push``
2779 ``allow-push``
2778 Whether to allow pushing to the repository. If empty or not set,
2780 Whether to allow pushing to the repository. If empty or not set,
2779 pushing is not allowed. If the special value ``*``, any remote
2781 pushing is not allowed. If the special value ``*``, any remote
2780 user can push, including unauthenticated users. Otherwise, the
2782 user can push, including unauthenticated users. Otherwise, the
2781 remote user must have been authenticated, and the authenticated
2783 remote user must have been authenticated, and the authenticated
2782 user name must be present in this list. The contents of the
2784 user name must be present in this list. The contents of the
2783 allow-push list are examined after the deny_push list.
2785 allow-push list are examined after the deny_push list.
2784
2786
2785 ``allow_read``
2787 ``allow_read``
2786 If the user has not already been denied repository access due to
2788 If the user has not already been denied repository access due to
2787 the contents of deny_read, this list determines whether to grant
2789 the contents of deny_read, this list determines whether to grant
2788 repository access to the user. If this list is not empty, and the
2790 repository access to the user. If this list is not empty, and the
2789 user is unauthenticated or not present in the list, then access is
2791 user is unauthenticated or not present in the list, then access is
2790 denied for the user. If the list is empty or not set, then access
2792 denied for the user. If the list is empty or not set, then access
2791 is permitted to all users by default. Setting allow_read to the
2793 is permitted to all users by default. Setting allow_read to the
2792 special value ``*`` is equivalent to it not being set (i.e. access
2794 special value ``*`` is equivalent to it not being set (i.e. access
2793 is permitted to all users). The contents of the allow_read list are
2795 is permitted to all users). The contents of the allow_read list are
2794 examined after the deny_read list.
2796 examined after the deny_read list.
2795
2797
2796 ``allowzip``
2798 ``allowzip``
2797 (DEPRECATED) Whether to allow .zip downloading of repository
2799 (DEPRECATED) Whether to allow .zip downloading of repository
2798 revisions. This feature creates temporary files.
2800 revisions. This feature creates temporary files.
2799 (default: False)
2801 (default: False)
2800
2802
2801 ``archivesubrepos``
2803 ``archivesubrepos``
2802 Whether to recurse into subrepositories when archiving.
2804 Whether to recurse into subrepositories when archiving.
2803 (default: False)
2805 (default: False)
2804
2806
2805 ``baseurl``
2807 ``baseurl``
2806 Base URL to use when publishing URLs in other locations, so
2808 Base URL to use when publishing URLs in other locations, so
2807 third-party tools like email notification hooks can construct
2809 third-party tools like email notification hooks can construct
2808 URLs. Example: ``http://hgserver/repos/``.
2810 URLs. Example: ``http://hgserver/repos/``.
2809
2811
2810 ``cacerts``
2812 ``cacerts``
2811 Path to file containing a list of PEM encoded certificate
2813 Path to file containing a list of PEM encoded certificate
2812 authority certificates. Environment variables and ``~user``
2814 authority certificates. Environment variables and ``~user``
2813 constructs are expanded in the filename. If specified on the
2815 constructs are expanded in the filename. If specified on the
2814 client, then it will verify the identity of remote HTTPS servers
2816 client, then it will verify the identity of remote HTTPS servers
2815 with these certificates.
2817 with these certificates.
2816
2818
2817 To disable SSL verification temporarily, specify ``--insecure`` from
2819 To disable SSL verification temporarily, specify ``--insecure`` from
2818 command line.
2820 command line.
2819
2821
2820 You can use OpenSSL's CA certificate file if your platform has
2822 You can use OpenSSL's CA certificate file if your platform has
2821 one. On most Linux systems this will be
2823 one. On most Linux systems this will be
2822 ``/etc/ssl/certs/ca-certificates.crt``. Otherwise you will have to
2824 ``/etc/ssl/certs/ca-certificates.crt``. Otherwise you will have to
2823 generate this file manually. The form must be as follows::
2825 generate this file manually. The form must be as follows::
2824
2826
2825 -----BEGIN CERTIFICATE-----
2827 -----BEGIN CERTIFICATE-----
2826 ... (certificate in base64 PEM encoding) ...
2828 ... (certificate in base64 PEM encoding) ...
2827 -----END CERTIFICATE-----
2829 -----END CERTIFICATE-----
2828 -----BEGIN CERTIFICATE-----
2830 -----BEGIN CERTIFICATE-----
2829 ... (certificate in base64 PEM encoding) ...
2831 ... (certificate in base64 PEM encoding) ...
2830 -----END CERTIFICATE-----
2832 -----END CERTIFICATE-----
2831
2833
2832 ``cache``
2834 ``cache``
2833 Whether to support caching in hgweb. (default: True)
2835 Whether to support caching in hgweb. (default: True)
2834
2836
2835 ``certificate``
2837 ``certificate``
2836 Certificate to use when running :hg:`serve`.
2838 Certificate to use when running :hg:`serve`.
2837
2839
2838 ``collapse``
2840 ``collapse``
2839 With ``descend`` enabled, repositories in subdirectories are shown at
2841 With ``descend`` enabled, repositories in subdirectories are shown at
2840 a single level alongside repositories in the current path. With
2842 a single level alongside repositories in the current path. With
2841 ``collapse`` also enabled, repositories residing at a deeper level than
2843 ``collapse`` also enabled, repositories residing at a deeper level than
2842 the current path are grouped behind navigable directory entries that
2844 the current path are grouped behind navigable directory entries that
2843 lead to the locations of these repositories. In effect, this setting
2845 lead to the locations of these repositories. In effect, this setting
2844 collapses each collection of repositories found within a subdirectory
2846 collapses each collection of repositories found within a subdirectory
2845 into a single entry for that subdirectory. (default: False)
2847 into a single entry for that subdirectory. (default: False)
2846
2848
2847 ``comparisoncontext``
2849 ``comparisoncontext``
2848 Number of lines of context to show in side-by-side file comparison. If
2850 Number of lines of context to show in side-by-side file comparison. If
2849 negative or the value ``full``, whole files are shown. (default: 5)
2851 negative or the value ``full``, whole files are shown. (default: 5)
2850
2852
2851 This setting can be overridden by a ``context`` request parameter to the
2853 This setting can be overridden by a ``context`` request parameter to the
2852 ``comparison`` command, taking the same values.
2854 ``comparison`` command, taking the same values.
2853
2855
2854 ``contact``
2856 ``contact``
2855 Name or email address of the person in charge of the repository.
2857 Name or email address of the person in charge of the repository.
2856 (default: ui.username or ``$EMAIL`` or "unknown" if unset or empty)
2858 (default: ui.username or ``$EMAIL`` or "unknown" if unset or empty)
2857
2859
2858 ``csp``
2860 ``csp``
2859 Send a ``Content-Security-Policy`` HTTP header with this value.
2861 Send a ``Content-Security-Policy`` HTTP header with this value.
2860
2862
2861 The value may contain a special string ``%nonce%``, which will be replaced
2863 The value may contain a special string ``%nonce%``, which will be replaced
2862 by a randomly-generated one-time use value. If the value contains
2864 by a randomly-generated one-time use value. If the value contains
2863 ``%nonce%``, ``web.cache`` will be disabled, as caching undermines the
2865 ``%nonce%``, ``web.cache`` will be disabled, as caching undermines the
2864 one-time property of the nonce. This nonce will also be inserted into
2866 one-time property of the nonce. This nonce will also be inserted into
2865 ``<script>`` elements containing inline JavaScript.
2867 ``<script>`` elements containing inline JavaScript.
2866
2868
2867 Note: lots of HTML content sent by the server is derived from repository
2869 Note: lots of HTML content sent by the server is derived from repository
2868 data. Please consider the potential for malicious repository data to
2870 data. Please consider the potential for malicious repository data to
2869 "inject" itself into generated HTML content as part of your security
2871 "inject" itself into generated HTML content as part of your security
2870 threat model.
2872 threat model.
2871
2873
2872 ``deny_push``
2874 ``deny_push``
2873 Whether to deny pushing to the repository. If empty or not set,
2875 Whether to deny pushing to the repository. If empty or not set,
2874 push is not denied. If the special value ``*``, all remote users are
2876 push is not denied. If the special value ``*``, all remote users are
2875 denied push. Otherwise, unauthenticated users are all denied, and
2877 denied push. Otherwise, unauthenticated users are all denied, and
2876 any authenticated user name present in this list is also denied. The
2878 any authenticated user name present in this list is also denied. The
2877 contents of the deny_push list are examined before the allow-push list.
2879 contents of the deny_push list are examined before the allow-push list.
2878
2880
2879 ``deny_read``
2881 ``deny_read``
2880 Whether to deny reading/viewing of the repository. If this list is
2882 Whether to deny reading/viewing of the repository. If this list is
2881 not empty, unauthenticated users are all denied, and any
2883 not empty, unauthenticated users are all denied, and any
2882 authenticated user name present in this list is also denied access to
2884 authenticated user name present in this list is also denied access to
2883 the repository. If set to the special value ``*``, all remote users
2885 the repository. If set to the special value ``*``, all remote users
2884 are denied access (rarely needed ;). If deny_read is empty or not set,
2886 are denied access (rarely needed ;). If deny_read is empty or not set,
2885 the determination of repository access depends on the presence and
2887 the determination of repository access depends on the presence and
2886 content of the allow_read list (see description). If both
2888 content of the allow_read list (see description). If both
2887 deny_read and allow_read are empty or not set, then access is
2889 deny_read and allow_read are empty or not set, then access is
2888 permitted to all users by default. If the repository is being
2890 permitted to all users by default. If the repository is being
2889 served via hgwebdir, denied users will not be able to see it in
2891 served via hgwebdir, denied users will not be able to see it in
2890 the list of repositories. The contents of the deny_read list have
2892 the list of repositories. The contents of the deny_read list have
2891 priority over (are examined before) the contents of the allow_read
2893 priority over (are examined before) the contents of the allow_read
2892 list.
2894 list.
2893
2895
2894 ``descend``
2896 ``descend``
2895 hgwebdir indexes will not descend into subdirectories. Only repositories
2897 hgwebdir indexes will not descend into subdirectories. Only repositories
2896 directly in the current path will be shown (other repositories are still
2898 directly in the current path will be shown (other repositories are still
2897 available from the index corresponding to their containing path).
2899 available from the index corresponding to their containing path).
2898
2900
2899 ``description``
2901 ``description``
2900 Textual description of the repository's purpose or contents.
2902 Textual description of the repository's purpose or contents.
2901 (default: "unknown")
2903 (default: "unknown")
2902
2904
2903 ``encoding``
2905 ``encoding``
2904 Character encoding name. (default: the current locale charset)
2906 Character encoding name. (default: the current locale charset)
2905 Example: "UTF-8".
2907 Example: "UTF-8".
2906
2908
2907 ``errorlog``
2909 ``errorlog``
2908 Where to output the error log. (default: stderr)
2910 Where to output the error log. (default: stderr)
2909
2911
2910 ``guessmime``
2912 ``guessmime``
2911 Control MIME types for raw download of file content.
2913 Control MIME types for raw download of file content.
2912 Set to True to let hgweb guess the content type from the file
2914 Set to True to let hgweb guess the content type from the file
2913 extension. This will serve HTML files as ``text/html`` and might
2915 extension. This will serve HTML files as ``text/html`` and might
2914 allow cross-site scripting attacks when serving untrusted
2916 allow cross-site scripting attacks when serving untrusted
2915 repositories. (default: False)
2917 repositories. (default: False)
2916
2918
2917 ``hidden``
2919 ``hidden``
2918 Whether to hide the repository in the hgwebdir index.
2920 Whether to hide the repository in the hgwebdir index.
2919 (default: False)
2921 (default: False)
2920
2922
2921 ``ipv6``
2923 ``ipv6``
2922 Whether to use IPv6. (default: False)
2924 Whether to use IPv6. (default: False)
2923
2925
2924 ``labels``
2926 ``labels``
2925 List of string *labels* associated with the repository.
2927 List of string *labels* associated with the repository.
2926
2928
2927 Labels are exposed as a template keyword and can be used to customize
2929 Labels are exposed as a template keyword and can be used to customize
2928 output. e.g. the ``index`` template can group or filter repositories
2930 output. e.g. the ``index`` template can group or filter repositories
2929 by labels and the ``summary`` template can display additional content
2931 by labels and the ``summary`` template can display additional content
2930 if a specific label is present.
2932 if a specific label is present.
2931
2933
2932 ``logoimg``
2934 ``logoimg``
2933 File name of the logo image that some templates display on each page.
2935 File name of the logo image that some templates display on each page.
2934 The file name is relative to ``staticurl``. That is, the full path to
2936 The file name is relative to ``staticurl``. That is, the full path to
2935 the logo image is "staticurl/logoimg".
2937 the logo image is "staticurl/logoimg".
2936 If unset, ``hglogo.png`` will be used.
2938 If unset, ``hglogo.png`` will be used.
2937
2939
2938 ``logourl``
2940 ``logourl``
2939 Base URL to use for logos. If unset, ``https://mercurial-scm.org/``
2941 Base URL to use for logos. If unset, ``https://mercurial-scm.org/``
2940 will be used.
2942 will be used.
2941
2943
2942 ``maxchanges``
2944 ``maxchanges``
2943 Maximum number of changes to list on the changelog. (default: 10)
2945 Maximum number of changes to list on the changelog. (default: 10)
2944
2946
2945 ``maxfiles``
2947 ``maxfiles``
2946 Maximum number of files to list per changeset. (default: 10)
2948 Maximum number of files to list per changeset. (default: 10)
2947
2949
2948 ``maxshortchanges``
2950 ``maxshortchanges``
2949 Maximum number of changes to list on the shortlog, graph or filelog
2951 Maximum number of changes to list on the shortlog, graph or filelog
2950 pages. (default: 60)
2952 pages. (default: 60)
2951
2953
2952 ``name``
2954 ``name``
2953 Repository name to use in the web interface.
2955 Repository name to use in the web interface.
2954 (default: current working directory)
2956 (default: current working directory)
2955
2957
2956 ``port``
2958 ``port``
2957 Port to listen on. (default: 8000)
2959 Port to listen on. (default: 8000)
2958
2960
2959 ``prefix``
2961 ``prefix``
2960 Prefix path to serve from. (default: '' (server root))
2962 Prefix path to serve from. (default: '' (server root))
2961
2963
2962 ``push_ssl``
2964 ``push_ssl``
2963 Whether to require that inbound pushes be transported over SSL to
2965 Whether to require that inbound pushes be transported over SSL to
2964 prevent password sniffing. (default: True)
2966 prevent password sniffing. (default: True)
2965
2967
2966 ``refreshinterval``
2968 ``refreshinterval``
2967 How frequently directory listings re-scan the filesystem for new
2969 How frequently directory listings re-scan the filesystem for new
2968 repositories, in seconds. This is relevant when wildcards are used
2970 repositories, in seconds. This is relevant when wildcards are used
2969 to define paths. Depending on how much filesystem traversal is
2971 to define paths. Depending on how much filesystem traversal is
2970 required, refreshing may negatively impact performance.
2972 required, refreshing may negatively impact performance.
2971
2973
2972 Values less than or equal to 0 always refresh.
2974 Values less than or equal to 0 always refresh.
2973 (default: 20)
2975 (default: 20)
2974
2976
2975 ``server-header``
2977 ``server-header``
2976 Value for HTTP ``Server`` response header.
2978 Value for HTTP ``Server`` response header.
2977
2979
2978 ``static``
2980 ``static``
2979 Directory where static files are served from.
2981 Directory where static files are served from.
2980
2982
2981 ``staticurl``
2983 ``staticurl``
2982 Base URL to use for static files. If unset, static files (e.g. the
2984 Base URL to use for static files. If unset, static files (e.g. the
2983 hgicon.png favicon) will be served by the CGI script itself. Use
2985 hgicon.png favicon) will be served by the CGI script itself. Use
2984 this setting to serve them directly with the HTTP server.
2986 this setting to serve them directly with the HTTP server.
2985 Example: ``http://hgserver/static/``.
2987 Example: ``http://hgserver/static/``.
2986
2988
2987 ``stripes``
2989 ``stripes``
2988 How many lines a "zebra stripe" should span in multi-line output.
2990 How many lines a "zebra stripe" should span in multi-line output.
2989 Set to 0 to disable. (default: 1)
2991 Set to 0 to disable. (default: 1)
2990
2992
2991 ``style``
2993 ``style``
2992 Which template map style to use. The available options are the names of
2994 Which template map style to use. The available options are the names of
2993 subdirectories in the HTML templates path. (default: ``paper``)
2995 subdirectories in the HTML templates path. (default: ``paper``)
2994 Example: ``monoblue``.
2996 Example: ``monoblue``.
2995
2997
2996 ``templates``
2998 ``templates``
2997 Where to find the HTML templates. The default path to the HTML templates
2999 Where to find the HTML templates. The default path to the HTML templates
2998 can be obtained from ``hg debuginstall``.
3000 can be obtained from ``hg debuginstall``.
2999
3001
3000 ``websub``
3002 ``websub``
3001 ----------
3003 ----------
3002
3004
3003 Web substitution filter definition. You can use this section to
3005 Web substitution filter definition. You can use this section to
3004 define a set of regular expression substitution patterns which
3006 define a set of regular expression substitution patterns which
3005 let you automatically modify the hgweb server output.
3007 let you automatically modify the hgweb server output.
3006
3008
3007 The default hgweb templates only apply these substitution patterns
3009 The default hgweb templates only apply these substitution patterns
3008 on the revision description fields. You can apply them anywhere
3010 on the revision description fields. You can apply them anywhere
3009 you want when you create your own templates by adding calls to the
3011 you want when you create your own templates by adding calls to the
3010 "websub" filter (usually after calling the "escape" filter).
3012 "websub" filter (usually after calling the "escape" filter).
3011
3013
3012 This can be used, for example, to convert issue references to links
3014 This can be used, for example, to convert issue references to links
3013 to your issue tracker, or to convert "markdown-like" syntax into
3015 to your issue tracker, or to convert "markdown-like" syntax into
3014 HTML (see the examples below).
3016 HTML (see the examples below).
3015
3017
3016 Each entry in this section names a substitution filter.
3018 Each entry in this section names a substitution filter.
3017 The value of each entry defines the substitution expression itself.
3019 The value of each entry defines the substitution expression itself.
3018 The websub expressions follow the old interhg extension syntax,
3020 The websub expressions follow the old interhg extension syntax,
3019 which in turn imitates the Unix sed replacement syntax::
3021 which in turn imitates the Unix sed replacement syntax::
3020
3022
3021 patternname = s/SEARCH_REGEX/REPLACE_EXPRESSION/[i]
3023 patternname = s/SEARCH_REGEX/REPLACE_EXPRESSION/[i]
3022
3024
3023 You can use any separator other than "/". The final "i" is optional
3025 You can use any separator other than "/". The final "i" is optional
3024 and indicates that the search must be case insensitive.
3026 and indicates that the search must be case insensitive.
3025
3027
3026 Examples::
3028 Examples::
3027
3029
3028 [websub]
3030 [websub]
3029 issues = s|issue(\d+)|<a href="http://bts.example.org/issue\1">issue\1</a>|i
3031 issues = s|issue(\d+)|<a href="http://bts.example.org/issue\1">issue\1</a>|i
3030 italic = s/\b_(\S+)_\b/<i>\1<\/i>/
3032 italic = s/\b_(\S+)_\b/<i>\1<\/i>/
3031 bold = s/\*\b(\S+)\b\*/<b>\1<\/b>/
3033 bold = s/\*\b(\S+)\b\*/<b>\1<\/b>/
3032
3034
3033 ``worker``
3035 ``worker``
3034 ----------
3036 ----------
3035
3037
3036 Parallel master/worker configuration. We currently perform working
3038 Parallel master/worker configuration. We currently perform working
3037 directory updates in parallel on Unix-like systems, which greatly
3039 directory updates in parallel on Unix-like systems, which greatly
3038 helps performance.
3040 helps performance.
3039
3041
3040 ``enabled``
3042 ``enabled``
3041 Whether to enable workers code to be used.
3043 Whether to enable workers code to be used.
3042 (default: true)
3044 (default: true)
3043
3045
3044 ``numcpus``
3046 ``numcpus``
3045 Number of CPUs to use for parallel operations. A zero or
3047 Number of CPUs to use for parallel operations. A zero or
3046 negative value is treated as ``use the default``.
3048 negative value is treated as ``use the default``.
3047 (default: 4 or the number of CPUs on the system, whichever is larger)
3049 (default: 4 or the number of CPUs on the system, whichever is larger)
3048
3050
3049 ``backgroundclose``
3051 ``backgroundclose``
3050 Whether to enable closing file handles on background threads during certain
3052 Whether to enable closing file handles on background threads during certain
3051 operations. Some platforms aren't very efficient at closing file
3053 operations. Some platforms aren't very efficient at closing file
3052 handles that have been written or appended to. By performing file closing
3054 handles that have been written or appended to. By performing file closing
3053 on background threads, file write rate can increase substantially.
3055 on background threads, file write rate can increase substantially.
3054 (default: true on Windows, false elsewhere)
3056 (default: true on Windows, false elsewhere)
3055
3057
3056 ``backgroundcloseminfilecount``
3058 ``backgroundcloseminfilecount``
3057 Minimum number of files required to trigger background file closing.
3059 Minimum number of files required to trigger background file closing.
3058 Operations not writing this many files won't start background close
3060 Operations not writing this many files won't start background close
3059 threads.
3061 threads.
3060 (default: 2048)
3062 (default: 2048)
3061
3063
3062 ``backgroundclosemaxqueue``
3064 ``backgroundclosemaxqueue``
3063 The maximum number of opened file handles waiting to be closed in the
3065 The maximum number of opened file handles waiting to be closed in the
3064 background. This option only has an effect if ``backgroundclose`` is
3066 background. This option only has an effect if ``backgroundclose`` is
3065 enabled.
3067 enabled.
3066 (default: 384)
3068 (default: 384)
3067
3069
3068 ``backgroundclosethreadcount``
3070 ``backgroundclosethreadcount``
3069 Number of threads to process background file closes. Only relevant if
3071 Number of threads to process background file closes. Only relevant if
3070 ``backgroundclose`` is enabled.
3072 ``backgroundclose`` is enabled.
3071 (default: 4)
3073 (default: 4)
@@ -1,359 +1,362
1 # hook.py - hook support for mercurial
1 # hook.py - hook support for mercurial
2 #
2 #
3 # Copyright 2007 Matt Mackall <mpm@selenic.com>
3 # Copyright 2007 Matt Mackall <mpm@selenic.com>
4 #
4 #
5 # This software may be used and distributed according to the terms of the
5 # This software may be used and distributed according to the terms of the
6 # GNU General Public License version 2 or any later version.
6 # GNU General Public License version 2 or any later version.
7
7
8 from __future__ import absolute_import
8 from __future__ import absolute_import
9
9
10 import contextlib
10 import contextlib
11 import errno
11 import errno
12 import os
12 import os
13 import sys
13 import sys
14
14
15 from .i18n import _
15 from .i18n import _
16 from .pycompat import getattr
16 from .pycompat import getattr
17 from . import (
17 from . import (
18 demandimport,
18 demandimport,
19 encoding,
19 encoding,
20 error,
20 error,
21 extensions,
21 extensions,
22 pycompat,
22 pycompat,
23 util,
23 util,
24 )
24 )
25 from .utils import (
25 from .utils import (
26 procutil,
26 procutil,
27 resourceutil,
27 resourceutil,
28 stringutil,
28 stringutil,
29 )
29 )
30
30
31
31
32 def pythonhook(ui, repo, htype, hname, funcname, args, throw):
32 def pythonhook(ui, repo, htype, hname, funcname, args, throw):
33 """call python hook. hook is callable object, looked up as
33 """call python hook. hook is callable object, looked up as
34 name in python module. if callable returns "true", hook
34 name in python module. if callable returns "true", hook
35 fails, else passes. if hook raises exception, treated as
35 fails, else passes. if hook raises exception, treated as
36 hook failure. exception propagates if throw is "true".
36 hook failure. exception propagates if throw is "true".
37
37
38 reason for "true" meaning "hook failed" is so that
38 reason for "true" meaning "hook failed" is so that
39 unmodified commands (e.g. mercurial.commands.update) can
39 unmodified commands (e.g. mercurial.commands.update) can
40 be run as hooks without wrappers to convert return values."""
40 be run as hooks without wrappers to convert return values."""
41
41
42 if callable(funcname):
42 if callable(funcname):
43 obj = funcname
43 obj = funcname
44 funcname = pycompat.sysbytes(obj.__module__ + "." + obj.__name__)
44 funcname = pycompat.sysbytes(obj.__module__ + "." + obj.__name__)
45 else:
45 else:
46 d = funcname.rfind(b'.')
46 d = funcname.rfind(b'.')
47 if d == -1:
47 if d == -1:
48 raise error.HookLoadError(
48 raise error.HookLoadError(
49 _(b'%s hook is invalid: "%s" not in a module')
49 _(b'%s hook is invalid: "%s" not in a module')
50 % (hname, funcname)
50 % (hname, funcname)
51 )
51 )
52 modname = funcname[:d]
52 modname = funcname[:d]
53 oldpaths = sys.path
53 oldpaths = sys.path
54 if resourceutil.mainfrozen():
54 if resourceutil.mainfrozen():
55 # binary installs require sys.path manipulation
55 # binary installs require sys.path manipulation
56 modpath, modfile = os.path.split(modname)
56 modpath, modfile = os.path.split(modname)
57 if modpath and modfile:
57 if modpath and modfile:
58 sys.path = sys.path[:] + [modpath]
58 sys.path = sys.path[:] + [modpath]
59 modname = modfile
59 modname = modfile
60 with demandimport.deactivated():
60 with demandimport.deactivated():
61 try:
61 try:
62 obj = __import__(pycompat.sysstr(modname))
62 obj = __import__(pycompat.sysstr(modname))
63 except (ImportError, SyntaxError):
63 except (ImportError, SyntaxError):
64 e1 = sys.exc_info()
64 e1 = sys.exc_info()
65 try:
65 try:
66 # extensions are loaded with hgext_ prefix
66 # extensions are loaded with hgext_ prefix
67 obj = __import__("hgext_%s" % pycompat.sysstr(modname))
67 obj = __import__("hgext_%s" % pycompat.sysstr(modname))
68 except (ImportError, SyntaxError):
68 except (ImportError, SyntaxError):
69 e2 = sys.exc_info()
69 e2 = sys.exc_info()
70 if ui.tracebackflag:
70 if ui.tracebackflag:
71 ui.warn(
71 ui.warn(
72 _(
72 _(
73 b'exception from first failed import '
73 b'exception from first failed import '
74 b'attempt:\n'
74 b'attempt:\n'
75 )
75 )
76 )
76 )
77 ui.traceback(e1)
77 ui.traceback(e1)
78 if ui.tracebackflag:
78 if ui.tracebackflag:
79 ui.warn(
79 ui.warn(
80 _(
80 _(
81 b'exception from second failed import '
81 b'exception from second failed import '
82 b'attempt:\n'
82 b'attempt:\n'
83 )
83 )
84 )
84 )
85 ui.traceback(e2)
85 ui.traceback(e2)
86
86
87 if not ui.tracebackflag:
87 if not ui.tracebackflag:
88 tracebackhint = _(
88 tracebackhint = _(
89 b'run with --traceback for stack trace'
89 b'run with --traceback for stack trace'
90 )
90 )
91 else:
91 else:
92 tracebackhint = None
92 tracebackhint = None
93 raise error.HookLoadError(
93 raise error.HookLoadError(
94 _(b'%s hook is invalid: import of "%s" failed')
94 _(b'%s hook is invalid: import of "%s" failed')
95 % (hname, modname),
95 % (hname, modname),
96 hint=tracebackhint,
96 hint=tracebackhint,
97 )
97 )
98 sys.path = oldpaths
98 sys.path = oldpaths
99 try:
99 try:
100 for p in funcname.split(b'.')[1:]:
100 for p in funcname.split(b'.')[1:]:
101 obj = getattr(obj, p)
101 obj = getattr(obj, p)
102 except AttributeError:
102 except AttributeError:
103 raise error.HookLoadError(
103 raise error.HookLoadError(
104 _(b'%s hook is invalid: "%s" is not defined')
104 _(b'%s hook is invalid: "%s" is not defined')
105 % (hname, funcname)
105 % (hname, funcname)
106 )
106 )
107 if not callable(obj):
107 if not callable(obj):
108 raise error.HookLoadError(
108 raise error.HookLoadError(
109 _(b'%s hook is invalid: "%s" is not callable')
109 _(b'%s hook is invalid: "%s" is not callable')
110 % (hname, funcname)
110 % (hname, funcname)
111 )
111 )
112
112
113 ui.note(_(b"calling hook %s: %s\n") % (hname, funcname))
113 ui.note(_(b"calling hook %s: %s\n") % (hname, funcname))
114 starttime = util.timer()
114 starttime = util.timer()
115
115
116 try:
116 try:
117 r = obj(ui=ui, repo=repo, hooktype=htype, **pycompat.strkwargs(args))
117 r = obj(ui=ui, repo=repo, hooktype=htype, **pycompat.strkwargs(args))
118 except Exception as exc:
118 except Exception as exc:
119 if isinstance(exc, error.Abort):
119 if isinstance(exc, error.Abort):
120 ui.warn(_(b'error: %s hook failed: %s\n') % (hname, exc.args[0]))
120 ui.warn(_(b'error: %s hook failed: %s\n') % (hname, exc.args[0]))
121 else:
121 else:
122 ui.warn(
122 ui.warn(
123 _(b'error: %s hook raised an exception: %s\n')
123 _(b'error: %s hook raised an exception: %s\n')
124 % (hname, stringutil.forcebytestr(exc))
124 % (hname, stringutil.forcebytestr(exc))
125 )
125 )
126 if throw:
126 if throw:
127 raise
127 raise
128 if not ui.tracebackflag:
128 if not ui.tracebackflag:
129 ui.warn(_(b'(run with --traceback for stack trace)\n'))
129 ui.warn(_(b'(run with --traceback for stack trace)\n'))
130 ui.traceback()
130 ui.traceback()
131 return True, True
131 return True, True
132 finally:
132 finally:
133 duration = util.timer() - starttime
133 duration = util.timer() - starttime
134 ui.log(
134 ui.log(
135 b'pythonhook',
135 b'pythonhook',
136 b'pythonhook-%s: %s finished in %0.2f seconds\n',
136 b'pythonhook-%s: %s finished in %0.2f seconds\n',
137 htype,
137 htype,
138 funcname,
138 funcname,
139 duration,
139 duration,
140 )
140 )
141 if r:
141 if r:
142 if throw:
142 if throw:
143 raise error.HookAbort(_(b'%s hook failed') % hname)
143 raise error.HookAbort(_(b'%s hook failed') % hname)
144 ui.warn(_(b'warning: %s hook failed\n') % hname)
144 ui.warn(_(b'warning: %s hook failed\n') % hname)
145 return r, False
145 return r, False
146
146
147
147
148 def _exthook(ui, repo, htype, name, cmd, args, throw):
148 def _exthook(ui, repo, htype, name, cmd, args, throw):
149 starttime = util.timer()
149 starttime = util.timer()
150 env = {}
150 env = {}
151
151
152 # make in-memory changes visible to external process
152 # make in-memory changes visible to external process
153 if repo is not None:
153 if repo is not None:
154 tr = repo.currenttransaction()
154 tr = repo.currenttransaction()
155 repo.dirstate.write(tr)
155 repo.dirstate.write(tr)
156 if tr and tr.writepending():
156 if tr and tr.writepending():
157 env[b'HG_PENDING'] = repo.root
157 env[b'HG_PENDING'] = repo.root
158 env[b'HG_HOOKTYPE'] = htype
158 env[b'HG_HOOKTYPE'] = htype
159 env[b'HG_HOOKNAME'] = name
159 env[b'HG_HOOKNAME'] = name
160
160
161 plain = ui.configbool(b'hooks', b'%s:run-with-plain' % name)
161 if ui.config(b'hooks', b'%s:run-with-plain' % name) == b'auto':
162 plain = ui.plain()
163 else:
164 plain = ui.configbool(b'hooks', b'%s:run-with-plain' % name)
162 if plain:
165 if plain:
163 env[b'HGPLAIN'] = b'1'
166 env[b'HGPLAIN'] = b'1'
164 else:
167 else:
165 env[b'HGPLAIN'] = b''
168 env[b'HGPLAIN'] = b''
166
169
167 for k, v in pycompat.iteritems(args):
170 for k, v in pycompat.iteritems(args):
168 # transaction changes can accumulate MBs of data, so skip it
171 # transaction changes can accumulate MBs of data, so skip it
169 # for external hooks
172 # for external hooks
170 if k == b'changes':
173 if k == b'changes':
171 continue
174 continue
172 if callable(v):
175 if callable(v):
173 v = v()
176 v = v()
174 if isinstance(v, (dict, list)):
177 if isinstance(v, (dict, list)):
175 v = stringutil.pprint(v)
178 v = stringutil.pprint(v)
176 env[b'HG_' + k.upper()] = v
179 env[b'HG_' + k.upper()] = v
177
180
178 if ui.configbool(b'hooks', b'tonative.%s' % name, False):
181 if ui.configbool(b'hooks', b'tonative.%s' % name, False):
179 oldcmd = cmd
182 oldcmd = cmd
180 cmd = procutil.shelltonative(cmd, env)
183 cmd = procutil.shelltonative(cmd, env)
181 if cmd != oldcmd:
184 if cmd != oldcmd:
182 ui.note(_(b'converting hook "%s" to native\n') % name)
185 ui.note(_(b'converting hook "%s" to native\n') % name)
183
186
184 ui.note(_(b"running hook %s: %s\n") % (name, cmd))
187 ui.note(_(b"running hook %s: %s\n") % (name, cmd))
185
188
186 if repo:
189 if repo:
187 cwd = repo.root
190 cwd = repo.root
188 else:
191 else:
189 cwd = encoding.getcwd()
192 cwd = encoding.getcwd()
190 r = ui.system(cmd, environ=env, cwd=cwd, blockedtag=b'exthook-%s' % (name,))
193 r = ui.system(cmd, environ=env, cwd=cwd, blockedtag=b'exthook-%s' % (name,))
191
194
192 duration = util.timer() - starttime
195 duration = util.timer() - starttime
193 ui.log(
196 ui.log(
194 b'exthook',
197 b'exthook',
195 b'exthook-%s: %s finished in %0.2f seconds\n',
198 b'exthook-%s: %s finished in %0.2f seconds\n',
196 name,
199 name,
197 cmd,
200 cmd,
198 duration,
201 duration,
199 )
202 )
200 if r:
203 if r:
201 desc = procutil.explainexit(r)
204 desc = procutil.explainexit(r)
202 if throw:
205 if throw:
203 raise error.HookAbort(_(b'%s hook %s') % (name, desc))
206 raise error.HookAbort(_(b'%s hook %s') % (name, desc))
204 ui.warn(_(b'warning: %s hook %s\n') % (name, desc))
207 ui.warn(_(b'warning: %s hook %s\n') % (name, desc))
205 return r
208 return r
206
209
207
210
208 # represent an untrusted hook command
211 # represent an untrusted hook command
209 _fromuntrusted = object()
212 _fromuntrusted = object()
210
213
211
214
212 def _allhooks(ui):
215 def _allhooks(ui):
213 """return a list of (hook-id, cmd) pairs sorted by priority"""
216 """return a list of (hook-id, cmd) pairs sorted by priority"""
214 hooks = _hookitems(ui)
217 hooks = _hookitems(ui)
215 # Be careful in this section, propagating the real commands from untrusted
218 # Be careful in this section, propagating the real commands from untrusted
216 # sources would create a security vulnerability, make sure anything altered
219 # sources would create a security vulnerability, make sure anything altered
217 # in that section uses "_fromuntrusted" as its command.
220 # in that section uses "_fromuntrusted" as its command.
218 untrustedhooks = _hookitems(ui, _untrusted=True)
221 untrustedhooks = _hookitems(ui, _untrusted=True)
219 for name, value in untrustedhooks.items():
222 for name, value in untrustedhooks.items():
220 trustedvalue = hooks.get(name, ((), (), name, _fromuntrusted))
223 trustedvalue = hooks.get(name, ((), (), name, _fromuntrusted))
221 if value != trustedvalue:
224 if value != trustedvalue:
222 (lp, lo, lk, lv) = trustedvalue
225 (lp, lo, lk, lv) = trustedvalue
223 hooks[name] = (lp, lo, lk, _fromuntrusted)
226 hooks[name] = (lp, lo, lk, _fromuntrusted)
224 # (end of the security sensitive section)
227 # (end of the security sensitive section)
225 return [(k, v) for p, o, k, v in sorted(hooks.values())]
228 return [(k, v) for p, o, k, v in sorted(hooks.values())]
226
229
227
230
228 def _hookitems(ui, _untrusted=False):
231 def _hookitems(ui, _untrusted=False):
229 """return all hooks items ready to be sorted"""
232 """return all hooks items ready to be sorted"""
230 hooks = {}
233 hooks = {}
231 for name, cmd in ui.configitems(b'hooks', untrusted=_untrusted):
234 for name, cmd in ui.configitems(b'hooks', untrusted=_untrusted):
232 if (
235 if (
233 name.startswith(b'priority.')
236 name.startswith(b'priority.')
234 or name.startswith(b'tonative.')
237 or name.startswith(b'tonative.')
235 or b':' in name
238 or b':' in name
236 ):
239 ):
237 continue
240 continue
238
241
239 priority = ui.configint(b'hooks', b'priority.%s' % name, 0)
242 priority = ui.configint(b'hooks', b'priority.%s' % name, 0)
240 hooks[name] = ((-priority,), (len(hooks),), name, cmd)
243 hooks[name] = ((-priority,), (len(hooks),), name, cmd)
241 return hooks
244 return hooks
242
245
243
246
244 _redirect = False
247 _redirect = False
245
248
246
249
247 def redirect(state):
250 def redirect(state):
248 global _redirect
251 global _redirect
249 _redirect = state
252 _redirect = state
250
253
251
254
252 def hashook(ui, htype):
255 def hashook(ui, htype):
253 """return True if a hook is configured for 'htype'"""
256 """return True if a hook is configured for 'htype'"""
254 if not ui.callhooks:
257 if not ui.callhooks:
255 return False
258 return False
256 for hname, cmd in _allhooks(ui):
259 for hname, cmd in _allhooks(ui):
257 if hname.split(b'.')[0] == htype and cmd:
260 if hname.split(b'.')[0] == htype and cmd:
258 return True
261 return True
259 return False
262 return False
260
263
261
264
262 def hook(ui, repo, htype, throw=False, **args):
265 def hook(ui, repo, htype, throw=False, **args):
263 if not ui.callhooks:
266 if not ui.callhooks:
264 return False
267 return False
265
268
266 hooks = []
269 hooks = []
267 for hname, cmd in _allhooks(ui):
270 for hname, cmd in _allhooks(ui):
268 if hname.split(b'.')[0] == htype and cmd:
271 if hname.split(b'.')[0] == htype and cmd:
269 hooks.append((hname, cmd))
272 hooks.append((hname, cmd))
270
273
271 res = runhooks(ui, repo, htype, hooks, throw=throw, **args)
274 res = runhooks(ui, repo, htype, hooks, throw=throw, **args)
272 r = False
275 r = False
273 for hname, cmd in hooks:
276 for hname, cmd in hooks:
274 r = res[hname][0] or r
277 r = res[hname][0] or r
275 return r
278 return r
276
279
277
280
278 @contextlib.contextmanager
281 @contextlib.contextmanager
279 def redirect_stdio():
282 def redirect_stdio():
280 """Redirects stdout to stderr, if possible."""
283 """Redirects stdout to stderr, if possible."""
281
284
282 oldstdout = -1
285 oldstdout = -1
283 try:
286 try:
284 if _redirect:
287 if _redirect:
285 try:
288 try:
286 stdoutno = procutil.stdout.fileno()
289 stdoutno = procutil.stdout.fileno()
287 stderrno = procutil.stderr.fileno()
290 stderrno = procutil.stderr.fileno()
288 # temporarily redirect stdout to stderr, if possible
291 # temporarily redirect stdout to stderr, if possible
289 if stdoutno >= 0 and stderrno >= 0:
292 if stdoutno >= 0 and stderrno >= 0:
290 procutil.stdout.flush()
293 procutil.stdout.flush()
291 oldstdout = os.dup(stdoutno)
294 oldstdout = os.dup(stdoutno)
292 os.dup2(stderrno, stdoutno)
295 os.dup2(stderrno, stdoutno)
293 except (OSError, AttributeError):
296 except (OSError, AttributeError):
294 # files seem to be bogus, give up on redirecting (WSGI, etc)
297 # files seem to be bogus, give up on redirecting (WSGI, etc)
295 pass
298 pass
296
299
297 yield
300 yield
298
301
299 finally:
302 finally:
300 # The stderr is fully buffered on Windows when connected to a pipe.
303 # The stderr is fully buffered on Windows when connected to a pipe.
301 # A forcible flush is required to make small stderr data in the
304 # A forcible flush is required to make small stderr data in the
302 # remote side available to the client immediately.
305 # remote side available to the client immediately.
303 try:
306 try:
304 procutil.stderr.flush()
307 procutil.stderr.flush()
305 except IOError as err:
308 except IOError as err:
306 if err.errno not in (errno.EPIPE, errno.EIO, errno.EBADF):
309 if err.errno not in (errno.EPIPE, errno.EIO, errno.EBADF):
307 raise error.StdioError(err)
310 raise error.StdioError(err)
308
311
309 if _redirect and oldstdout >= 0:
312 if _redirect and oldstdout >= 0:
310 try:
313 try:
311 procutil.stdout.flush() # write hook output to stderr fd
314 procutil.stdout.flush() # write hook output to stderr fd
312 except IOError as err:
315 except IOError as err:
313 if err.errno not in (errno.EPIPE, errno.EIO, errno.EBADF):
316 if err.errno not in (errno.EPIPE, errno.EIO, errno.EBADF):
314 raise error.StdioError(err)
317 raise error.StdioError(err)
315 os.dup2(oldstdout, stdoutno)
318 os.dup2(oldstdout, stdoutno)
316 os.close(oldstdout)
319 os.close(oldstdout)
317
320
318
321
319 def runhooks(ui, repo, htype, hooks, throw=False, **args):
322 def runhooks(ui, repo, htype, hooks, throw=False, **args):
320 args = pycompat.byteskwargs(args)
323 args = pycompat.byteskwargs(args)
321 res = {}
324 res = {}
322
325
323 with redirect_stdio():
326 with redirect_stdio():
324 for hname, cmd in hooks:
327 for hname, cmd in hooks:
325 if cmd is _fromuntrusted:
328 if cmd is _fromuntrusted:
326 if throw:
329 if throw:
327 raise error.HookAbort(
330 raise error.HookAbort(
328 _(b'untrusted hook %s not executed') % hname,
331 _(b'untrusted hook %s not executed') % hname,
329 hint=_(b"see 'hg help config.trusted'"),
332 hint=_(b"see 'hg help config.trusted'"),
330 )
333 )
331 ui.warn(_(b'warning: untrusted hook %s not executed\n') % hname)
334 ui.warn(_(b'warning: untrusted hook %s not executed\n') % hname)
332 r = 1
335 r = 1
333 raised = False
336 raised = False
334 elif callable(cmd):
337 elif callable(cmd):
335 r, raised = pythonhook(ui, repo, htype, hname, cmd, args, throw)
338 r, raised = pythonhook(ui, repo, htype, hname, cmd, args, throw)
336 elif cmd.startswith(b'python:'):
339 elif cmd.startswith(b'python:'):
337 if cmd.count(b':') >= 2:
340 if cmd.count(b':') >= 2:
338 path, cmd = cmd[7:].rsplit(b':', 1)
341 path, cmd = cmd[7:].rsplit(b':', 1)
339 path = util.expandpath(path)
342 path = util.expandpath(path)
340 if repo:
343 if repo:
341 path = os.path.join(repo.root, path)
344 path = os.path.join(repo.root, path)
342 try:
345 try:
343 mod = extensions.loadpath(path, b'hghook.%s' % hname)
346 mod = extensions.loadpath(path, b'hghook.%s' % hname)
344 except Exception:
347 except Exception:
345 ui.write(_(b"loading %s hook failed:\n") % hname)
348 ui.write(_(b"loading %s hook failed:\n") % hname)
346 raise
349 raise
347 hookfn = getattr(mod, cmd)
350 hookfn = getattr(mod, cmd)
348 else:
351 else:
349 hookfn = cmd[7:].strip()
352 hookfn = cmd[7:].strip()
350 r, raised = pythonhook(
353 r, raised = pythonhook(
351 ui, repo, htype, hname, hookfn, args, throw
354 ui, repo, htype, hname, hookfn, args, throw
352 )
355 )
353 else:
356 else:
354 r = _exthook(ui, repo, htype, hname, cmd, args, throw)
357 r = _exthook(ui, repo, htype, hname, cmd, args, throw)
355 raised = False
358 raised = False
356
359
357 res[hname] = r, raised
360 res[hname] = r, raised
358
361
359 return res
362 return res
@@ -1,1427 +1,1431
1 commit hooks can see env vars
1 commit hooks can see env vars
2 (and post-transaction one are run unlocked)
2 (and post-transaction one are run unlocked)
3
3
4
4
5 $ cat > $TESTTMP/txnabort.checkargs.py <<EOF
5 $ cat > $TESTTMP/txnabort.checkargs.py <<EOF
6 > from mercurial import pycompat
6 > from mercurial import pycompat
7 > def showargs(ui, repo, hooktype, **kwargs):
7 > def showargs(ui, repo, hooktype, **kwargs):
8 > kwargs = pycompat.byteskwargs(kwargs)
8 > kwargs = pycompat.byteskwargs(kwargs)
9 > ui.write(b'%s Python hook: %s\n' % (hooktype,
9 > ui.write(b'%s Python hook: %s\n' % (hooktype,
10 > b','.join(sorted(kwargs))))
10 > b','.join(sorted(kwargs))))
11 > EOF
11 > EOF
12
12
13 $ hg init a
13 $ hg init a
14 $ cd a
14 $ cd a
15 $ cat > .hg/hgrc <<EOF
15 $ cat > .hg/hgrc <<EOF
16 > [hooks]
16 > [hooks]
17 > commit = sh -c "HG_LOCAL= HG_TAG= printenv.py --line commit"
17 > commit = sh -c "HG_LOCAL= HG_TAG= printenv.py --line commit"
18 > commit.b = sh -c "HG_LOCAL= HG_TAG= printenv.py --line commit.b"
18 > commit.b = sh -c "HG_LOCAL= HG_TAG= printenv.py --line commit.b"
19 > precommit = sh -c "HG_LOCAL= HG_NODE= HG_TAG= printenv.py --line precommit"
19 > precommit = sh -c "HG_LOCAL= HG_NODE= HG_TAG= printenv.py --line precommit"
20 > pretxncommit = sh -c "HG_LOCAL= HG_TAG= printenv.py --line pretxncommit"
20 > pretxncommit = sh -c "HG_LOCAL= HG_TAG= printenv.py --line pretxncommit"
21 > pretxncommit.tip = hg -q tip
21 > pretxncommit.tip = hg -q tip
22 > pre-identify = sh -c "printenv.py --line pre-identify 1"
22 > pre-identify = sh -c "printenv.py --line pre-identify 1"
23 > pre-cat = sh -c "printenv.py --line pre-cat"
23 > pre-cat = sh -c "printenv.py --line pre-cat"
24 > post-cat = sh -c "printenv.py --line post-cat"
24 > post-cat = sh -c "printenv.py --line post-cat"
25 > pretxnopen = sh -c "HG_LOCAL= HG_TAG= printenv.py --line pretxnopen"
25 > pretxnopen = sh -c "HG_LOCAL= HG_TAG= printenv.py --line pretxnopen"
26 > pretxnclose = sh -c "HG_LOCAL= HG_TAG= printenv.py --line pretxnclose"
26 > pretxnclose = sh -c "HG_LOCAL= HG_TAG= printenv.py --line pretxnclose"
27 > txnclose = sh -c "HG_LOCAL= HG_TAG= printenv.py --line txnclose"
27 > txnclose = sh -c "HG_LOCAL= HG_TAG= printenv.py --line txnclose"
28 > txnabort.0 = python:$TESTTMP/txnabort.checkargs.py:showargs
28 > txnabort.0 = python:$TESTTMP/txnabort.checkargs.py:showargs
29 > txnabort.1 = sh -c "HG_LOCAL= HG_TAG= printenv.py --line txnabort"
29 > txnabort.1 = sh -c "HG_LOCAL= HG_TAG= printenv.py --line txnabort"
30 > txnclose.checklock = sh -c "hg debuglock > /dev/null"
30 > txnclose.checklock = sh -c "hg debuglock > /dev/null"
31 > EOF
31 > EOF
32 $ echo a > a
32 $ echo a > a
33 $ hg add a
33 $ hg add a
34 $ hg commit -m a
34 $ hg commit -m a
35 precommit hook: HG_HOOKNAME=precommit
35 precommit hook: HG_HOOKNAME=precommit
36 HG_HOOKTYPE=precommit
36 HG_HOOKTYPE=precommit
37 HG_PARENT1=0000000000000000000000000000000000000000
37 HG_PARENT1=0000000000000000000000000000000000000000
38
38
39 pretxnopen hook: HG_HOOKNAME=pretxnopen
39 pretxnopen hook: HG_HOOKNAME=pretxnopen
40 HG_HOOKTYPE=pretxnopen
40 HG_HOOKTYPE=pretxnopen
41 HG_TXNID=TXN:$ID$
41 HG_TXNID=TXN:$ID$
42 HG_TXNNAME=commit
42 HG_TXNNAME=commit
43
43
44 pretxncommit hook: HG_HOOKNAME=pretxncommit
44 pretxncommit hook: HG_HOOKNAME=pretxncommit
45 HG_HOOKTYPE=pretxncommit
45 HG_HOOKTYPE=pretxncommit
46 HG_NODE=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
46 HG_NODE=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
47 HG_PARENT1=0000000000000000000000000000000000000000
47 HG_PARENT1=0000000000000000000000000000000000000000
48 HG_PENDING=$TESTTMP/a
48 HG_PENDING=$TESTTMP/a
49
49
50 0:cb9a9f314b8b
50 0:cb9a9f314b8b
51 pretxnclose hook: HG_HOOKNAME=pretxnclose
51 pretxnclose hook: HG_HOOKNAME=pretxnclose
52 HG_HOOKTYPE=pretxnclose
52 HG_HOOKTYPE=pretxnclose
53 HG_PENDING=$TESTTMP/a
53 HG_PENDING=$TESTTMP/a
54 HG_PHASES_MOVED=1
54 HG_PHASES_MOVED=1
55 HG_TXNID=TXN:$ID$
55 HG_TXNID=TXN:$ID$
56 HG_TXNNAME=commit
56 HG_TXNNAME=commit
57
57
58 txnclose hook: HG_HOOKNAME=txnclose
58 txnclose hook: HG_HOOKNAME=txnclose
59 HG_HOOKTYPE=txnclose
59 HG_HOOKTYPE=txnclose
60 HG_PHASES_MOVED=1
60 HG_PHASES_MOVED=1
61 HG_TXNID=TXN:$ID$
61 HG_TXNID=TXN:$ID$
62 HG_TXNNAME=commit
62 HG_TXNNAME=commit
63
63
64 commit hook: HG_HOOKNAME=commit
64 commit hook: HG_HOOKNAME=commit
65 HG_HOOKTYPE=commit
65 HG_HOOKTYPE=commit
66 HG_NODE=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
66 HG_NODE=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
67 HG_PARENT1=0000000000000000000000000000000000000000
67 HG_PARENT1=0000000000000000000000000000000000000000
68
68
69 commit.b hook: HG_HOOKNAME=commit.b
69 commit.b hook: HG_HOOKNAME=commit.b
70 HG_HOOKTYPE=commit
70 HG_HOOKTYPE=commit
71 HG_NODE=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
71 HG_NODE=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
72 HG_PARENT1=0000000000000000000000000000000000000000
72 HG_PARENT1=0000000000000000000000000000000000000000
73
73
74
74
75 $ hg clone . ../b
75 $ hg clone . ../b
76 updating to branch default
76 updating to branch default
77 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
77 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
78 $ cd ../b
78 $ cd ../b
79
79
80 changegroup hooks can see env vars
80 changegroup hooks can see env vars
81
81
82 $ cat > .hg/hgrc <<EOF
82 $ cat > .hg/hgrc <<EOF
83 > [hooks]
83 > [hooks]
84 > prechangegroup = sh -c "printenv.py --line prechangegroup"
84 > prechangegroup = sh -c "printenv.py --line prechangegroup"
85 > changegroup = sh -c "printenv.py --line changegroup"
85 > changegroup = sh -c "printenv.py --line changegroup"
86 > incoming = sh -c "printenv.py --line incoming"
86 > incoming = sh -c "printenv.py --line incoming"
87 > EOF
87 > EOF
88
88
89 pretxncommit and commit hooks can see both parents of merge
89 pretxncommit and commit hooks can see both parents of merge
90
90
91 $ cd ../a
91 $ cd ../a
92 $ echo b >> a
92 $ echo b >> a
93 $ hg commit -m a1 -d "1 0"
93 $ hg commit -m a1 -d "1 0"
94 precommit hook: HG_HOOKNAME=precommit
94 precommit hook: HG_HOOKNAME=precommit
95 HG_HOOKTYPE=precommit
95 HG_HOOKTYPE=precommit
96 HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
96 HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
97
97
98 pretxnopen hook: HG_HOOKNAME=pretxnopen
98 pretxnopen hook: HG_HOOKNAME=pretxnopen
99 HG_HOOKTYPE=pretxnopen
99 HG_HOOKTYPE=pretxnopen
100 HG_TXNID=TXN:$ID$
100 HG_TXNID=TXN:$ID$
101 HG_TXNNAME=commit
101 HG_TXNNAME=commit
102
102
103 pretxncommit hook: HG_HOOKNAME=pretxncommit
103 pretxncommit hook: HG_HOOKNAME=pretxncommit
104 HG_HOOKTYPE=pretxncommit
104 HG_HOOKTYPE=pretxncommit
105 HG_NODE=ab228980c14deea8b9555d91c9581127383e40fd
105 HG_NODE=ab228980c14deea8b9555d91c9581127383e40fd
106 HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
106 HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
107 HG_PENDING=$TESTTMP/a
107 HG_PENDING=$TESTTMP/a
108
108
109 1:ab228980c14d
109 1:ab228980c14d
110 pretxnclose hook: HG_HOOKNAME=pretxnclose
110 pretxnclose hook: HG_HOOKNAME=pretxnclose
111 HG_HOOKTYPE=pretxnclose
111 HG_HOOKTYPE=pretxnclose
112 HG_PENDING=$TESTTMP/a
112 HG_PENDING=$TESTTMP/a
113 HG_TXNID=TXN:$ID$
113 HG_TXNID=TXN:$ID$
114 HG_TXNNAME=commit
114 HG_TXNNAME=commit
115
115
116 txnclose hook: HG_HOOKNAME=txnclose
116 txnclose hook: HG_HOOKNAME=txnclose
117 HG_HOOKTYPE=txnclose
117 HG_HOOKTYPE=txnclose
118 HG_TXNID=TXN:$ID$
118 HG_TXNID=TXN:$ID$
119 HG_TXNNAME=commit
119 HG_TXNNAME=commit
120
120
121 commit hook: HG_HOOKNAME=commit
121 commit hook: HG_HOOKNAME=commit
122 HG_HOOKTYPE=commit
122 HG_HOOKTYPE=commit
123 HG_NODE=ab228980c14deea8b9555d91c9581127383e40fd
123 HG_NODE=ab228980c14deea8b9555d91c9581127383e40fd
124 HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
124 HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
125
125
126 commit.b hook: HG_HOOKNAME=commit.b
126 commit.b hook: HG_HOOKNAME=commit.b
127 HG_HOOKTYPE=commit
127 HG_HOOKTYPE=commit
128 HG_NODE=ab228980c14deea8b9555d91c9581127383e40fd
128 HG_NODE=ab228980c14deea8b9555d91c9581127383e40fd
129 HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
129 HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
130
130
131 $ hg update -C 0
131 $ hg update -C 0
132 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
132 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
133 $ echo b > b
133 $ echo b > b
134 $ hg add b
134 $ hg add b
135 $ hg commit -m b -d '1 0'
135 $ hg commit -m b -d '1 0'
136 precommit hook: HG_HOOKNAME=precommit
136 precommit hook: HG_HOOKNAME=precommit
137 HG_HOOKTYPE=precommit
137 HG_HOOKTYPE=precommit
138 HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
138 HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
139
139
140 pretxnopen hook: HG_HOOKNAME=pretxnopen
140 pretxnopen hook: HG_HOOKNAME=pretxnopen
141 HG_HOOKTYPE=pretxnopen
141 HG_HOOKTYPE=pretxnopen
142 HG_TXNID=TXN:$ID$
142 HG_TXNID=TXN:$ID$
143 HG_TXNNAME=commit
143 HG_TXNNAME=commit
144
144
145 pretxncommit hook: HG_HOOKNAME=pretxncommit
145 pretxncommit hook: HG_HOOKNAME=pretxncommit
146 HG_HOOKTYPE=pretxncommit
146 HG_HOOKTYPE=pretxncommit
147 HG_NODE=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2
147 HG_NODE=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2
148 HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
148 HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
149 HG_PENDING=$TESTTMP/a
149 HG_PENDING=$TESTTMP/a
150
150
151 2:ee9deb46ab31
151 2:ee9deb46ab31
152 pretxnclose hook: HG_HOOKNAME=pretxnclose
152 pretxnclose hook: HG_HOOKNAME=pretxnclose
153 HG_HOOKTYPE=pretxnclose
153 HG_HOOKTYPE=pretxnclose
154 HG_PENDING=$TESTTMP/a
154 HG_PENDING=$TESTTMP/a
155 HG_TXNID=TXN:$ID$
155 HG_TXNID=TXN:$ID$
156 HG_TXNNAME=commit
156 HG_TXNNAME=commit
157
157
158 created new head
158 created new head
159 txnclose hook: HG_HOOKNAME=txnclose
159 txnclose hook: HG_HOOKNAME=txnclose
160 HG_HOOKTYPE=txnclose
160 HG_HOOKTYPE=txnclose
161 HG_TXNID=TXN:$ID$
161 HG_TXNID=TXN:$ID$
162 HG_TXNNAME=commit
162 HG_TXNNAME=commit
163
163
164 commit hook: HG_HOOKNAME=commit
164 commit hook: HG_HOOKNAME=commit
165 HG_HOOKTYPE=commit
165 HG_HOOKTYPE=commit
166 HG_NODE=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2
166 HG_NODE=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2
167 HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
167 HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
168
168
169 commit.b hook: HG_HOOKNAME=commit.b
169 commit.b hook: HG_HOOKNAME=commit.b
170 HG_HOOKTYPE=commit
170 HG_HOOKTYPE=commit
171 HG_NODE=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2
171 HG_NODE=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2
172 HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
172 HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
173
173
174 $ hg merge 1
174 $ hg merge 1
175 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
175 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
176 (branch merge, don't forget to commit)
176 (branch merge, don't forget to commit)
177 $ hg commit -m merge -d '2 0'
177 $ hg commit -m merge -d '2 0'
178 precommit hook: HG_HOOKNAME=precommit
178 precommit hook: HG_HOOKNAME=precommit
179 HG_HOOKTYPE=precommit
179 HG_HOOKTYPE=precommit
180 HG_PARENT1=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2
180 HG_PARENT1=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2
181 HG_PARENT2=ab228980c14deea8b9555d91c9581127383e40fd
181 HG_PARENT2=ab228980c14deea8b9555d91c9581127383e40fd
182
182
183 pretxnopen hook: HG_HOOKNAME=pretxnopen
183 pretxnopen hook: HG_HOOKNAME=pretxnopen
184 HG_HOOKTYPE=pretxnopen
184 HG_HOOKTYPE=pretxnopen
185 HG_TXNID=TXN:$ID$
185 HG_TXNID=TXN:$ID$
186 HG_TXNNAME=commit
186 HG_TXNNAME=commit
187
187
188 pretxncommit hook: HG_HOOKNAME=pretxncommit
188 pretxncommit hook: HG_HOOKNAME=pretxncommit
189 HG_HOOKTYPE=pretxncommit
189 HG_HOOKTYPE=pretxncommit
190 HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2
190 HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2
191 HG_PARENT1=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2
191 HG_PARENT1=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2
192 HG_PARENT2=ab228980c14deea8b9555d91c9581127383e40fd
192 HG_PARENT2=ab228980c14deea8b9555d91c9581127383e40fd
193 HG_PENDING=$TESTTMP/a
193 HG_PENDING=$TESTTMP/a
194
194
195 3:07f3376c1e65
195 3:07f3376c1e65
196 pretxnclose hook: HG_HOOKNAME=pretxnclose
196 pretxnclose hook: HG_HOOKNAME=pretxnclose
197 HG_HOOKTYPE=pretxnclose
197 HG_HOOKTYPE=pretxnclose
198 HG_PENDING=$TESTTMP/a
198 HG_PENDING=$TESTTMP/a
199 HG_TXNID=TXN:$ID$
199 HG_TXNID=TXN:$ID$
200 HG_TXNNAME=commit
200 HG_TXNNAME=commit
201
201
202 txnclose hook: HG_HOOKNAME=txnclose
202 txnclose hook: HG_HOOKNAME=txnclose
203 HG_HOOKTYPE=txnclose
203 HG_HOOKTYPE=txnclose
204 HG_TXNID=TXN:$ID$
204 HG_TXNID=TXN:$ID$
205 HG_TXNNAME=commit
205 HG_TXNNAME=commit
206
206
207 commit hook: HG_HOOKNAME=commit
207 commit hook: HG_HOOKNAME=commit
208 HG_HOOKTYPE=commit
208 HG_HOOKTYPE=commit
209 HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2
209 HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2
210 HG_PARENT1=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2
210 HG_PARENT1=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2
211 HG_PARENT2=ab228980c14deea8b9555d91c9581127383e40fd
211 HG_PARENT2=ab228980c14deea8b9555d91c9581127383e40fd
212
212
213 commit.b hook: HG_HOOKNAME=commit.b
213 commit.b hook: HG_HOOKNAME=commit.b
214 HG_HOOKTYPE=commit
214 HG_HOOKTYPE=commit
215 HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2
215 HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2
216 HG_PARENT1=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2
216 HG_PARENT1=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2
217 HG_PARENT2=ab228980c14deea8b9555d91c9581127383e40fd
217 HG_PARENT2=ab228980c14deea8b9555d91c9581127383e40fd
218
218
219
219
220 test generic hooks
220 test generic hooks
221
221
222 $ hg id
222 $ hg id
223 pre-identify hook: HG_ARGS=id
223 pre-identify hook: HG_ARGS=id
224 HG_HOOKNAME=pre-identify
224 HG_HOOKNAME=pre-identify
225 HG_HOOKTYPE=pre-identify
225 HG_HOOKTYPE=pre-identify
226 HG_OPTS={'bookmarks': None, 'branch': None, 'id': None, 'insecure': None, 'num': None, 'remotecmd': '', 'rev': '', 'ssh': '', 'tags': None, 'template': ''}
226 HG_OPTS={'bookmarks': None, 'branch': None, 'id': None, 'insecure': None, 'num': None, 'remotecmd': '', 'rev': '', 'ssh': '', 'tags': None, 'template': ''}
227 HG_PATS=[]
227 HG_PATS=[]
228
228
229 abort: pre-identify hook exited with status 1
229 abort: pre-identify hook exited with status 1
230 [40]
230 [40]
231 $ hg cat b
231 $ hg cat b
232 pre-cat hook: HG_ARGS=cat b
232 pre-cat hook: HG_ARGS=cat b
233 HG_HOOKNAME=pre-cat
233 HG_HOOKNAME=pre-cat
234 HG_HOOKTYPE=pre-cat
234 HG_HOOKTYPE=pre-cat
235 HG_OPTS={'decode': None, 'exclude': [], 'include': [], 'output': '', 'rev': '', 'template': ''}
235 HG_OPTS={'decode': None, 'exclude': [], 'include': [], 'output': '', 'rev': '', 'template': ''}
236 HG_PATS=['b']
236 HG_PATS=['b']
237
237
238 b
238 b
239 post-cat hook: HG_ARGS=cat b
239 post-cat hook: HG_ARGS=cat b
240 HG_HOOKNAME=post-cat
240 HG_HOOKNAME=post-cat
241 HG_HOOKTYPE=post-cat
241 HG_HOOKTYPE=post-cat
242 HG_OPTS={'decode': None, 'exclude': [], 'include': [], 'output': '', 'rev': '', 'template': ''}
242 HG_OPTS={'decode': None, 'exclude': [], 'include': [], 'output': '', 'rev': '', 'template': ''}
243 HG_PATS=['b']
243 HG_PATS=['b']
244 HG_RESULT=0
244 HG_RESULT=0
245
245
246
246
247 $ cd ../b
247 $ cd ../b
248 $ hg pull ../a
248 $ hg pull ../a
249 pulling from ../a
249 pulling from ../a
250 searching for changes
250 searching for changes
251 prechangegroup hook: HG_HOOKNAME=prechangegroup
251 prechangegroup hook: HG_HOOKNAME=prechangegroup
252 HG_HOOKTYPE=prechangegroup
252 HG_HOOKTYPE=prechangegroup
253 HG_SOURCE=pull
253 HG_SOURCE=pull
254 HG_TXNID=TXN:$ID$
254 HG_TXNID=TXN:$ID$
255 HG_TXNNAME=pull
255 HG_TXNNAME=pull
256 file:/*/$TESTTMP/a (glob)
256 file:/*/$TESTTMP/a (glob)
257 HG_URL=file:$TESTTMP/a
257 HG_URL=file:$TESTTMP/a
258
258
259 adding changesets
259 adding changesets
260 adding manifests
260 adding manifests
261 adding file changes
261 adding file changes
262 added 3 changesets with 2 changes to 2 files
262 added 3 changesets with 2 changes to 2 files
263 new changesets ab228980c14d:07f3376c1e65
263 new changesets ab228980c14d:07f3376c1e65
264 changegroup hook: HG_HOOKNAME=changegroup
264 changegroup hook: HG_HOOKNAME=changegroup
265 HG_HOOKTYPE=changegroup
265 HG_HOOKTYPE=changegroup
266 HG_NODE=ab228980c14deea8b9555d91c9581127383e40fd
266 HG_NODE=ab228980c14deea8b9555d91c9581127383e40fd
267 HG_NODE_LAST=07f3376c1e655977439df2a814e3cc14b27abac2
267 HG_NODE_LAST=07f3376c1e655977439df2a814e3cc14b27abac2
268 HG_SOURCE=pull
268 HG_SOURCE=pull
269 HG_TXNID=TXN:$ID$
269 HG_TXNID=TXN:$ID$
270 HG_TXNNAME=pull
270 HG_TXNNAME=pull
271 file:/*/$TESTTMP/a (glob)
271 file:/*/$TESTTMP/a (glob)
272 HG_URL=file:$TESTTMP/a
272 HG_URL=file:$TESTTMP/a
273
273
274 incoming hook: HG_HOOKNAME=incoming
274 incoming hook: HG_HOOKNAME=incoming
275 HG_HOOKTYPE=incoming
275 HG_HOOKTYPE=incoming
276 HG_NODE=ab228980c14deea8b9555d91c9581127383e40fd
276 HG_NODE=ab228980c14deea8b9555d91c9581127383e40fd
277 HG_SOURCE=pull
277 HG_SOURCE=pull
278 HG_TXNID=TXN:$ID$
278 HG_TXNID=TXN:$ID$
279 HG_TXNNAME=pull
279 HG_TXNNAME=pull
280 file:/*/$TESTTMP/a (glob)
280 file:/*/$TESTTMP/a (glob)
281 HG_URL=file:$TESTTMP/a
281 HG_URL=file:$TESTTMP/a
282
282
283 incoming hook: HG_HOOKNAME=incoming
283 incoming hook: HG_HOOKNAME=incoming
284 HG_HOOKTYPE=incoming
284 HG_HOOKTYPE=incoming
285 HG_NODE=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2
285 HG_NODE=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2
286 HG_SOURCE=pull
286 HG_SOURCE=pull
287 HG_TXNID=TXN:$ID$
287 HG_TXNID=TXN:$ID$
288 HG_TXNNAME=pull
288 HG_TXNNAME=pull
289 file:/*/$TESTTMP/a (glob)
289 file:/*/$TESTTMP/a (glob)
290 HG_URL=file:$TESTTMP/a
290 HG_URL=file:$TESTTMP/a
291
291
292 incoming hook: HG_HOOKNAME=incoming
292 incoming hook: HG_HOOKNAME=incoming
293 HG_HOOKTYPE=incoming
293 HG_HOOKTYPE=incoming
294 HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2
294 HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2
295 HG_SOURCE=pull
295 HG_SOURCE=pull
296 HG_TXNID=TXN:$ID$
296 HG_TXNID=TXN:$ID$
297 HG_TXNNAME=pull
297 HG_TXNNAME=pull
298 file:/*/$TESTTMP/a (glob)
298 file:/*/$TESTTMP/a (glob)
299 HG_URL=file:$TESTTMP/a
299 HG_URL=file:$TESTTMP/a
300
300
301 (run 'hg update' to get a working copy)
301 (run 'hg update' to get a working copy)
302
302
303 tag hooks can see env vars
303 tag hooks can see env vars
304
304
305 $ cd ../a
305 $ cd ../a
306 $ cat >> .hg/hgrc <<EOF
306 $ cat >> .hg/hgrc <<EOF
307 > pretag = sh -c "printenv.py --line pretag"
307 > pretag = sh -c "printenv.py --line pretag"
308 > tag = sh -c "HG_PARENT1= HG_PARENT2= printenv.py --line tag"
308 > tag = sh -c "HG_PARENT1= HG_PARENT2= printenv.py --line tag"
309 > EOF
309 > EOF
310 $ hg tag -d '3 0' a
310 $ hg tag -d '3 0' a
311 pretag hook: HG_HOOKNAME=pretag
311 pretag hook: HG_HOOKNAME=pretag
312 HG_HOOKTYPE=pretag
312 HG_HOOKTYPE=pretag
313 HG_LOCAL=0
313 HG_LOCAL=0
314 HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2
314 HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2
315 HG_TAG=a
315 HG_TAG=a
316
316
317 precommit hook: HG_HOOKNAME=precommit
317 precommit hook: HG_HOOKNAME=precommit
318 HG_HOOKTYPE=precommit
318 HG_HOOKTYPE=precommit
319 HG_PARENT1=07f3376c1e655977439df2a814e3cc14b27abac2
319 HG_PARENT1=07f3376c1e655977439df2a814e3cc14b27abac2
320
320
321 pretxnopen hook: HG_HOOKNAME=pretxnopen
321 pretxnopen hook: HG_HOOKNAME=pretxnopen
322 HG_HOOKTYPE=pretxnopen
322 HG_HOOKTYPE=pretxnopen
323 HG_TXNID=TXN:$ID$
323 HG_TXNID=TXN:$ID$
324 HG_TXNNAME=commit
324 HG_TXNNAME=commit
325
325
326 pretxncommit hook: HG_HOOKNAME=pretxncommit
326 pretxncommit hook: HG_HOOKNAME=pretxncommit
327 HG_HOOKTYPE=pretxncommit
327 HG_HOOKTYPE=pretxncommit
328 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
328 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
329 HG_PARENT1=07f3376c1e655977439df2a814e3cc14b27abac2
329 HG_PARENT1=07f3376c1e655977439df2a814e3cc14b27abac2
330 HG_PENDING=$TESTTMP/a
330 HG_PENDING=$TESTTMP/a
331
331
332 4:539e4b31b6dc
332 4:539e4b31b6dc
333 pretxnclose hook: HG_HOOKNAME=pretxnclose
333 pretxnclose hook: HG_HOOKNAME=pretxnclose
334 HG_HOOKTYPE=pretxnclose
334 HG_HOOKTYPE=pretxnclose
335 HG_PENDING=$TESTTMP/a
335 HG_PENDING=$TESTTMP/a
336 HG_TXNID=TXN:$ID$
336 HG_TXNID=TXN:$ID$
337 HG_TXNNAME=commit
337 HG_TXNNAME=commit
338
338
339 tag hook: HG_HOOKNAME=tag
339 tag hook: HG_HOOKNAME=tag
340 HG_HOOKTYPE=tag
340 HG_HOOKTYPE=tag
341 HG_LOCAL=0
341 HG_LOCAL=0
342 HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2
342 HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2
343 HG_TAG=a
343 HG_TAG=a
344
344
345 txnclose hook: HG_HOOKNAME=txnclose
345 txnclose hook: HG_HOOKNAME=txnclose
346 HG_HOOKTYPE=txnclose
346 HG_HOOKTYPE=txnclose
347 HG_TXNID=TXN:$ID$
347 HG_TXNID=TXN:$ID$
348 HG_TXNNAME=commit
348 HG_TXNNAME=commit
349
349
350 commit hook: HG_HOOKNAME=commit
350 commit hook: HG_HOOKNAME=commit
351 HG_HOOKTYPE=commit
351 HG_HOOKTYPE=commit
352 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
352 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
353 HG_PARENT1=07f3376c1e655977439df2a814e3cc14b27abac2
353 HG_PARENT1=07f3376c1e655977439df2a814e3cc14b27abac2
354
354
355 commit.b hook: HG_HOOKNAME=commit.b
355 commit.b hook: HG_HOOKNAME=commit.b
356 HG_HOOKTYPE=commit
356 HG_HOOKTYPE=commit
357 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
357 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
358 HG_PARENT1=07f3376c1e655977439df2a814e3cc14b27abac2
358 HG_PARENT1=07f3376c1e655977439df2a814e3cc14b27abac2
359
359
360 $ hg tag -l la
360 $ hg tag -l la
361 pretag hook: HG_HOOKNAME=pretag
361 pretag hook: HG_HOOKNAME=pretag
362 HG_HOOKTYPE=pretag
362 HG_HOOKTYPE=pretag
363 HG_LOCAL=1
363 HG_LOCAL=1
364 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
364 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
365 HG_TAG=la
365 HG_TAG=la
366
366
367 tag hook: HG_HOOKNAME=tag
367 tag hook: HG_HOOKNAME=tag
368 HG_HOOKTYPE=tag
368 HG_HOOKTYPE=tag
369 HG_LOCAL=1
369 HG_LOCAL=1
370 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
370 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
371 HG_TAG=la
371 HG_TAG=la
372
372
373
373
374 pretag hook can forbid tagging
374 pretag hook can forbid tagging
375
375
376 $ cat >> .hg/hgrc <<EOF
376 $ cat >> .hg/hgrc <<EOF
377 > pretag.forbid = sh -c "printenv.py --line pretag.forbid 1"
377 > pretag.forbid = sh -c "printenv.py --line pretag.forbid 1"
378 > EOF
378 > EOF
379 $ hg tag -d '4 0' fa
379 $ hg tag -d '4 0' fa
380 pretag hook: HG_HOOKNAME=pretag
380 pretag hook: HG_HOOKNAME=pretag
381 HG_HOOKTYPE=pretag
381 HG_HOOKTYPE=pretag
382 HG_LOCAL=0
382 HG_LOCAL=0
383 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
383 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
384 HG_TAG=fa
384 HG_TAG=fa
385
385
386 pretag.forbid hook: HG_HOOKNAME=pretag.forbid
386 pretag.forbid hook: HG_HOOKNAME=pretag.forbid
387 HG_HOOKTYPE=pretag
387 HG_HOOKTYPE=pretag
388 HG_LOCAL=0
388 HG_LOCAL=0
389 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
389 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
390 HG_TAG=fa
390 HG_TAG=fa
391
391
392 abort: pretag.forbid hook exited with status 1
392 abort: pretag.forbid hook exited with status 1
393 [40]
393 [40]
394 $ hg tag -l fla
394 $ hg tag -l fla
395 pretag hook: HG_HOOKNAME=pretag
395 pretag hook: HG_HOOKNAME=pretag
396 HG_HOOKTYPE=pretag
396 HG_HOOKTYPE=pretag
397 HG_LOCAL=1
397 HG_LOCAL=1
398 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
398 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
399 HG_TAG=fla
399 HG_TAG=fla
400
400
401 pretag.forbid hook: HG_HOOKNAME=pretag.forbid
401 pretag.forbid hook: HG_HOOKNAME=pretag.forbid
402 HG_HOOKTYPE=pretag
402 HG_HOOKTYPE=pretag
403 HG_LOCAL=1
403 HG_LOCAL=1
404 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
404 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
405 HG_TAG=fla
405 HG_TAG=fla
406
406
407 abort: pretag.forbid hook exited with status 1
407 abort: pretag.forbid hook exited with status 1
408 [40]
408 [40]
409
409
410 pretxncommit hook can see changeset, can roll back txn, changeset no
410 pretxncommit hook can see changeset, can roll back txn, changeset no
411 more there after
411 more there after
412
412
413 $ cat >> .hg/hgrc <<EOF
413 $ cat >> .hg/hgrc <<EOF
414 > pretxncommit.forbid0 = sh -c "hg tip -q"
414 > pretxncommit.forbid0 = sh -c "hg tip -q"
415 > pretxncommit.forbid1 = sh -c "printenv.py --line pretxncommit.forbid 1"
415 > pretxncommit.forbid1 = sh -c "printenv.py --line pretxncommit.forbid 1"
416 > EOF
416 > EOF
417 $ echo z > z
417 $ echo z > z
418 $ hg add z
418 $ hg add z
419 $ hg -q tip
419 $ hg -q tip
420 4:539e4b31b6dc
420 4:539e4b31b6dc
421 $ hg commit -m 'fail' -d '4 0'
421 $ hg commit -m 'fail' -d '4 0'
422 precommit hook: HG_HOOKNAME=precommit
422 precommit hook: HG_HOOKNAME=precommit
423 HG_HOOKTYPE=precommit
423 HG_HOOKTYPE=precommit
424 HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
424 HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
425
425
426 pretxnopen hook: HG_HOOKNAME=pretxnopen
426 pretxnopen hook: HG_HOOKNAME=pretxnopen
427 HG_HOOKTYPE=pretxnopen
427 HG_HOOKTYPE=pretxnopen
428 HG_TXNID=TXN:$ID$
428 HG_TXNID=TXN:$ID$
429 HG_TXNNAME=commit
429 HG_TXNNAME=commit
430
430
431 pretxncommit hook: HG_HOOKNAME=pretxncommit
431 pretxncommit hook: HG_HOOKNAME=pretxncommit
432 HG_HOOKTYPE=pretxncommit
432 HG_HOOKTYPE=pretxncommit
433 HG_NODE=6f611f8018c10e827fee6bd2bc807f937e761567
433 HG_NODE=6f611f8018c10e827fee6bd2bc807f937e761567
434 HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
434 HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
435 HG_PENDING=$TESTTMP/a
435 HG_PENDING=$TESTTMP/a
436
436
437 5:6f611f8018c1
437 5:6f611f8018c1
438 5:6f611f8018c1
438 5:6f611f8018c1
439 pretxncommit.forbid hook: HG_HOOKNAME=pretxncommit.forbid1
439 pretxncommit.forbid hook: HG_HOOKNAME=pretxncommit.forbid1
440 HG_HOOKTYPE=pretxncommit
440 HG_HOOKTYPE=pretxncommit
441 HG_NODE=6f611f8018c10e827fee6bd2bc807f937e761567
441 HG_NODE=6f611f8018c10e827fee6bd2bc807f937e761567
442 HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
442 HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
443 HG_PENDING=$TESTTMP/a
443 HG_PENDING=$TESTTMP/a
444
444
445 transaction abort!
445 transaction abort!
446 txnabort Python hook: changes,txnid,txnname
446 txnabort Python hook: changes,txnid,txnname
447 txnabort hook: HG_HOOKNAME=txnabort.1
447 txnabort hook: HG_HOOKNAME=txnabort.1
448 HG_HOOKTYPE=txnabort
448 HG_HOOKTYPE=txnabort
449 HG_TXNID=TXN:$ID$
449 HG_TXNID=TXN:$ID$
450 HG_TXNNAME=commit
450 HG_TXNNAME=commit
451
451
452 rollback completed
452 rollback completed
453 abort: pretxncommit.forbid1 hook exited with status 1
453 abort: pretxncommit.forbid1 hook exited with status 1
454 [40]
454 [40]
455 $ hg -q tip
455 $ hg -q tip
456 4:539e4b31b6dc
456 4:539e4b31b6dc
457
457
458 (Check that no 'changelog.i.a' file were left behind)
458 (Check that no 'changelog.i.a' file were left behind)
459
459
460 $ ls -1 .hg/store/
460 $ ls -1 .hg/store/
461 00changelog.i
461 00changelog.i
462 00manifest.i
462 00manifest.i
463 data
463 data
464 fncache (repofncache !)
464 fncache (repofncache !)
465 journal.phaseroots
465 journal.phaseroots
466 phaseroots
466 phaseroots
467 undo
467 undo
468 undo.backup.fncache (repofncache !)
468 undo.backup.fncache (repofncache !)
469 undo.backupfiles
469 undo.backupfiles
470 undo.phaseroots
470 undo.phaseroots
471
471
472
472
473 precommit hook can prevent commit
473 precommit hook can prevent commit
474
474
475 $ cat >> .hg/hgrc <<EOF
475 $ cat >> .hg/hgrc <<EOF
476 > precommit.forbid = sh -c "printenv.py --line precommit.forbid 1"
476 > precommit.forbid = sh -c "printenv.py --line precommit.forbid 1"
477 > EOF
477 > EOF
478 $ hg commit -m 'fail' -d '4 0'
478 $ hg commit -m 'fail' -d '4 0'
479 precommit hook: HG_HOOKNAME=precommit
479 precommit hook: HG_HOOKNAME=precommit
480 HG_HOOKTYPE=precommit
480 HG_HOOKTYPE=precommit
481 HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
481 HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
482
482
483 precommit.forbid hook: HG_HOOKNAME=precommit.forbid
483 precommit.forbid hook: HG_HOOKNAME=precommit.forbid
484 HG_HOOKTYPE=precommit
484 HG_HOOKTYPE=precommit
485 HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
485 HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
486
486
487 abort: precommit.forbid hook exited with status 1
487 abort: precommit.forbid hook exited with status 1
488 [40]
488 [40]
489 $ hg -q tip
489 $ hg -q tip
490 4:539e4b31b6dc
490 4:539e4b31b6dc
491
491
492 preupdate hook can prevent update
492 preupdate hook can prevent update
493
493
494 $ cat >> .hg/hgrc <<EOF
494 $ cat >> .hg/hgrc <<EOF
495 > preupdate = sh -c "printenv.py --line preupdate"
495 > preupdate = sh -c "printenv.py --line preupdate"
496 > EOF
496 > EOF
497 $ hg update 1
497 $ hg update 1
498 preupdate hook: HG_HOOKNAME=preupdate
498 preupdate hook: HG_HOOKNAME=preupdate
499 HG_HOOKTYPE=preupdate
499 HG_HOOKTYPE=preupdate
500 HG_PARENT1=ab228980c14d
500 HG_PARENT1=ab228980c14d
501
501
502 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
502 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
503
503
504 update hook
504 update hook
505
505
506 $ cat >> .hg/hgrc <<EOF
506 $ cat >> .hg/hgrc <<EOF
507 > update = sh -c "printenv.py --line update"
507 > update = sh -c "printenv.py --line update"
508 > EOF
508 > EOF
509 $ hg update
509 $ hg update
510 preupdate hook: HG_HOOKNAME=preupdate
510 preupdate hook: HG_HOOKNAME=preupdate
511 HG_HOOKTYPE=preupdate
511 HG_HOOKTYPE=preupdate
512 HG_PARENT1=539e4b31b6dc
512 HG_PARENT1=539e4b31b6dc
513
513
514 update hook: HG_ERROR=0
514 update hook: HG_ERROR=0
515 HG_HOOKNAME=update
515 HG_HOOKNAME=update
516 HG_HOOKTYPE=update
516 HG_HOOKTYPE=update
517 HG_PARENT1=539e4b31b6dc
517 HG_PARENT1=539e4b31b6dc
518
518
519 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
519 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
520
520
521 pushkey hook
521 pushkey hook
522
522
523 $ cat >> .hg/hgrc <<EOF
523 $ cat >> .hg/hgrc <<EOF
524 > pushkey = sh -c "printenv.py --line pushkey"
524 > pushkey = sh -c "printenv.py --line pushkey"
525 > EOF
525 > EOF
526 $ cd ../b
526 $ cd ../b
527 $ hg bookmark -r null foo
527 $ hg bookmark -r null foo
528 $ hg push -B foo ../a
528 $ hg push -B foo ../a
529 pushing to ../a
529 pushing to ../a
530 searching for changes
530 searching for changes
531 no changes found
531 no changes found
532 pretxnopen hook: HG_HOOKNAME=pretxnopen
532 pretxnopen hook: HG_HOOKNAME=pretxnopen
533 HG_HOOKTYPE=pretxnopen
533 HG_HOOKTYPE=pretxnopen
534 HG_TXNID=TXN:$ID$
534 HG_TXNID=TXN:$ID$
535 HG_TXNNAME=push
535 HG_TXNNAME=push
536
536
537 pretxnclose hook: HG_BOOKMARK_MOVED=1
537 pretxnclose hook: HG_BOOKMARK_MOVED=1
538 HG_BUNDLE2=1
538 HG_BUNDLE2=1
539 HG_HOOKNAME=pretxnclose
539 HG_HOOKNAME=pretxnclose
540 HG_HOOKTYPE=pretxnclose
540 HG_HOOKTYPE=pretxnclose
541 HG_PENDING=$TESTTMP/a
541 HG_PENDING=$TESTTMP/a
542 HG_SOURCE=push
542 HG_SOURCE=push
543 HG_TXNID=TXN:$ID$
543 HG_TXNID=TXN:$ID$
544 HG_TXNNAME=push
544 HG_TXNNAME=push
545 HG_URL=file:$TESTTMP/a
545 HG_URL=file:$TESTTMP/a
546
546
547 pushkey hook: HG_BUNDLE2=1
547 pushkey hook: HG_BUNDLE2=1
548 HG_HOOKNAME=pushkey
548 HG_HOOKNAME=pushkey
549 HG_HOOKTYPE=pushkey
549 HG_HOOKTYPE=pushkey
550 HG_KEY=foo
550 HG_KEY=foo
551 HG_NAMESPACE=bookmarks
551 HG_NAMESPACE=bookmarks
552 HG_NEW=0000000000000000000000000000000000000000
552 HG_NEW=0000000000000000000000000000000000000000
553 HG_PUSHKEYCOMPAT=1
553 HG_PUSHKEYCOMPAT=1
554 HG_SOURCE=push
554 HG_SOURCE=push
555 HG_TXNID=TXN:$ID$
555 HG_TXNID=TXN:$ID$
556 HG_TXNNAME=push
556 HG_TXNNAME=push
557 HG_URL=file:$TESTTMP/a
557 HG_URL=file:$TESTTMP/a
558
558
559 txnclose hook: HG_BOOKMARK_MOVED=1
559 txnclose hook: HG_BOOKMARK_MOVED=1
560 HG_BUNDLE2=1
560 HG_BUNDLE2=1
561 HG_HOOKNAME=txnclose
561 HG_HOOKNAME=txnclose
562 HG_HOOKTYPE=txnclose
562 HG_HOOKTYPE=txnclose
563 HG_SOURCE=push
563 HG_SOURCE=push
564 HG_TXNID=TXN:$ID$
564 HG_TXNID=TXN:$ID$
565 HG_TXNNAME=push
565 HG_TXNNAME=push
566 HG_URL=file:$TESTTMP/a
566 HG_URL=file:$TESTTMP/a
567
567
568 exporting bookmark foo
568 exporting bookmark foo
569 [1]
569 [1]
570 $ cd ../a
570 $ cd ../a
571
571
572 listkeys hook
572 listkeys hook
573
573
574 $ cat >> .hg/hgrc <<EOF
574 $ cat >> .hg/hgrc <<EOF
575 > listkeys = sh -c "printenv.py --line listkeys"
575 > listkeys = sh -c "printenv.py --line listkeys"
576 > EOF
576 > EOF
577 $ hg bookmark -r null bar
577 $ hg bookmark -r null bar
578 pretxnopen hook: HG_HOOKNAME=pretxnopen
578 pretxnopen hook: HG_HOOKNAME=pretxnopen
579 HG_HOOKTYPE=pretxnopen
579 HG_HOOKTYPE=pretxnopen
580 HG_TXNID=TXN:$ID$
580 HG_TXNID=TXN:$ID$
581 HG_TXNNAME=bookmark
581 HG_TXNNAME=bookmark
582
582
583 pretxnclose hook: HG_BOOKMARK_MOVED=1
583 pretxnclose hook: HG_BOOKMARK_MOVED=1
584 HG_HOOKNAME=pretxnclose
584 HG_HOOKNAME=pretxnclose
585 HG_HOOKTYPE=pretxnclose
585 HG_HOOKTYPE=pretxnclose
586 HG_PENDING=$TESTTMP/a
586 HG_PENDING=$TESTTMP/a
587 HG_TXNID=TXN:$ID$
587 HG_TXNID=TXN:$ID$
588 HG_TXNNAME=bookmark
588 HG_TXNNAME=bookmark
589
589
590 txnclose hook: HG_BOOKMARK_MOVED=1
590 txnclose hook: HG_BOOKMARK_MOVED=1
591 HG_HOOKNAME=txnclose
591 HG_HOOKNAME=txnclose
592 HG_HOOKTYPE=txnclose
592 HG_HOOKTYPE=txnclose
593 HG_TXNID=TXN:$ID$
593 HG_TXNID=TXN:$ID$
594 HG_TXNNAME=bookmark
594 HG_TXNNAME=bookmark
595
595
596 $ cd ../b
596 $ cd ../b
597 $ hg pull -B bar ../a
597 $ hg pull -B bar ../a
598 pulling from ../a
598 pulling from ../a
599 listkeys hook: HG_HOOKNAME=listkeys
599 listkeys hook: HG_HOOKNAME=listkeys
600 HG_HOOKTYPE=listkeys
600 HG_HOOKTYPE=listkeys
601 HG_NAMESPACE=bookmarks
601 HG_NAMESPACE=bookmarks
602 HG_VALUES={'bar': '0000000000000000000000000000000000000000', 'foo': '0000000000000000000000000000000000000000'}
602 HG_VALUES={'bar': '0000000000000000000000000000000000000000', 'foo': '0000000000000000000000000000000000000000'}
603
603
604 no changes found
604 no changes found
605 adding remote bookmark bar
605 adding remote bookmark bar
606 $ cd ../a
606 $ cd ../a
607
607
608 test that prepushkey can prevent incoming keys
608 test that prepushkey can prevent incoming keys
609
609
610 $ cat >> .hg/hgrc <<EOF
610 $ cat >> .hg/hgrc <<EOF
611 > prepushkey = sh -c "printenv.py --line prepushkey.forbid 1"
611 > prepushkey = sh -c "printenv.py --line prepushkey.forbid 1"
612 > EOF
612 > EOF
613 $ cd ../b
613 $ cd ../b
614 $ hg bookmark -r null baz
614 $ hg bookmark -r null baz
615 $ hg push -B baz ../a
615 $ hg push -B baz ../a
616 pushing to ../a
616 pushing to ../a
617 searching for changes
617 searching for changes
618 listkeys hook: HG_HOOKNAME=listkeys
618 listkeys hook: HG_HOOKNAME=listkeys
619 HG_HOOKTYPE=listkeys
619 HG_HOOKTYPE=listkeys
620 HG_NAMESPACE=phases
620 HG_NAMESPACE=phases
621 HG_VALUES={'cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b': '1', 'publishing': 'True'}
621 HG_VALUES={'cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b': '1', 'publishing': 'True'}
622
622
623 listkeys hook: HG_HOOKNAME=listkeys
623 listkeys hook: HG_HOOKNAME=listkeys
624 HG_HOOKTYPE=listkeys
624 HG_HOOKTYPE=listkeys
625 HG_NAMESPACE=bookmarks
625 HG_NAMESPACE=bookmarks
626 HG_VALUES={'bar': '0000000000000000000000000000000000000000', 'foo': '0000000000000000000000000000000000000000'}
626 HG_VALUES={'bar': '0000000000000000000000000000000000000000', 'foo': '0000000000000000000000000000000000000000'}
627
627
628 no changes found
628 no changes found
629 pretxnopen hook: HG_HOOKNAME=pretxnopen
629 pretxnopen hook: HG_HOOKNAME=pretxnopen
630 HG_HOOKTYPE=pretxnopen
630 HG_HOOKTYPE=pretxnopen
631 HG_TXNID=TXN:$ID$
631 HG_TXNID=TXN:$ID$
632 HG_TXNNAME=push
632 HG_TXNNAME=push
633
633
634 prepushkey.forbid hook: HG_BUNDLE2=1
634 prepushkey.forbid hook: HG_BUNDLE2=1
635 HG_HOOKNAME=prepushkey
635 HG_HOOKNAME=prepushkey
636 HG_HOOKTYPE=prepushkey
636 HG_HOOKTYPE=prepushkey
637 HG_KEY=baz
637 HG_KEY=baz
638 HG_NAMESPACE=bookmarks
638 HG_NAMESPACE=bookmarks
639 HG_NEW=0000000000000000000000000000000000000000
639 HG_NEW=0000000000000000000000000000000000000000
640 HG_PUSHKEYCOMPAT=1
640 HG_PUSHKEYCOMPAT=1
641 HG_SOURCE=push
641 HG_SOURCE=push
642 HG_TXNID=TXN:$ID$
642 HG_TXNID=TXN:$ID$
643 HG_TXNNAME=push
643 HG_TXNNAME=push
644 HG_URL=file:$TESTTMP/a
644 HG_URL=file:$TESTTMP/a
645
645
646 abort: prepushkey hook exited with status 1
646 abort: prepushkey hook exited with status 1
647 [40]
647 [40]
648 $ cd ../a
648 $ cd ../a
649
649
650 test that prelistkeys can prevent listing keys
650 test that prelistkeys can prevent listing keys
651
651
652 $ cat >> .hg/hgrc <<EOF
652 $ cat >> .hg/hgrc <<EOF
653 > prelistkeys = sh -c "printenv.py --line prelistkeys.forbid 1"
653 > prelistkeys = sh -c "printenv.py --line prelistkeys.forbid 1"
654 > EOF
654 > EOF
655 $ hg bookmark -r null quux
655 $ hg bookmark -r null quux
656 pretxnopen hook: HG_HOOKNAME=pretxnopen
656 pretxnopen hook: HG_HOOKNAME=pretxnopen
657 HG_HOOKTYPE=pretxnopen
657 HG_HOOKTYPE=pretxnopen
658 HG_TXNID=TXN:$ID$
658 HG_TXNID=TXN:$ID$
659 HG_TXNNAME=bookmark
659 HG_TXNNAME=bookmark
660
660
661 pretxnclose hook: HG_BOOKMARK_MOVED=1
661 pretxnclose hook: HG_BOOKMARK_MOVED=1
662 HG_HOOKNAME=pretxnclose
662 HG_HOOKNAME=pretxnclose
663 HG_HOOKTYPE=pretxnclose
663 HG_HOOKTYPE=pretxnclose
664 HG_PENDING=$TESTTMP/a
664 HG_PENDING=$TESTTMP/a
665 HG_TXNID=TXN:$ID$
665 HG_TXNID=TXN:$ID$
666 HG_TXNNAME=bookmark
666 HG_TXNNAME=bookmark
667
667
668 txnclose hook: HG_BOOKMARK_MOVED=1
668 txnclose hook: HG_BOOKMARK_MOVED=1
669 HG_HOOKNAME=txnclose
669 HG_HOOKNAME=txnclose
670 HG_HOOKTYPE=txnclose
670 HG_HOOKTYPE=txnclose
671 HG_TXNID=TXN:$ID$
671 HG_TXNID=TXN:$ID$
672 HG_TXNNAME=bookmark
672 HG_TXNNAME=bookmark
673
673
674 $ cd ../b
674 $ cd ../b
675 $ hg pull -B quux ../a
675 $ hg pull -B quux ../a
676 pulling from ../a
676 pulling from ../a
677 prelistkeys.forbid hook: HG_HOOKNAME=prelistkeys
677 prelistkeys.forbid hook: HG_HOOKNAME=prelistkeys
678 HG_HOOKTYPE=prelistkeys
678 HG_HOOKTYPE=prelistkeys
679 HG_NAMESPACE=bookmarks
679 HG_NAMESPACE=bookmarks
680
680
681 abort: prelistkeys hook exited with status 1
681 abort: prelistkeys hook exited with status 1
682 [40]
682 [40]
683 $ cd ../a
683 $ cd ../a
684 $ rm .hg/hgrc
684 $ rm .hg/hgrc
685
685
686 prechangegroup hook can prevent incoming changes
686 prechangegroup hook can prevent incoming changes
687
687
688 $ cd ../b
688 $ cd ../b
689 $ hg -q tip
689 $ hg -q tip
690 3:07f3376c1e65
690 3:07f3376c1e65
691 $ cat > .hg/hgrc <<EOF
691 $ cat > .hg/hgrc <<EOF
692 > [hooks]
692 > [hooks]
693 > prechangegroup.forbid = sh -c "printenv.py --line prechangegroup.forbid 1"
693 > prechangegroup.forbid = sh -c "printenv.py --line prechangegroup.forbid 1"
694 > EOF
694 > EOF
695 $ hg pull ../a
695 $ hg pull ../a
696 pulling from ../a
696 pulling from ../a
697 searching for changes
697 searching for changes
698 prechangegroup.forbid hook: HG_HOOKNAME=prechangegroup.forbid
698 prechangegroup.forbid hook: HG_HOOKNAME=prechangegroup.forbid
699 HG_HOOKTYPE=prechangegroup
699 HG_HOOKTYPE=prechangegroup
700 HG_SOURCE=pull
700 HG_SOURCE=pull
701 HG_TXNID=TXN:$ID$
701 HG_TXNID=TXN:$ID$
702 HG_TXNNAME=pull
702 HG_TXNNAME=pull
703 file:/*/$TESTTMP/a (glob)
703 file:/*/$TESTTMP/a (glob)
704 HG_URL=file:$TESTTMP/a
704 HG_URL=file:$TESTTMP/a
705
705
706 abort: prechangegroup.forbid hook exited with status 1
706 abort: prechangegroup.forbid hook exited with status 1
707 [40]
707 [40]
708
708
709 pretxnchangegroup hook can see incoming changes, can roll back txn,
709 pretxnchangegroup hook can see incoming changes, can roll back txn,
710 incoming changes no longer there after
710 incoming changes no longer there after
711
711
712 $ cat > .hg/hgrc <<EOF
712 $ cat > .hg/hgrc <<EOF
713 > [hooks]
713 > [hooks]
714 > pretxnchangegroup.forbid0 = hg tip -q
714 > pretxnchangegroup.forbid0 = hg tip -q
715 > pretxnchangegroup.forbid1 = sh -c "printenv.py --line pretxnchangegroup.forbid 1"
715 > pretxnchangegroup.forbid1 = sh -c "printenv.py --line pretxnchangegroup.forbid 1"
716 > EOF
716 > EOF
717 $ hg pull ../a
717 $ hg pull ../a
718 pulling from ../a
718 pulling from ../a
719 searching for changes
719 searching for changes
720 adding changesets
720 adding changesets
721 adding manifests
721 adding manifests
722 adding file changes
722 adding file changes
723 4:539e4b31b6dc
723 4:539e4b31b6dc
724 pretxnchangegroup.forbid hook: HG_HOOKNAME=pretxnchangegroup.forbid1
724 pretxnchangegroup.forbid hook: HG_HOOKNAME=pretxnchangegroup.forbid1
725 HG_HOOKTYPE=pretxnchangegroup
725 HG_HOOKTYPE=pretxnchangegroup
726 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
726 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
727 HG_NODE_LAST=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
727 HG_NODE_LAST=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
728 HG_PENDING=$TESTTMP/b
728 HG_PENDING=$TESTTMP/b
729 HG_SOURCE=pull
729 HG_SOURCE=pull
730 HG_TXNID=TXN:$ID$
730 HG_TXNID=TXN:$ID$
731 HG_TXNNAME=pull
731 HG_TXNNAME=pull
732 file:/*/$TESTTMP/a (glob)
732 file:/*/$TESTTMP/a (glob)
733 HG_URL=file:$TESTTMP/a
733 HG_URL=file:$TESTTMP/a
734
734
735 transaction abort!
735 transaction abort!
736 rollback completed
736 rollback completed
737 abort: pretxnchangegroup.forbid1 hook exited with status 1
737 abort: pretxnchangegroup.forbid1 hook exited with status 1
738 [40]
738 [40]
739 $ hg -q tip
739 $ hg -q tip
740 3:07f3376c1e65
740 3:07f3376c1e65
741
741
742 outgoing hooks can see env vars
742 outgoing hooks can see env vars
743
743
744 $ rm .hg/hgrc
744 $ rm .hg/hgrc
745 $ cat > ../a/.hg/hgrc <<EOF
745 $ cat > ../a/.hg/hgrc <<EOF
746 > [hooks]
746 > [hooks]
747 > preoutgoing = sh -c "printenv.py --line preoutgoing"
747 > preoutgoing = sh -c "printenv.py --line preoutgoing"
748 > outgoing = sh -c "printenv.py --line outgoing"
748 > outgoing = sh -c "printenv.py --line outgoing"
749 > EOF
749 > EOF
750 $ hg pull ../a
750 $ hg pull ../a
751 pulling from ../a
751 pulling from ../a
752 searching for changes
752 searching for changes
753 preoutgoing hook: HG_HOOKNAME=preoutgoing
753 preoutgoing hook: HG_HOOKNAME=preoutgoing
754 HG_HOOKTYPE=preoutgoing
754 HG_HOOKTYPE=preoutgoing
755 HG_SOURCE=pull
755 HG_SOURCE=pull
756
756
757 outgoing hook: HG_HOOKNAME=outgoing
757 outgoing hook: HG_HOOKNAME=outgoing
758 HG_HOOKTYPE=outgoing
758 HG_HOOKTYPE=outgoing
759 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
759 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
760 HG_SOURCE=pull
760 HG_SOURCE=pull
761
761
762 adding changesets
762 adding changesets
763 adding manifests
763 adding manifests
764 adding file changes
764 adding file changes
765 adding remote bookmark quux
765 adding remote bookmark quux
766 added 1 changesets with 1 changes to 1 files
766 added 1 changesets with 1 changes to 1 files
767 new changesets 539e4b31b6dc
767 new changesets 539e4b31b6dc
768 (run 'hg update' to get a working copy)
768 (run 'hg update' to get a working copy)
769 $ hg rollback
769 $ hg rollback
770 repository tip rolled back to revision 3 (undo pull)
770 repository tip rolled back to revision 3 (undo pull)
771
771
772 preoutgoing hook can prevent outgoing changes
772 preoutgoing hook can prevent outgoing changes
773
773
774 $ cat >> ../a/.hg/hgrc <<EOF
774 $ cat >> ../a/.hg/hgrc <<EOF
775 > preoutgoing.forbid = sh -c "printenv.py --line preoutgoing.forbid 1"
775 > preoutgoing.forbid = sh -c "printenv.py --line preoutgoing.forbid 1"
776 > EOF
776 > EOF
777 $ hg pull ../a
777 $ hg pull ../a
778 pulling from ../a
778 pulling from ../a
779 searching for changes
779 searching for changes
780 preoutgoing hook: HG_HOOKNAME=preoutgoing
780 preoutgoing hook: HG_HOOKNAME=preoutgoing
781 HG_HOOKTYPE=preoutgoing
781 HG_HOOKTYPE=preoutgoing
782 HG_SOURCE=pull
782 HG_SOURCE=pull
783
783
784 preoutgoing.forbid hook: HG_HOOKNAME=preoutgoing.forbid
784 preoutgoing.forbid hook: HG_HOOKNAME=preoutgoing.forbid
785 HG_HOOKTYPE=preoutgoing
785 HG_HOOKTYPE=preoutgoing
786 HG_SOURCE=pull
786 HG_SOURCE=pull
787
787
788 abort: preoutgoing.forbid hook exited with status 1
788 abort: preoutgoing.forbid hook exited with status 1
789 [40]
789 [40]
790
790
791 outgoing hooks work for local clones
791 outgoing hooks work for local clones
792
792
793 $ cd ..
793 $ cd ..
794 $ cat > a/.hg/hgrc <<EOF
794 $ cat > a/.hg/hgrc <<EOF
795 > [hooks]
795 > [hooks]
796 > preoutgoing = sh -c "printenv.py --line preoutgoing"
796 > preoutgoing = sh -c "printenv.py --line preoutgoing"
797 > outgoing = sh -c "printenv.py --line outgoing"
797 > outgoing = sh -c "printenv.py --line outgoing"
798 > EOF
798 > EOF
799 $ hg clone a c
799 $ hg clone a c
800 preoutgoing hook: HG_HOOKNAME=preoutgoing
800 preoutgoing hook: HG_HOOKNAME=preoutgoing
801 HG_HOOKTYPE=preoutgoing
801 HG_HOOKTYPE=preoutgoing
802 HG_SOURCE=clone
802 HG_SOURCE=clone
803
803
804 outgoing hook: HG_HOOKNAME=outgoing
804 outgoing hook: HG_HOOKNAME=outgoing
805 HG_HOOKTYPE=outgoing
805 HG_HOOKTYPE=outgoing
806 HG_NODE=0000000000000000000000000000000000000000
806 HG_NODE=0000000000000000000000000000000000000000
807 HG_SOURCE=clone
807 HG_SOURCE=clone
808
808
809 updating to branch default
809 updating to branch default
810 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
810 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
811 $ rm -rf c
811 $ rm -rf c
812
812
813 preoutgoing hook can prevent outgoing changes for local clones
813 preoutgoing hook can prevent outgoing changes for local clones
814
814
815 $ cat >> a/.hg/hgrc <<EOF
815 $ cat >> a/.hg/hgrc <<EOF
816 > preoutgoing.forbid = sh -c "printenv.py --line preoutgoing.forbid 1"
816 > preoutgoing.forbid = sh -c "printenv.py --line preoutgoing.forbid 1"
817 > EOF
817 > EOF
818 $ hg clone a zzz
818 $ hg clone a zzz
819 preoutgoing hook: HG_HOOKNAME=preoutgoing
819 preoutgoing hook: HG_HOOKNAME=preoutgoing
820 HG_HOOKTYPE=preoutgoing
820 HG_HOOKTYPE=preoutgoing
821 HG_SOURCE=clone
821 HG_SOURCE=clone
822
822
823 preoutgoing.forbid hook: HG_HOOKNAME=preoutgoing.forbid
823 preoutgoing.forbid hook: HG_HOOKNAME=preoutgoing.forbid
824 HG_HOOKTYPE=preoutgoing
824 HG_HOOKTYPE=preoutgoing
825 HG_SOURCE=clone
825 HG_SOURCE=clone
826
826
827 abort: preoutgoing.forbid hook exited with status 1
827 abort: preoutgoing.forbid hook exited with status 1
828 [40]
828 [40]
829
829
830 $ cd "$TESTTMP/b"
830 $ cd "$TESTTMP/b"
831
831
832 $ cat > hooktests.py <<EOF
832 $ cat > hooktests.py <<EOF
833 > from __future__ import print_function
833 > from __future__ import print_function
834 > from mercurial import (
834 > from mercurial import (
835 > error,
835 > error,
836 > pycompat,
836 > pycompat,
837 > )
837 > )
838 >
838 >
839 > uncallable = 0
839 > uncallable = 0
840 >
840 >
841 > def printargs(ui, args):
841 > def printargs(ui, args):
842 > a = list(pycompat.byteskwargs(args).items())
842 > a = list(pycompat.byteskwargs(args).items())
843 > a.sort()
843 > a.sort()
844 > ui.write(b'hook args:\n')
844 > ui.write(b'hook args:\n')
845 > for k, v in a:
845 > for k, v in a:
846 > ui.write(b' %s %s\n' % (k, v))
846 > ui.write(b' %s %s\n' % (k, v))
847 >
847 >
848 > def passhook(ui, repo, **args):
848 > def passhook(ui, repo, **args):
849 > printargs(ui, args)
849 > printargs(ui, args)
850 >
850 >
851 > def failhook(ui, repo, **args):
851 > def failhook(ui, repo, **args):
852 > printargs(ui, args)
852 > printargs(ui, args)
853 > return True
853 > return True
854 >
854 >
855 > class LocalException(Exception):
855 > class LocalException(Exception):
856 > pass
856 > pass
857 >
857 >
858 > def raisehook(**args):
858 > def raisehook(**args):
859 > raise LocalException('exception from hook')
859 > raise LocalException('exception from hook')
860 >
860 >
861 > def aborthook(**args):
861 > def aborthook(**args):
862 > raise error.Abort(b'raise abort from hook')
862 > raise error.Abort(b'raise abort from hook')
863 >
863 >
864 > def brokenhook(**args):
864 > def brokenhook(**args):
865 > return 1 + {}
865 > return 1 + {}
866 >
866 >
867 > def verbosehook(ui, **args):
867 > def verbosehook(ui, **args):
868 > ui.note(b'verbose output from hook\n')
868 > ui.note(b'verbose output from hook\n')
869 >
869 >
870 > def printtags(ui, repo, **args):
870 > def printtags(ui, repo, **args):
871 > ui.write(b'[%s]\n' % b', '.join(sorted(repo.tags())))
871 > ui.write(b'[%s]\n' % b', '.join(sorted(repo.tags())))
872 >
872 >
873 > class container(object):
873 > class container(object):
874 > unreachable = 1
874 > unreachable = 1
875 > EOF
875 > EOF
876
876
877 $ cat > syntaxerror.py << NO_CHECK_EOF
877 $ cat > syntaxerror.py << NO_CHECK_EOF
878 > (foo
878 > (foo
879 > NO_CHECK_EOF
879 > NO_CHECK_EOF
880
880
881 test python hooks
881 test python hooks
882
882
883 #if windows
883 #if windows
884 $ PYTHONPATH="$TESTTMP/b;$PYTHONPATH"
884 $ PYTHONPATH="$TESTTMP/b;$PYTHONPATH"
885 #else
885 #else
886 $ PYTHONPATH="$TESTTMP/b:$PYTHONPATH"
886 $ PYTHONPATH="$TESTTMP/b:$PYTHONPATH"
887 #endif
887 #endif
888 $ export PYTHONPATH
888 $ export PYTHONPATH
889
889
890 $ echo '[hooks]' > ../a/.hg/hgrc
890 $ echo '[hooks]' > ../a/.hg/hgrc
891 $ echo 'preoutgoing.broken = python:hooktests.brokenhook' >> ../a/.hg/hgrc
891 $ echo 'preoutgoing.broken = python:hooktests.brokenhook' >> ../a/.hg/hgrc
892 $ hg pull ../a 2>&1 | grep 'raised an exception'
892 $ hg pull ../a 2>&1 | grep 'raised an exception'
893 error: preoutgoing.broken hook raised an exception: unsupported operand type(s) for +: 'int' and 'dict'
893 error: preoutgoing.broken hook raised an exception: unsupported operand type(s) for +: 'int' and 'dict'
894
894
895 $ echo '[hooks]' > ../a/.hg/hgrc
895 $ echo '[hooks]' > ../a/.hg/hgrc
896 $ echo 'preoutgoing.raise = python:hooktests.raisehook' >> ../a/.hg/hgrc
896 $ echo 'preoutgoing.raise = python:hooktests.raisehook' >> ../a/.hg/hgrc
897 $ hg pull ../a 2>&1 | grep 'raised an exception'
897 $ hg pull ../a 2>&1 | grep 'raised an exception'
898 error: preoutgoing.raise hook raised an exception: exception from hook
898 error: preoutgoing.raise hook raised an exception: exception from hook
899
899
900 $ echo '[hooks]' > ../a/.hg/hgrc
900 $ echo '[hooks]' > ../a/.hg/hgrc
901 $ echo 'preoutgoing.abort = python:hooktests.aborthook' >> ../a/.hg/hgrc
901 $ echo 'preoutgoing.abort = python:hooktests.aborthook' >> ../a/.hg/hgrc
902 $ hg pull ../a
902 $ hg pull ../a
903 pulling from ../a
903 pulling from ../a
904 searching for changes
904 searching for changes
905 error: preoutgoing.abort hook failed: raise abort from hook
905 error: preoutgoing.abort hook failed: raise abort from hook
906 abort: raise abort from hook
906 abort: raise abort from hook
907 [255]
907 [255]
908
908
909 $ echo '[hooks]' > ../a/.hg/hgrc
909 $ echo '[hooks]' > ../a/.hg/hgrc
910 $ echo 'preoutgoing.fail = python:hooktests.failhook' >> ../a/.hg/hgrc
910 $ echo 'preoutgoing.fail = python:hooktests.failhook' >> ../a/.hg/hgrc
911 $ hg pull ../a
911 $ hg pull ../a
912 pulling from ../a
912 pulling from ../a
913 searching for changes
913 searching for changes
914 hook args:
914 hook args:
915 hooktype preoutgoing
915 hooktype preoutgoing
916 source pull
916 source pull
917 abort: preoutgoing.fail hook failed
917 abort: preoutgoing.fail hook failed
918 [40]
918 [40]
919
919
920 $ echo '[hooks]' > ../a/.hg/hgrc
920 $ echo '[hooks]' > ../a/.hg/hgrc
921 $ echo 'preoutgoing.uncallable = python:hooktests.uncallable' >> ../a/.hg/hgrc
921 $ echo 'preoutgoing.uncallable = python:hooktests.uncallable' >> ../a/.hg/hgrc
922 $ hg pull ../a
922 $ hg pull ../a
923 pulling from ../a
923 pulling from ../a
924 searching for changes
924 searching for changes
925 abort: preoutgoing.uncallable hook is invalid: "hooktests.uncallable" is not callable
925 abort: preoutgoing.uncallable hook is invalid: "hooktests.uncallable" is not callable
926 [255]
926 [255]
927
927
928 $ echo '[hooks]' > ../a/.hg/hgrc
928 $ echo '[hooks]' > ../a/.hg/hgrc
929 $ echo 'preoutgoing.nohook = python:hooktests.nohook' >> ../a/.hg/hgrc
929 $ echo 'preoutgoing.nohook = python:hooktests.nohook' >> ../a/.hg/hgrc
930 $ hg pull ../a
930 $ hg pull ../a
931 pulling from ../a
931 pulling from ../a
932 searching for changes
932 searching for changes
933 abort: preoutgoing.nohook hook is invalid: "hooktests.nohook" is not defined
933 abort: preoutgoing.nohook hook is invalid: "hooktests.nohook" is not defined
934 [255]
934 [255]
935
935
936 $ echo '[hooks]' > ../a/.hg/hgrc
936 $ echo '[hooks]' > ../a/.hg/hgrc
937 $ echo 'preoutgoing.nomodule = python:nomodule' >> ../a/.hg/hgrc
937 $ echo 'preoutgoing.nomodule = python:nomodule' >> ../a/.hg/hgrc
938 $ hg pull ../a
938 $ hg pull ../a
939 pulling from ../a
939 pulling from ../a
940 searching for changes
940 searching for changes
941 abort: preoutgoing.nomodule hook is invalid: "nomodule" not in a module
941 abort: preoutgoing.nomodule hook is invalid: "nomodule" not in a module
942 [255]
942 [255]
943
943
944 $ echo '[hooks]' > ../a/.hg/hgrc
944 $ echo '[hooks]' > ../a/.hg/hgrc
945 $ echo 'preoutgoing.badmodule = python:nomodule.nowhere' >> ../a/.hg/hgrc
945 $ echo 'preoutgoing.badmodule = python:nomodule.nowhere' >> ../a/.hg/hgrc
946 $ hg pull ../a
946 $ hg pull ../a
947 pulling from ../a
947 pulling from ../a
948 searching for changes
948 searching for changes
949 abort: preoutgoing.badmodule hook is invalid: import of "nomodule" failed
949 abort: preoutgoing.badmodule hook is invalid: import of "nomodule" failed
950 (run with --traceback for stack trace)
950 (run with --traceback for stack trace)
951 [255]
951 [255]
952
952
953 $ echo '[hooks]' > ../a/.hg/hgrc
953 $ echo '[hooks]' > ../a/.hg/hgrc
954 $ echo 'preoutgoing.unreachable = python:hooktests.container.unreachable' >> ../a/.hg/hgrc
954 $ echo 'preoutgoing.unreachable = python:hooktests.container.unreachable' >> ../a/.hg/hgrc
955 $ hg pull ../a
955 $ hg pull ../a
956 pulling from ../a
956 pulling from ../a
957 searching for changes
957 searching for changes
958 abort: preoutgoing.unreachable hook is invalid: import of "hooktests.container" failed
958 abort: preoutgoing.unreachable hook is invalid: import of "hooktests.container" failed
959 (run with --traceback for stack trace)
959 (run with --traceback for stack trace)
960 [255]
960 [255]
961
961
962 $ echo '[hooks]' > ../a/.hg/hgrc
962 $ echo '[hooks]' > ../a/.hg/hgrc
963 $ echo 'preoutgoing.syntaxerror = python:syntaxerror.syntaxerror' >> ../a/.hg/hgrc
963 $ echo 'preoutgoing.syntaxerror = python:syntaxerror.syntaxerror' >> ../a/.hg/hgrc
964 $ hg pull ../a
964 $ hg pull ../a
965 pulling from ../a
965 pulling from ../a
966 searching for changes
966 searching for changes
967 abort: preoutgoing.syntaxerror hook is invalid: import of "syntaxerror" failed
967 abort: preoutgoing.syntaxerror hook is invalid: import of "syntaxerror" failed
968 (run with --traceback for stack trace)
968 (run with --traceback for stack trace)
969 [255]
969 [255]
970
970
971 $ hg pull ../a --traceback 2>&1 | egrep 'pulling|searching|^exception|Traceback|SyntaxError|ImportError|ModuleNotFoundError|HookLoadError|abort'
971 $ hg pull ../a --traceback 2>&1 | egrep 'pulling|searching|^exception|Traceback|SyntaxError|ImportError|ModuleNotFoundError|HookLoadError|abort'
972 pulling from ../a
972 pulling from ../a
973 searching for changes
973 searching for changes
974 exception from first failed import attempt:
974 exception from first failed import attempt:
975 Traceback (most recent call last):
975 Traceback (most recent call last):
976 SyntaxError: * (glob)
976 SyntaxError: * (glob)
977 exception from second failed import attempt:
977 exception from second failed import attempt:
978 Traceback (most recent call last): (py3 !)
978 Traceback (most recent call last): (py3 !)
979 SyntaxError: * (glob) (py3 !)
979 SyntaxError: * (glob) (py3 !)
980 Traceback (most recent call last):
980 Traceback (most recent call last):
981 ImportError: No module named hgext_syntaxerror (no-py3 !)
981 ImportError: No module named hgext_syntaxerror (no-py3 !)
982 ImportError: No module named 'hgext_syntaxerror' (py3 no-py36 !)
982 ImportError: No module named 'hgext_syntaxerror' (py3 no-py36 !)
983 ModuleNotFoundError: No module named 'hgext_syntaxerror' (py36 !)
983 ModuleNotFoundError: No module named 'hgext_syntaxerror' (py36 !)
984 Traceback (most recent call last):
984 Traceback (most recent call last):
985 SyntaxError: * (glob) (py3 !)
985 SyntaxError: * (glob) (py3 !)
986 Traceback (most recent call last): (py3 !)
986 Traceback (most recent call last): (py3 !)
987 ImportError: No module named 'hgext_syntaxerror' (py3 no-py36 !)
987 ImportError: No module named 'hgext_syntaxerror' (py3 no-py36 !)
988 ModuleNotFoundError: No module named 'hgext_syntaxerror' (py36 !)
988 ModuleNotFoundError: No module named 'hgext_syntaxerror' (py36 !)
989 Traceback (most recent call last): (py3 !)
989 Traceback (most recent call last): (py3 !)
990 HookLoadError: preoutgoing.syntaxerror hook is invalid: import of "syntaxerror" failed (no-py3 !)
990 HookLoadError: preoutgoing.syntaxerror hook is invalid: import of "syntaxerror" failed (no-py3 !)
991 raise error.HookLoadError( (py38 !)
991 raise error.HookLoadError( (py38 !)
992 mercurial.error.HookLoadError: preoutgoing.syntaxerror hook is invalid: import of "syntaxerror" failed (py3 !)
992 mercurial.error.HookLoadError: preoutgoing.syntaxerror hook is invalid: import of "syntaxerror" failed (py3 !)
993 abort: preoutgoing.syntaxerror hook is invalid: import of "syntaxerror" failed
993 abort: preoutgoing.syntaxerror hook is invalid: import of "syntaxerror" failed
994
994
995 $ echo '[hooks]' > ../a/.hg/hgrc
995 $ echo '[hooks]' > ../a/.hg/hgrc
996 $ echo 'preoutgoing.pass = python:hooktests.passhook' >> ../a/.hg/hgrc
996 $ echo 'preoutgoing.pass = python:hooktests.passhook' >> ../a/.hg/hgrc
997 $ hg pull ../a
997 $ hg pull ../a
998 pulling from ../a
998 pulling from ../a
999 searching for changes
999 searching for changes
1000 hook args:
1000 hook args:
1001 hooktype preoutgoing
1001 hooktype preoutgoing
1002 source pull
1002 source pull
1003 adding changesets
1003 adding changesets
1004 adding manifests
1004 adding manifests
1005 adding file changes
1005 adding file changes
1006 adding remote bookmark quux
1006 adding remote bookmark quux
1007 added 1 changesets with 1 changes to 1 files
1007 added 1 changesets with 1 changes to 1 files
1008 new changesets 539e4b31b6dc
1008 new changesets 539e4b31b6dc
1009 (run 'hg update' to get a working copy)
1009 (run 'hg update' to get a working copy)
1010
1010
1011 post- python hooks that fail to *run* don't cause an abort
1011 post- python hooks that fail to *run* don't cause an abort
1012 $ rm ../a/.hg/hgrc
1012 $ rm ../a/.hg/hgrc
1013 $ echo '[hooks]' > .hg/hgrc
1013 $ echo '[hooks]' > .hg/hgrc
1014 $ echo 'post-pull.broken = python:hooktests.brokenhook' >> .hg/hgrc
1014 $ echo 'post-pull.broken = python:hooktests.brokenhook' >> .hg/hgrc
1015 $ hg pull ../a
1015 $ hg pull ../a
1016 pulling from ../a
1016 pulling from ../a
1017 searching for changes
1017 searching for changes
1018 no changes found
1018 no changes found
1019 error: post-pull.broken hook raised an exception: unsupported operand type(s) for +: 'int' and 'dict'
1019 error: post-pull.broken hook raised an exception: unsupported operand type(s) for +: 'int' and 'dict'
1020 (run with --traceback for stack trace)
1020 (run with --traceback for stack trace)
1021
1021
1022 but post- python hooks that fail to *load* do
1022 but post- python hooks that fail to *load* do
1023 $ echo '[hooks]' > .hg/hgrc
1023 $ echo '[hooks]' > .hg/hgrc
1024 $ echo 'post-pull.nomodule = python:nomodule' >> .hg/hgrc
1024 $ echo 'post-pull.nomodule = python:nomodule' >> .hg/hgrc
1025 $ hg pull ../a
1025 $ hg pull ../a
1026 pulling from ../a
1026 pulling from ../a
1027 searching for changes
1027 searching for changes
1028 no changes found
1028 no changes found
1029 abort: post-pull.nomodule hook is invalid: "nomodule" not in a module
1029 abort: post-pull.nomodule hook is invalid: "nomodule" not in a module
1030 [255]
1030 [255]
1031
1031
1032 $ echo '[hooks]' > .hg/hgrc
1032 $ echo '[hooks]' > .hg/hgrc
1033 $ echo 'post-pull.badmodule = python:nomodule.nowhere' >> .hg/hgrc
1033 $ echo 'post-pull.badmodule = python:nomodule.nowhere' >> .hg/hgrc
1034 $ hg pull ../a
1034 $ hg pull ../a
1035 pulling from ../a
1035 pulling from ../a
1036 searching for changes
1036 searching for changes
1037 no changes found
1037 no changes found
1038 abort: post-pull.badmodule hook is invalid: import of "nomodule" failed
1038 abort: post-pull.badmodule hook is invalid: import of "nomodule" failed
1039 (run with --traceback for stack trace)
1039 (run with --traceback for stack trace)
1040 [255]
1040 [255]
1041
1041
1042 $ echo '[hooks]' > .hg/hgrc
1042 $ echo '[hooks]' > .hg/hgrc
1043 $ echo 'post-pull.nohook = python:hooktests.nohook' >> .hg/hgrc
1043 $ echo 'post-pull.nohook = python:hooktests.nohook' >> .hg/hgrc
1044 $ hg pull ../a
1044 $ hg pull ../a
1045 pulling from ../a
1045 pulling from ../a
1046 searching for changes
1046 searching for changes
1047 no changes found
1047 no changes found
1048 abort: post-pull.nohook hook is invalid: "hooktests.nohook" is not defined
1048 abort: post-pull.nohook hook is invalid: "hooktests.nohook" is not defined
1049 [255]
1049 [255]
1050
1050
1051 make sure --traceback works
1051 make sure --traceback works
1052
1052
1053 $ echo '[hooks]' > .hg/hgrc
1053 $ echo '[hooks]' > .hg/hgrc
1054 $ echo 'commit.abort = python:hooktests.aborthook' >> .hg/hgrc
1054 $ echo 'commit.abort = python:hooktests.aborthook' >> .hg/hgrc
1055
1055
1056 $ echo aa > a
1056 $ echo aa > a
1057 $ hg --traceback commit -d '0 0' -ma 2>&1 | grep '^Traceback'
1057 $ hg --traceback commit -d '0 0' -ma 2>&1 | grep '^Traceback'
1058 Traceback (most recent call last):
1058 Traceback (most recent call last):
1059
1059
1060 $ cd ..
1060 $ cd ..
1061 $ hg init c
1061 $ hg init c
1062 $ cd c
1062 $ cd c
1063
1063
1064 $ cat > hookext.py <<EOF
1064 $ cat > hookext.py <<EOF
1065 > def autohook(ui, **args):
1065 > def autohook(ui, **args):
1066 > ui.write(b'Automatically installed hook\n')
1066 > ui.write(b'Automatically installed hook\n')
1067 >
1067 >
1068 > def reposetup(ui, repo):
1068 > def reposetup(ui, repo):
1069 > repo.ui.setconfig(b"hooks", b"commit.auto", autohook)
1069 > repo.ui.setconfig(b"hooks", b"commit.auto", autohook)
1070 > EOF
1070 > EOF
1071 $ echo '[extensions]' >> .hg/hgrc
1071 $ echo '[extensions]' >> .hg/hgrc
1072 $ echo 'hookext = hookext.py' >> .hg/hgrc
1072 $ echo 'hookext = hookext.py' >> .hg/hgrc
1073
1073
1074 $ touch foo
1074 $ touch foo
1075 $ hg add foo
1075 $ hg add foo
1076 $ hg ci -d '0 0' -m 'add foo'
1076 $ hg ci -d '0 0' -m 'add foo'
1077 Automatically installed hook
1077 Automatically installed hook
1078 $ echo >> foo
1078 $ echo >> foo
1079 $ hg ci --debug -d '0 0' -m 'change foo'
1079 $ hg ci --debug -d '0 0' -m 'change foo'
1080 committing files:
1080 committing files:
1081 foo
1081 foo
1082 committing manifest
1082 committing manifest
1083 committing changelog
1083 committing changelog
1084 updating the branch cache
1084 updating the branch cache
1085 committed changeset 1:52998019f6252a2b893452765fcb0a47351a5708
1085 committed changeset 1:52998019f6252a2b893452765fcb0a47351a5708
1086 calling hook commit.auto: hgext_hookext.autohook
1086 calling hook commit.auto: hgext_hookext.autohook
1087 Automatically installed hook
1087 Automatically installed hook
1088
1088
1089 $ hg showconfig hooks
1089 $ hg showconfig hooks
1090 hooks.commit.auto=<function autohook at *> (glob)
1090 hooks.commit.auto=<function autohook at *> (glob)
1091
1091
1092 test python hook configured with python:[file]:[hook] syntax
1092 test python hook configured with python:[file]:[hook] syntax
1093
1093
1094 $ cd ..
1094 $ cd ..
1095 $ mkdir d
1095 $ mkdir d
1096 $ cd d
1096 $ cd d
1097 $ hg init repo
1097 $ hg init repo
1098 $ mkdir hooks
1098 $ mkdir hooks
1099
1099
1100 $ cd hooks
1100 $ cd hooks
1101 $ cat > testhooks.py <<EOF
1101 $ cat > testhooks.py <<EOF
1102 > def testhook(ui, **args):
1102 > def testhook(ui, **args):
1103 > ui.write(b'hook works\n')
1103 > ui.write(b'hook works\n')
1104 > EOF
1104 > EOF
1105 $ echo '[hooks]' > ../repo/.hg/hgrc
1105 $ echo '[hooks]' > ../repo/.hg/hgrc
1106 $ echo "pre-commit.test = python:`pwd`/testhooks.py:testhook" >> ../repo/.hg/hgrc
1106 $ echo "pre-commit.test = python:`pwd`/testhooks.py:testhook" >> ../repo/.hg/hgrc
1107
1107
1108 $ cd ../repo
1108 $ cd ../repo
1109 $ hg commit -d '0 0'
1109 $ hg commit -d '0 0'
1110 hook works
1110 hook works
1111 nothing changed
1111 nothing changed
1112 [1]
1112 [1]
1113
1113
1114 $ echo '[hooks]' > .hg/hgrc
1114 $ echo '[hooks]' > .hg/hgrc
1115 $ echo "update.ne = python:`pwd`/nonexistent.py:testhook" >> .hg/hgrc
1115 $ echo "update.ne = python:`pwd`/nonexistent.py:testhook" >> .hg/hgrc
1116 $ echo "pre-identify.npmd = python:`pwd`/:no_python_module_dir" >> .hg/hgrc
1116 $ echo "pre-identify.npmd = python:`pwd`/:no_python_module_dir" >> .hg/hgrc
1117
1117
1118 $ hg up null
1118 $ hg up null
1119 loading update.ne hook failed:
1119 loading update.ne hook failed:
1120 abort: $ENOENT$: '$TESTTMP/d/repo/nonexistent.py'
1120 abort: $ENOENT$: '$TESTTMP/d/repo/nonexistent.py'
1121 [255]
1121 [255]
1122
1122
1123 $ hg id
1123 $ hg id
1124 loading pre-identify.npmd hook failed:
1124 loading pre-identify.npmd hook failed:
1125 abort: No module named repo (no-py3 !)
1125 abort: No module named repo (no-py3 !)
1126 abort: No module named 'repo' (py3 !)
1126 abort: No module named 'repo' (py3 !)
1127 [255]
1127 [255]
1128
1128
1129 $ cd ../../b
1129 $ cd ../../b
1130
1130
1131 make sure --traceback works on hook import failure
1131 make sure --traceback works on hook import failure
1132
1132
1133 $ cat > importfail.py <<EOF
1133 $ cat > importfail.py <<EOF
1134 > import somebogusmodule
1134 > import somebogusmodule
1135 > # dereference something in the module to force demandimport to load it
1135 > # dereference something in the module to force demandimport to load it
1136 > somebogusmodule.whatever
1136 > somebogusmodule.whatever
1137 > EOF
1137 > EOF
1138
1138
1139 $ echo '[hooks]' > .hg/hgrc
1139 $ echo '[hooks]' > .hg/hgrc
1140 $ echo 'precommit.importfail = python:importfail.whatever' >> .hg/hgrc
1140 $ echo 'precommit.importfail = python:importfail.whatever' >> .hg/hgrc
1141
1141
1142 $ echo a >> a
1142 $ echo a >> a
1143 $ hg --traceback commit -ma 2>&1 | egrep '^exception|ImportError|ModuleNotFoundError|Traceback|HookLoadError|abort'
1143 $ hg --traceback commit -ma 2>&1 | egrep '^exception|ImportError|ModuleNotFoundError|Traceback|HookLoadError|abort'
1144 exception from first failed import attempt:
1144 exception from first failed import attempt:
1145 Traceback (most recent call last):
1145 Traceback (most recent call last):
1146 ImportError: No module named somebogusmodule (no-py3 !)
1146 ImportError: No module named somebogusmodule (no-py3 !)
1147 ImportError: No module named 'somebogusmodule' (py3 no-py36 !)
1147 ImportError: No module named 'somebogusmodule' (py3 no-py36 !)
1148 ModuleNotFoundError: No module named 'somebogusmodule' (py36 !)
1148 ModuleNotFoundError: No module named 'somebogusmodule' (py36 !)
1149 exception from second failed import attempt:
1149 exception from second failed import attempt:
1150 Traceback (most recent call last): (py3 !)
1150 Traceback (most recent call last): (py3 !)
1151 ImportError: No module named 'somebogusmodule' (py3 no-py36 !)
1151 ImportError: No module named 'somebogusmodule' (py3 no-py36 !)
1152 ModuleNotFoundError: No module named 'somebogusmodule' (py36 !)
1152 ModuleNotFoundError: No module named 'somebogusmodule' (py36 !)
1153 Traceback (most recent call last): (py3 !)
1153 Traceback (most recent call last): (py3 !)
1154 ImportError: No module named 'hgext_importfail' (py3 no-py36 !)
1154 ImportError: No module named 'hgext_importfail' (py3 no-py36 !)
1155 ModuleNotFoundError: No module named 'hgext_importfail' (py36 !)
1155 ModuleNotFoundError: No module named 'hgext_importfail' (py36 !)
1156 Traceback (most recent call last): (py3 !)
1156 Traceback (most recent call last): (py3 !)
1157 ImportError: No module named 'somebogusmodule' (py3 no-py36 !)
1157 ImportError: No module named 'somebogusmodule' (py3 no-py36 !)
1158 ModuleNotFoundError: No module named 'somebogusmodule' (py36 !)
1158 ModuleNotFoundError: No module named 'somebogusmodule' (py36 !)
1159 Traceback (most recent call last):
1159 Traceback (most recent call last):
1160 ImportError: No module named hgext_importfail (no-py3 !)
1160 ImportError: No module named hgext_importfail (no-py3 !)
1161 ImportError: No module named 'hgext_importfail' (py3 no-py36 !)
1161 ImportError: No module named 'hgext_importfail' (py3 no-py36 !)
1162 ModuleNotFoundError: No module named 'hgext_importfail' (py36 !)
1162 ModuleNotFoundError: No module named 'hgext_importfail' (py36 !)
1163 Traceback (most recent call last):
1163 Traceback (most recent call last):
1164 HookLoadError: precommit.importfail hook is invalid: import of "importfail" failed (no-py3 !)
1164 HookLoadError: precommit.importfail hook is invalid: import of "importfail" failed (no-py3 !)
1165 raise error.HookLoadError( (py38 !)
1165 raise error.HookLoadError( (py38 !)
1166 mercurial.error.HookLoadError: precommit.importfail hook is invalid: import of "importfail" failed (py3 !)
1166 mercurial.error.HookLoadError: precommit.importfail hook is invalid: import of "importfail" failed (py3 !)
1167 abort: precommit.importfail hook is invalid: import of "importfail" failed
1167 abort: precommit.importfail hook is invalid: import of "importfail" failed
1168
1168
1169 Issue1827: Hooks Update & Commit not completely post operation
1169 Issue1827: Hooks Update & Commit not completely post operation
1170
1170
1171 commit and update hooks should run after command completion. The largefiles
1171 commit and update hooks should run after command completion. The largefiles
1172 use demonstrates a recursive wlock, showing the hook doesn't run until the
1172 use demonstrates a recursive wlock, showing the hook doesn't run until the
1173 final release (and dirstate flush).
1173 final release (and dirstate flush).
1174
1174
1175 $ echo '[hooks]' > .hg/hgrc
1175 $ echo '[hooks]' > .hg/hgrc
1176 $ echo 'commit = hg id' >> .hg/hgrc
1176 $ echo 'commit = hg id' >> .hg/hgrc
1177 $ echo 'update = hg id' >> .hg/hgrc
1177 $ echo 'update = hg id' >> .hg/hgrc
1178 $ echo bb > a
1178 $ echo bb > a
1179 $ hg ci -ma
1179 $ hg ci -ma
1180 223eafe2750c tip
1180 223eafe2750c tip
1181 $ hg up 0 --config extensions.largefiles=
1181 $ hg up 0 --config extensions.largefiles=
1182 The fsmonitor extension is incompatible with the largefiles extension and has been disabled. (fsmonitor !)
1182 The fsmonitor extension is incompatible with the largefiles extension and has been disabled. (fsmonitor !)
1183 cb9a9f314b8b
1183 cb9a9f314b8b
1184 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1184 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1185
1185
1186 make sure --verbose (and --quiet/--debug etc.) are propagated to the local ui
1186 make sure --verbose (and --quiet/--debug etc.) are propagated to the local ui
1187 that is passed to pre/post hooks
1187 that is passed to pre/post hooks
1188
1188
1189 $ echo '[hooks]' > .hg/hgrc
1189 $ echo '[hooks]' > .hg/hgrc
1190 $ echo 'pre-identify = python:hooktests.verbosehook' >> .hg/hgrc
1190 $ echo 'pre-identify = python:hooktests.verbosehook' >> .hg/hgrc
1191 $ hg id
1191 $ hg id
1192 cb9a9f314b8b
1192 cb9a9f314b8b
1193 $ hg id --verbose
1193 $ hg id --verbose
1194 calling hook pre-identify: hooktests.verbosehook
1194 calling hook pre-identify: hooktests.verbosehook
1195 verbose output from hook
1195 verbose output from hook
1196 cb9a9f314b8b
1196 cb9a9f314b8b
1197
1197
1198 Ensure hooks can be prioritized
1198 Ensure hooks can be prioritized
1199
1199
1200 $ echo '[hooks]' > .hg/hgrc
1200 $ echo '[hooks]' > .hg/hgrc
1201 $ echo 'pre-identify.a = python:hooktests.verbosehook' >> .hg/hgrc
1201 $ echo 'pre-identify.a = python:hooktests.verbosehook' >> .hg/hgrc
1202 $ echo 'pre-identify.b = python:hooktests.verbosehook' >> .hg/hgrc
1202 $ echo 'pre-identify.b = python:hooktests.verbosehook' >> .hg/hgrc
1203 $ echo 'priority.pre-identify.b = 1' >> .hg/hgrc
1203 $ echo 'priority.pre-identify.b = 1' >> .hg/hgrc
1204 $ echo 'pre-identify.c = python:hooktests.verbosehook' >> .hg/hgrc
1204 $ echo 'pre-identify.c = python:hooktests.verbosehook' >> .hg/hgrc
1205 $ hg id --verbose
1205 $ hg id --verbose
1206 calling hook pre-identify.b: hooktests.verbosehook
1206 calling hook pre-identify.b: hooktests.verbosehook
1207 verbose output from hook
1207 verbose output from hook
1208 calling hook pre-identify.a: hooktests.verbosehook
1208 calling hook pre-identify.a: hooktests.verbosehook
1209 verbose output from hook
1209 verbose output from hook
1210 calling hook pre-identify.c: hooktests.verbosehook
1210 calling hook pre-identify.c: hooktests.verbosehook
1211 verbose output from hook
1211 verbose output from hook
1212 cb9a9f314b8b
1212 cb9a9f314b8b
1213
1213
1214 new tags must be visible in pretxncommit (issue3210)
1214 new tags must be visible in pretxncommit (issue3210)
1215
1215
1216 $ echo 'pretxncommit.printtags = python:hooktests.printtags' >> .hg/hgrc
1216 $ echo 'pretxncommit.printtags = python:hooktests.printtags' >> .hg/hgrc
1217 $ hg tag -f foo
1217 $ hg tag -f foo
1218 [a, foo, tip]
1218 [a, foo, tip]
1219
1219
1220 post-init hooks must not crash (issue4983)
1220 post-init hooks must not crash (issue4983)
1221 This also creates the `to` repo for the next test block.
1221 This also creates the `to` repo for the next test block.
1222
1222
1223 $ cd ..
1223 $ cd ..
1224 $ cat << EOF >> hgrc-with-post-init-hook
1224 $ cat << EOF >> hgrc-with-post-init-hook
1225 > [hooks]
1225 > [hooks]
1226 > post-init = sh -c "printenv.py --line post-init"
1226 > post-init = sh -c "printenv.py --line post-init"
1227 > EOF
1227 > EOF
1228 $ HGRCPATH=hgrc-with-post-init-hook hg init to
1228 $ HGRCPATH=hgrc-with-post-init-hook hg init to
1229 post-init hook: HG_ARGS=init to
1229 post-init hook: HG_ARGS=init to
1230 HG_HOOKNAME=post-init
1230 HG_HOOKNAME=post-init
1231 HG_HOOKTYPE=post-init
1231 HG_HOOKTYPE=post-init
1232 HG_OPTS={'insecure': None, 'remotecmd': '', 'ssh': ''}
1232 HG_OPTS={'insecure': None, 'remotecmd': '', 'ssh': ''}
1233 HG_PATS=['to']
1233 HG_PATS=['to']
1234 HG_RESULT=0
1234 HG_RESULT=0
1235
1235
1236
1236
1237 new commits must be visible in pretxnchangegroup (issue3428)
1237 new commits must be visible in pretxnchangegroup (issue3428)
1238
1238
1239 $ echo '[hooks]' >> to/.hg/hgrc
1239 $ echo '[hooks]' >> to/.hg/hgrc
1240 $ echo 'prechangegroup = hg --traceback tip' >> to/.hg/hgrc
1240 $ echo 'prechangegroup = hg --traceback tip' >> to/.hg/hgrc
1241 $ echo 'pretxnchangegroup = hg --traceback tip' >> to/.hg/hgrc
1241 $ echo 'pretxnchangegroup = hg --traceback tip' >> to/.hg/hgrc
1242 $ echo a >> to/a
1242 $ echo a >> to/a
1243 $ hg --cwd to ci -Ama
1243 $ hg --cwd to ci -Ama
1244 adding a
1244 adding a
1245 $ hg clone to from
1245 $ hg clone to from
1246 updating to branch default
1246 updating to branch default
1247 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1247 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1248 $ echo aa >> from/a
1248 $ echo aa >> from/a
1249 $ hg --cwd from ci -mb
1249 $ hg --cwd from ci -mb
1250 $ hg --cwd from push
1250 $ hg --cwd from push
1251 pushing to $TESTTMP/to
1251 pushing to $TESTTMP/to
1252 searching for changes
1252 searching for changes
1253 changeset: 0:cb9a9f314b8b
1253 changeset: 0:cb9a9f314b8b
1254 tag: tip
1254 tag: tip
1255 user: test
1255 user: test
1256 date: Thu Jan 01 00:00:00 1970 +0000
1256 date: Thu Jan 01 00:00:00 1970 +0000
1257 summary: a
1257 summary: a
1258
1258
1259 adding changesets
1259 adding changesets
1260 adding manifests
1260 adding manifests
1261 adding file changes
1261 adding file changes
1262 changeset: 1:9836a07b9b9d
1262 changeset: 1:9836a07b9b9d
1263 tag: tip
1263 tag: tip
1264 user: test
1264 user: test
1265 date: Thu Jan 01 00:00:00 1970 +0000
1265 date: Thu Jan 01 00:00:00 1970 +0000
1266 summary: b
1266 summary: b
1267
1267
1268 added 1 changesets with 1 changes to 1 files
1268 added 1 changesets with 1 changes to 1 files
1269
1269
1270 pretxnclose hook failure should abort the transaction
1270 pretxnclose hook failure should abort the transaction
1271
1271
1272 $ hg init txnfailure
1272 $ hg init txnfailure
1273 $ cd txnfailure
1273 $ cd txnfailure
1274 $ touch a && hg commit -Aqm a
1274 $ touch a && hg commit -Aqm a
1275 $ cat >> .hg/hgrc <<EOF
1275 $ cat >> .hg/hgrc <<EOF
1276 > [hooks]
1276 > [hooks]
1277 > pretxnclose.error = exit 1
1277 > pretxnclose.error = exit 1
1278 > EOF
1278 > EOF
1279 $ hg strip -r 0 --config extensions.strip=
1279 $ hg strip -r 0 --config extensions.strip=
1280 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1280 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1281 saved backup bundle to * (glob)
1281 saved backup bundle to * (glob)
1282 transaction abort!
1282 transaction abort!
1283 rollback completed
1283 rollback completed
1284 strip failed, backup bundle stored in * (glob)
1284 strip failed, backup bundle stored in * (glob)
1285 abort: pretxnclose.error hook exited with status 1
1285 abort: pretxnclose.error hook exited with status 1
1286 [40]
1286 [40]
1287 $ hg recover
1287 $ hg recover
1288 no interrupted transaction available
1288 no interrupted transaction available
1289 [1]
1289 [1]
1290 $ cd ..
1290 $ cd ..
1291
1291
1292 check whether HG_PENDING makes pending changes only in related
1292 check whether HG_PENDING makes pending changes only in related
1293 repositories visible to an external hook.
1293 repositories visible to an external hook.
1294
1294
1295 (emulate a transaction running concurrently by copied
1295 (emulate a transaction running concurrently by copied
1296 .hg/store/00changelog.i.a in subsequent test)
1296 .hg/store/00changelog.i.a in subsequent test)
1297
1297
1298 $ cat > $TESTTMP/savepending.sh <<EOF
1298 $ cat > $TESTTMP/savepending.sh <<EOF
1299 > cp .hg/store/00changelog.i.a .hg/store/00changelog.i.a.saved
1299 > cp .hg/store/00changelog.i.a .hg/store/00changelog.i.a.saved
1300 > exit 1 # to avoid adding new revision for subsequent tests
1300 > exit 1 # to avoid adding new revision for subsequent tests
1301 > EOF
1301 > EOF
1302 $ cd a
1302 $ cd a
1303 $ hg tip -q
1303 $ hg tip -q
1304 4:539e4b31b6dc
1304 4:539e4b31b6dc
1305 $ hg --config hooks.pretxnclose="sh $TESTTMP/savepending.sh" commit -m "invisible"
1305 $ hg --config hooks.pretxnclose="sh $TESTTMP/savepending.sh" commit -m "invisible"
1306 transaction abort!
1306 transaction abort!
1307 rollback completed
1307 rollback completed
1308 abort: pretxnclose hook exited with status 1
1308 abort: pretxnclose hook exited with status 1
1309 [40]
1309 [40]
1310 $ cp .hg/store/00changelog.i.a.saved .hg/store/00changelog.i.a
1310 $ cp .hg/store/00changelog.i.a.saved .hg/store/00changelog.i.a
1311
1311
1312 (check (in)visibility of new changeset while transaction running in
1312 (check (in)visibility of new changeset while transaction running in
1313 repo)
1313 repo)
1314
1314
1315 $ cat > $TESTTMP/checkpending.sh <<EOF
1315 $ cat > $TESTTMP/checkpending.sh <<EOF
1316 > echo '@a'
1316 > echo '@a'
1317 > hg -R "$TESTTMP/a" tip -q
1317 > hg -R "$TESTTMP/a" tip -q
1318 > echo '@a/nested'
1318 > echo '@a/nested'
1319 > hg -R "$TESTTMP/a/nested" tip -q
1319 > hg -R "$TESTTMP/a/nested" tip -q
1320 > exit 1 # to avoid adding new revision for subsequent tests
1320 > exit 1 # to avoid adding new revision for subsequent tests
1321 > EOF
1321 > EOF
1322 $ hg init nested
1322 $ hg init nested
1323 $ cd nested
1323 $ cd nested
1324 $ echo a > a
1324 $ echo a > a
1325 $ hg add a
1325 $ hg add a
1326 $ hg --config hooks.pretxnclose="sh $TESTTMP/checkpending.sh" commit -m '#0'
1326 $ hg --config hooks.pretxnclose="sh $TESTTMP/checkpending.sh" commit -m '#0'
1327 @a
1327 @a
1328 4:539e4b31b6dc
1328 4:539e4b31b6dc
1329 @a/nested
1329 @a/nested
1330 0:bf5e395ced2c
1330 0:bf5e395ced2c
1331 transaction abort!
1331 transaction abort!
1332 rollback completed
1332 rollback completed
1333 abort: pretxnclose hook exited with status 1
1333 abort: pretxnclose hook exited with status 1
1334 [40]
1334 [40]
1335
1335
1336 Hook from untrusted hgrc are reported as failure
1336 Hook from untrusted hgrc are reported as failure
1337 ================================================
1337 ================================================
1338
1338
1339 $ cat << EOF > $TESTTMP/untrusted.py
1339 $ cat << EOF > $TESTTMP/untrusted.py
1340 > from mercurial import scmutil, util
1340 > from mercurial import scmutil, util
1341 > def uisetup(ui):
1341 > def uisetup(ui):
1342 > class untrustedui(ui.__class__):
1342 > class untrustedui(ui.__class__):
1343 > def _trusted(self, fp, f):
1343 > def _trusted(self, fp, f):
1344 > if util.normpath(fp.name).endswith(b'untrusted/.hg/hgrc'):
1344 > if util.normpath(fp.name).endswith(b'untrusted/.hg/hgrc'):
1345 > return False
1345 > return False
1346 > return super(untrustedui, self)._trusted(fp, f)
1346 > return super(untrustedui, self)._trusted(fp, f)
1347 > ui.__class__ = untrustedui
1347 > ui.__class__ = untrustedui
1348 > EOF
1348 > EOF
1349 $ cat << EOF >> $HGRCPATH
1349 $ cat << EOF >> $HGRCPATH
1350 > [extensions]
1350 > [extensions]
1351 > untrusted=$TESTTMP/untrusted.py
1351 > untrusted=$TESTTMP/untrusted.py
1352 > EOF
1352 > EOF
1353 $ hg init untrusted
1353 $ hg init untrusted
1354 $ cd untrusted
1354 $ cd untrusted
1355
1355
1356 Non-blocking hook
1356 Non-blocking hook
1357 -----------------
1357 -----------------
1358
1358
1359 $ cat << EOF >> .hg/hgrc
1359 $ cat << EOF >> .hg/hgrc
1360 > [hooks]
1360 > [hooks]
1361 > txnclose.testing=echo txnclose hook called
1361 > txnclose.testing=echo txnclose hook called
1362 > EOF
1362 > EOF
1363 $ touch a && hg commit -Aqm a
1363 $ touch a && hg commit -Aqm a
1364 warning: untrusted hook txnclose.testing not executed
1364 warning: untrusted hook txnclose.testing not executed
1365 $ hg log
1365 $ hg log
1366 changeset: 0:3903775176ed
1366 changeset: 0:3903775176ed
1367 tag: tip
1367 tag: tip
1368 user: test
1368 user: test
1369 date: Thu Jan 01 00:00:00 1970 +0000
1369 date: Thu Jan 01 00:00:00 1970 +0000
1370 summary: a
1370 summary: a
1371
1371
1372
1372
1373 Non-blocking hook
1373 Non-blocking hook
1374 -----------------
1374 -----------------
1375
1375
1376 $ cat << EOF >> .hg/hgrc
1376 $ cat << EOF >> .hg/hgrc
1377 > [hooks]
1377 > [hooks]
1378 > pretxnclose.testing=echo pre-txnclose hook called
1378 > pretxnclose.testing=echo pre-txnclose hook called
1379 > EOF
1379 > EOF
1380 $ touch b && hg commit -Aqm a
1380 $ touch b && hg commit -Aqm a
1381 transaction abort!
1381 transaction abort!
1382 rollback completed
1382 rollback completed
1383 abort: untrusted hook pretxnclose.testing not executed
1383 abort: untrusted hook pretxnclose.testing not executed
1384 (see 'hg help config.trusted')
1384 (see 'hg help config.trusted')
1385 [40]
1385 [40]
1386 $ hg log
1386 $ hg log
1387 changeset: 0:3903775176ed
1387 changeset: 0:3903775176ed
1388 tag: tip
1388 tag: tip
1389 user: test
1389 user: test
1390 date: Thu Jan 01 00:00:00 1970 +0000
1390 date: Thu Jan 01 00:00:00 1970 +0000
1391 summary: a
1391 summary: a
1392
1392
1393
1393
1394 unsetup the test
1394 unsetup the test
1395 ----------------
1395 ----------------
1396
1396
1397 # touch the file to unconfuse chg with a diffrent mtime
1397 # touch the file to unconfuse chg with a diffrent mtime
1398 $ sleep 1
1398 $ sleep 1
1399 $ touch $TESTTMP/untrusted.py
1399 $ touch $TESTTMP/untrusted.py
1400 $ cat << EOF >> $HGRCPATH
1400 $ cat << EOF >> $HGRCPATH
1401 > [extensions]
1401 > [extensions]
1402 > untrusted=!
1402 > untrusted=!
1403 > EOF
1403 > EOF
1404
1404
1405 HGPLAIN setting in hooks
1405 HGPLAIN setting in hooks
1406 ========================
1406 ========================
1407
1407
1408 $ cat << EOF >> .hg/hgrc
1408 $ cat << EOF >> .hg/hgrc
1409 > [hooks]
1409 > [hooks]
1410 > pre-version.testing-default=echo '### default ###' plain: \${HGPLAIN:-'<unset>'}
1410 > pre-version.testing-default=echo '### default ###' plain: \${HGPLAIN:-'<unset>'}
1411 > pre-version.testing-yes=echo '### yes #######' plain: \${HGPLAIN:-'<unset>'}
1411 > pre-version.testing-yes=echo '### yes #######' plain: \${HGPLAIN:-'<unset>'}
1412 > pre-version.testing-yes:run-with-plain=yes
1412 > pre-version.testing-yes:run-with-plain=yes
1413 > pre-version.testing-no=echo '### no ########' plain: \${HGPLAIN:-'<unset>'}
1413 > pre-version.testing-no=echo '### no ########' plain: \${HGPLAIN:-'<unset>'}
1414 > pre-version.testing-no:run-with-plain=no
1414 > pre-version.testing-no:run-with-plain=no
1415 > pre-version.testing-auto=echo '### auto ######' plain: \${HGPLAIN:-'<unset>'}
1416 > pre-version.testing-auto:run-with-plain=auto
1415 > EOF
1417 > EOF
1416
1418
1417 $ (unset HGPLAIN; hg version --quiet)
1419 $ (unset HGPLAIN; hg version --quiet)
1418 ### default ### plain: 1
1420 ### default ### plain: 1
1419 ### yes ####### plain: 1
1421 ### yes ####### plain: 1
1420 ### no ######## plain: <unset>
1422 ### no ######## plain: <unset>
1423 ### auto ###### plain: <unset>
1421 Mercurial Distributed SCM (*) (glob)
1424 Mercurial Distributed SCM (*) (glob)
1422
1425
1423 $ HGPLAIN=1 hg version --quiet
1426 $ HGPLAIN=1 hg version --quiet
1424 ### default ### plain: 1
1427 ### default ### plain: 1
1425 ### yes ####### plain: 1
1428 ### yes ####### plain: 1
1426 ### no ######## plain: <unset>
1429 ### no ######## plain: <unset>
1430 ### auto ###### plain: 1
1427 Mercurial Distributed SCM (*) (glob)
1431 Mercurial Distributed SCM (*) (glob)
General Comments 0
You need to be logged in to leave comments. Login now