##// END OF EJS Templates
hgweb: support alternate logo url...
Steven Stallion -
r13964:616ad3f6 default
parent child Browse files
Show More
@@ -1,1140 +1,1143 b''
1 ======
1 ======
2 hgrc
2 hgrc
3 ======
3 ======
4
4
5 ---------------------------------
5 ---------------------------------
6 configuration files for Mercurial
6 configuration files for Mercurial
7 ---------------------------------
7 ---------------------------------
8
8
9 :Author: Bryan O'Sullivan <bos@serpentine.com>
9 :Author: Bryan O'Sullivan <bos@serpentine.com>
10 :Organization: Mercurial
10 :Organization: Mercurial
11 :Manual section: 5
11 :Manual section: 5
12 :Manual group: Mercurial Manual
12 :Manual group: Mercurial Manual
13
13
14 .. contents::
14 .. contents::
15 :backlinks: top
15 :backlinks: top
16 :class: htmlonly
16 :class: htmlonly
17
17
18
18
19 Synopsis
19 Synopsis
20 --------
20 --------
21
21
22 The Mercurial system uses a set of configuration files to control
22 The Mercurial system uses a set of configuration files to control
23 aspects of its behavior.
23 aspects of its behavior.
24
24
25 Files
25 Files
26 -----
26 -----
27
27
28 Mercurial reads configuration data from several files, if they exist.
28 Mercurial reads configuration data from several files, if they exist.
29 The names of these files depend on the system on which Mercurial is
29 The names of these files depend on the system on which Mercurial is
30 installed. ``*.rc`` files from a single directory are read in
30 installed. ``*.rc`` files from a single directory are read in
31 alphabetical order, later ones overriding earlier ones. Where multiple
31 alphabetical order, later ones overriding earlier ones. Where multiple
32 paths are given below, settings from earlier paths override later
32 paths are given below, settings from earlier paths override later
33 ones.
33 ones.
34
34
35 | (Unix, Windows) ``<repo>/.hg/hgrc``
35 | (Unix, Windows) ``<repo>/.hg/hgrc``
36
36
37 Per-repository configuration options that only apply in a
37 Per-repository configuration options that only apply in a
38 particular repository. This file is not version-controlled, and
38 particular repository. This file is not version-controlled, and
39 will not get transferred during a "clone" operation. Options in
39 will not get transferred during a "clone" operation. Options in
40 this file override options in all other configuration files. On
40 this file override options in all other configuration files. On
41 Unix, most of this file will be ignored if it doesn't belong to a
41 Unix, most of this file will be ignored if it doesn't belong to a
42 trusted user or to a trusted group. See the documentation for the
42 trusted user or to a trusted group. See the documentation for the
43 trusted_ section below for more details.
43 trusted_ section below for more details.
44
44
45 | (Unix) ``$HOME/.hgrc``
45 | (Unix) ``$HOME/.hgrc``
46 | (Windows) ``%USERPROFILE%\.hgrc``
46 | (Windows) ``%USERPROFILE%\.hgrc``
47 | (Windows) ``%USERPROFILE%\Mercurial.ini``
47 | (Windows) ``%USERPROFILE%\Mercurial.ini``
48 | (Windows) ``%HOME%\.hgrc``
48 | (Windows) ``%HOME%\.hgrc``
49 | (Windows) ``%HOME%\Mercurial.ini``
49 | (Windows) ``%HOME%\Mercurial.ini``
50
50
51 Per-user configuration file(s), for the user running Mercurial. On
51 Per-user configuration file(s), for the user running Mercurial. On
52 Windows 9x, ``%HOME%`` is replaced by ``%APPDATA%``. Options in these
52 Windows 9x, ``%HOME%`` is replaced by ``%APPDATA%``. Options in these
53 files apply to all Mercurial commands executed by this user in any
53 files apply to all Mercurial commands executed by this user in any
54 directory. Options in these files override per-system and per-installation
54 directory. Options in these files override per-system and per-installation
55 options.
55 options.
56
56
57 | (Unix) ``/etc/mercurial/hgrc``
57 | (Unix) ``/etc/mercurial/hgrc``
58 | (Unix) ``/etc/mercurial/hgrc.d/*.rc``
58 | (Unix) ``/etc/mercurial/hgrc.d/*.rc``
59
59
60 Per-system configuration files, for the system on which Mercurial
60 Per-system configuration files, for the system on which Mercurial
61 is running. Options in these files apply to all Mercurial commands
61 is running. Options in these files apply to all Mercurial commands
62 executed by any user in any directory. Options in these files
62 executed by any user in any directory. Options in these files
63 override per-installation options.
63 override per-installation options.
64
64
65 | (Unix) ``<install-root>/etc/mercurial/hgrc``
65 | (Unix) ``<install-root>/etc/mercurial/hgrc``
66 | (Unix) ``<install-root>/etc/mercurial/hgrc.d/*.rc``
66 | (Unix) ``<install-root>/etc/mercurial/hgrc.d/*.rc``
67
67
68 Per-installation configuration files, searched for in the
68 Per-installation configuration files, searched for in the
69 directory where Mercurial is installed. ``<install-root>`` is the
69 directory where Mercurial is installed. ``<install-root>`` is the
70 parent directory of the **hg** executable (or symlink) being run. For
70 parent directory of the **hg** executable (or symlink) being run. For
71 example, if installed in ``/shared/tools/bin/hg``, Mercurial will look
71 example, if installed in ``/shared/tools/bin/hg``, Mercurial will look
72 in ``/shared/tools/etc/mercurial/hgrc``. Options in these files apply
72 in ``/shared/tools/etc/mercurial/hgrc``. Options in these files apply
73 to all Mercurial commands executed by any user in any directory.
73 to all Mercurial commands executed by any user in any directory.
74
74
75 | (Windows) ``<install-dir>\Mercurial.ini``
75 | (Windows) ``<install-dir>\Mercurial.ini``
76 | (Windows) ``<install-dir>\hgrc.d\*.rc``
76 | (Windows) ``<install-dir>\hgrc.d\*.rc``
77 | (Windows) ``HKEY_LOCAL_MACHINE\SOFTWARE\Mercurial``
77 | (Windows) ``HKEY_LOCAL_MACHINE\SOFTWARE\Mercurial``
78
78
79 Per-installation/system configuration files, for the system on
79 Per-installation/system configuration files, for the system on
80 which Mercurial is running. Options in these files apply to all
80 which Mercurial is running. Options in these files apply to all
81 Mercurial commands executed by any user in any directory. Registry
81 Mercurial commands executed by any user in any directory. Registry
82 keys contain PATH-like strings, every part of which must reference
82 keys contain PATH-like strings, every part of which must reference
83 a ``Mercurial.ini`` file or be a directory where ``*.rc`` files will
83 a ``Mercurial.ini`` file or be a directory where ``*.rc`` files will
84 be read. Mercurial checks each of these locations in the specified
84 be read. Mercurial checks each of these locations in the specified
85 order until one or more configuration files are detected. If the
85 order until one or more configuration files are detected. If the
86 pywin32 extensions are not installed, Mercurial will only look for
86 pywin32 extensions are not installed, Mercurial will only look for
87 site-wide configuration in ``C:\Mercurial\Mercurial.ini``.
87 site-wide configuration in ``C:\Mercurial\Mercurial.ini``.
88
88
89 Syntax
89 Syntax
90 ------
90 ------
91
91
92 A configuration file consists of sections, led by a ``[section]`` header
92 A configuration file consists of sections, led by a ``[section]`` header
93 and followed by ``name = value`` entries (sometimes called
93 and followed by ``name = value`` entries (sometimes called
94 ``configuration keys``)::
94 ``configuration keys``)::
95
95
96 [spam]
96 [spam]
97 eggs=ham
97 eggs=ham
98 green=
98 green=
99 eggs
99 eggs
100
100
101 Each line contains one entry. If the lines that follow are indented,
101 Each line contains one entry. If the lines that follow are indented,
102 they are treated as continuations of that entry. Leading whitespace is
102 they are treated as continuations of that entry. Leading whitespace is
103 removed from values. Empty lines are skipped. Lines beginning with
103 removed from values. Empty lines are skipped. Lines beginning with
104 ``#`` or ``;`` are ignored and may be used to provide comments.
104 ``#`` or ``;`` are ignored and may be used to provide comments.
105
105
106 Configuration keys can be set multiple times, in which case mercurial
106 Configuration keys can be set multiple times, in which case mercurial
107 will use the value that was configured last. As an example::
107 will use the value that was configured last. As an example::
108
108
109 [spam]
109 [spam]
110 eggs=large
110 eggs=large
111 ham=serrano
111 ham=serrano
112 eggs=small
112 eggs=small
113
113
114 This would set the configuration key named ``eggs`` to ``small``.
114 This would set the configuration key named ``eggs`` to ``small``.
115
115
116 It is also possible to define a section multiple times. A section can
116 It is also possible to define a section multiple times. A section can
117 be redefined on the same and/or on different hgrc files. For example::
117 be redefined on the same and/or on different hgrc files. For example::
118
118
119 [foo]
119 [foo]
120 eggs=large
120 eggs=large
121 ham=serrano
121 ham=serrano
122 eggs=small
122 eggs=small
123
123
124 [bar]
124 [bar]
125 eggs=ham
125 eggs=ham
126 green=
126 green=
127 eggs
127 eggs
128
128
129 [foo]
129 [foo]
130 ham=prosciutto
130 ham=prosciutto
131 eggs=medium
131 eggs=medium
132 bread=toasted
132 bread=toasted
133
133
134 This would set the ``eggs``, ``ham``, and ``bread`` configuration keys
134 This would set the ``eggs``, ``ham``, and ``bread`` configuration keys
135 of the ``foo`` section to ``medium``, ``prosciutto``, and ``toasted``,
135 of the ``foo`` section to ``medium``, ``prosciutto``, and ``toasted``,
136 respectively. As you can see there only thing that matters is the last
136 respectively. As you can see there only thing that matters is the last
137 value that was set for each of the configuration keys.
137 value that was set for each of the configuration keys.
138
138
139 If a configuration key is set multiple times in different
139 If a configuration key is set multiple times in different
140 configuration files the final value will depend on the order in which
140 configuration files the final value will depend on the order in which
141 the different configuration files are read, with settings from earlier
141 the different configuration files are read, with settings from earlier
142 paths overriding later ones as described on the ``Files`` section
142 paths overriding later ones as described on the ``Files`` section
143 above.
143 above.
144
144
145 A line of the form ``%include file`` will include ``file`` into the
145 A line of the form ``%include file`` will include ``file`` into the
146 current configuration file. The inclusion is recursive, which means
146 current configuration file. The inclusion is recursive, which means
147 that included files can include other files. Filenames are relative to
147 that included files can include other files. Filenames are relative to
148 the configuration file in which the ``%include`` directive is found.
148 the configuration file in which the ``%include`` directive is found.
149 Environment variables and ``~user`` constructs are expanded in
149 Environment variables and ``~user`` constructs are expanded in
150 ``file``. This lets you do something like::
150 ``file``. This lets you do something like::
151
151
152 %include ~/.hgrc.d/$HOST.rc
152 %include ~/.hgrc.d/$HOST.rc
153
153
154 to include a different configuration file on each computer you use.
154 to include a different configuration file on each computer you use.
155
155
156 A line with ``%unset name`` will remove ``name`` from the current
156 A line with ``%unset name`` will remove ``name`` from the current
157 section, if it has been set previously.
157 section, if it has been set previously.
158
158
159 The values are either free-form text strings, lists of text strings,
159 The values are either free-form text strings, lists of text strings,
160 or Boolean values. Boolean values can be set to true using any of "1",
160 or Boolean values. Boolean values can be set to true using any of "1",
161 "yes", "true", or "on" and to false using "0", "no", "false", or "off"
161 "yes", "true", or "on" and to false using "0", "no", "false", or "off"
162 (all case insensitive).
162 (all case insensitive).
163
163
164 List values are separated by whitespace or comma, except when values are
164 List values are separated by whitespace or comma, except when values are
165 placed in double quotation marks::
165 placed in double quotation marks::
166
166
167 allow_read = "John Doe, PhD", brian, betty
167 allow_read = "John Doe, PhD", brian, betty
168
168
169 Quotation marks can be escaped by prefixing them with a backslash. Only
169 Quotation marks can be escaped by prefixing them with a backslash. Only
170 quotation marks at the beginning of a word is counted as a quotation
170 quotation marks at the beginning of a word is counted as a quotation
171 (e.g., ``foo"bar baz`` is the list of ``foo"bar`` and ``baz``).
171 (e.g., ``foo"bar baz`` is the list of ``foo"bar`` and ``baz``).
172
172
173 Sections
173 Sections
174 --------
174 --------
175
175
176 This section describes the different sections that may appear in a
176 This section describes the different sections that may appear in a
177 Mercurial "hgrc" file, the purpose of each section, its possible keys,
177 Mercurial "hgrc" file, the purpose of each section, its possible keys,
178 and their possible values.
178 and their possible values.
179
179
180 ``alias``
180 ``alias``
181 """""""""
181 """""""""
182 Defines command aliases.
182 Defines command aliases.
183 Aliases allow you to define your own commands in terms of other
183 Aliases allow you to define your own commands in terms of other
184 commands (or aliases), optionally including arguments.
184 commands (or aliases), optionally including arguments.
185
185
186 Alias definitions consist of lines of the form::
186 Alias definitions consist of lines of the form::
187
187
188 <alias> = <command> [<argument]...
188 <alias> = <command> [<argument]...
189
189
190 For example, this definition::
190 For example, this definition::
191
191
192 latest = log --limit 5
192 latest = log --limit 5
193
193
194 creates a new command ``latest`` that shows only the five most recent
194 creates a new command ``latest`` that shows only the five most recent
195 changesets. You can define subsequent aliases using earlier ones::
195 changesets. You can define subsequent aliases using earlier ones::
196
196
197 stable5 = latest -b stable
197 stable5 = latest -b stable
198
198
199 .. note:: It is possible to create aliases with the same names as
199 .. note:: It is possible to create aliases with the same names as
200 existing commands, which will then override the original
200 existing commands, which will then override the original
201 definitions. This is almost always a bad idea!
201 definitions. This is almost always a bad idea!
202
202
203
203
204 ``auth``
204 ``auth``
205 """"""""
205 """"""""
206
206
207 Authentication credentials for HTTP authentication. This section
207 Authentication credentials for HTTP authentication. This section
208 allows you to store usernames and passwords for use when logging
208 allows you to store usernames and passwords for use when logging
209 *into* HTTP servers. See the web_ configuration section if you want to
209 *into* HTTP servers. See the web_ configuration section if you want to
210 configure *who* can login to your HTTP server.
210 configure *who* can login to your HTTP server.
211
211
212 Each line has the following format::
212 Each line has the following format::
213
213
214 <name>.<argument> = <value>
214 <name>.<argument> = <value>
215
215
216 where ``<name>`` is used to group arguments into authentication
216 where ``<name>`` is used to group arguments into authentication
217 entries. Example::
217 entries. Example::
218
218
219 foo.prefix = hg.intevation.org/mercurial
219 foo.prefix = hg.intevation.org/mercurial
220 foo.username = foo
220 foo.username = foo
221 foo.password = bar
221 foo.password = bar
222 foo.schemes = http https
222 foo.schemes = http https
223
223
224 bar.prefix = secure.example.org
224 bar.prefix = secure.example.org
225 bar.key = path/to/file.key
225 bar.key = path/to/file.key
226 bar.cert = path/to/file.cert
226 bar.cert = path/to/file.cert
227 bar.schemes = https
227 bar.schemes = https
228
228
229 Supported arguments:
229 Supported arguments:
230
230
231 ``prefix``
231 ``prefix``
232 Either ``*`` or a URI prefix with or without the scheme part.
232 Either ``*`` or a URI prefix with or without the scheme part.
233 The authentication entry with the longest matching prefix is used
233 The authentication entry with the longest matching prefix is used
234 (where ``*`` matches everything and counts as a match of length
234 (where ``*`` matches everything and counts as a match of length
235 1). If the prefix doesn't include a scheme, the match is performed
235 1). If the prefix doesn't include a scheme, the match is performed
236 against the URI with its scheme stripped as well, and the schemes
236 against the URI with its scheme stripped as well, and the schemes
237 argument, q.v., is then subsequently consulted.
237 argument, q.v., is then subsequently consulted.
238 ``username``
238 ``username``
239 Optional. Username to authenticate with. If not given, and the
239 Optional. Username to authenticate with. If not given, and the
240 remote site requires basic or digest authentication, the user will
240 remote site requires basic or digest authentication, the user will
241 be prompted for it. Environment variables are expanded in the
241 be prompted for it. Environment variables are expanded in the
242 username letting you do ``foo.username = $USER``.
242 username letting you do ``foo.username = $USER``.
243 ``password``
243 ``password``
244 Optional. Password to authenticate with. If not given, and the
244 Optional. Password to authenticate with. If not given, and the
245 remote site requires basic or digest authentication, the user
245 remote site requires basic or digest authentication, the user
246 will be prompted for it.
246 will be prompted for it.
247 ``key``
247 ``key``
248 Optional. PEM encoded client certificate key file. Environment
248 Optional. PEM encoded client certificate key file. Environment
249 variables are expanded in the filename.
249 variables are expanded in the filename.
250 ``cert``
250 ``cert``
251 Optional. PEM encoded client certificate chain file. Environment
251 Optional. PEM encoded client certificate chain file. Environment
252 variables are expanded in the filename.
252 variables are expanded in the filename.
253 ``schemes``
253 ``schemes``
254 Optional. Space separated list of URI schemes to use this
254 Optional. Space separated list of URI schemes to use this
255 authentication entry with. Only used if the prefix doesn't include
255 authentication entry with. Only used if the prefix doesn't include
256 a scheme. Supported schemes are http and https. They will match
256 a scheme. Supported schemes are http and https. They will match
257 static-http and static-https respectively, as well.
257 static-http and static-https respectively, as well.
258 Default: https.
258 Default: https.
259
259
260 If no suitable authentication entry is found, the user is prompted
260 If no suitable authentication entry is found, the user is prompted
261 for credentials as usual if required by the remote.
261 for credentials as usual if required by the remote.
262
262
263
263
264 ``decode/encode``
264 ``decode/encode``
265 """""""""""""""""
265 """""""""""""""""
266 Filters for transforming files on checkout/checkin. This would
266 Filters for transforming files on checkout/checkin. This would
267 typically be used for newline processing or other
267 typically be used for newline processing or other
268 localization/canonicalization of files.
268 localization/canonicalization of files.
269
269
270 Filters consist of a filter pattern followed by a filter command.
270 Filters consist of a filter pattern followed by a filter command.
271 Filter patterns are globs by default, rooted at the repository root.
271 Filter patterns are globs by default, rooted at the repository root.
272 For example, to match any file ending in ``.txt`` in the root
272 For example, to match any file ending in ``.txt`` in the root
273 directory only, use the pattern ``*.txt``. To match any file ending
273 directory only, use the pattern ``*.txt``. To match any file ending
274 in ``.c`` anywhere in the repository, use the pattern ``**.c``.
274 in ``.c`` anywhere in the repository, use the pattern ``**.c``.
275 For each file only the first matching filter applies.
275 For each file only the first matching filter applies.
276
276
277 The filter command can start with a specifier, either ``pipe:`` or
277 The filter command can start with a specifier, either ``pipe:`` or
278 ``tempfile:``. If no specifier is given, ``pipe:`` is used by default.
278 ``tempfile:``. If no specifier is given, ``pipe:`` is used by default.
279
279
280 A ``pipe:`` command must accept data on stdin and return the transformed
280 A ``pipe:`` command must accept data on stdin and return the transformed
281 data on stdout.
281 data on stdout.
282
282
283 Pipe example::
283 Pipe example::
284
284
285 [encode]
285 [encode]
286 # uncompress gzip files on checkin to improve delta compression
286 # uncompress gzip files on checkin to improve delta compression
287 # note: not necessarily a good idea, just an example
287 # note: not necessarily a good idea, just an example
288 *.gz = pipe: gunzip
288 *.gz = pipe: gunzip
289
289
290 [decode]
290 [decode]
291 # recompress gzip files when writing them to the working dir (we
291 # recompress gzip files when writing them to the working dir (we
292 # can safely omit "pipe:", because it's the default)
292 # can safely omit "pipe:", because it's the default)
293 *.gz = gzip
293 *.gz = gzip
294
294
295 A ``tempfile:`` command is a template. The string ``INFILE`` is replaced
295 A ``tempfile:`` command is a template. The string ``INFILE`` is replaced
296 with the name of a temporary file that contains the data to be
296 with the name of a temporary file that contains the data to be
297 filtered by the command. The string ``OUTFILE`` is replaced with the name
297 filtered by the command. The string ``OUTFILE`` is replaced with the name
298 of an empty temporary file, where the filtered data must be written by
298 of an empty temporary file, where the filtered data must be written by
299 the command.
299 the command.
300
300
301 .. note:: The tempfile mechanism is recommended for Windows systems,
301 .. note:: The tempfile mechanism is recommended for Windows systems,
302 where the standard shell I/O redirection operators often have
302 where the standard shell I/O redirection operators often have
303 strange effects and may corrupt the contents of your files.
303 strange effects and may corrupt the contents of your files.
304
304
305 This filter mechanism is used internally by the ``eol`` extension to
305 This filter mechanism is used internally by the ``eol`` extension to
306 translate line ending characters between Windows (CRLF) and Unix (LF)
306 translate line ending characters between Windows (CRLF) and Unix (LF)
307 format. We suggest you use the ``eol`` extension for convenience.
307 format. We suggest you use the ``eol`` extension for convenience.
308
308
309
309
310 ``defaults``
310 ``defaults``
311 """"""""""""
311 """"""""""""
312
312
313 (defaults are deprecated. Don't use them. Use aliases instead)
313 (defaults are deprecated. Don't use them. Use aliases instead)
314
314
315 Use the ``[defaults]`` section to define command defaults, i.e. the
315 Use the ``[defaults]`` section to define command defaults, i.e. the
316 default options/arguments to pass to the specified commands.
316 default options/arguments to pass to the specified commands.
317
317
318 The following example makes :hg:`log` run in verbose mode, and
318 The following example makes :hg:`log` run in verbose mode, and
319 :hg:`status` show only the modified files, by default::
319 :hg:`status` show only the modified files, by default::
320
320
321 [defaults]
321 [defaults]
322 log = -v
322 log = -v
323 status = -m
323 status = -m
324
324
325 The actual commands, instead of their aliases, must be used when
325 The actual commands, instead of their aliases, must be used when
326 defining command defaults. The command defaults will also be applied
326 defining command defaults. The command defaults will also be applied
327 to the aliases of the commands defined.
327 to the aliases of the commands defined.
328
328
329
329
330 ``diff``
330 ``diff``
331 """"""""
331 """"""""
332
332
333 Settings used when displaying diffs. Everything except for ``unified`` is a
333 Settings used when displaying diffs. Everything except for ``unified`` is a
334 Boolean and defaults to False.
334 Boolean and defaults to False.
335
335
336 ``git``
336 ``git``
337 Use git extended diff format.
337 Use git extended diff format.
338 ``nodates``
338 ``nodates``
339 Don't include dates in diff headers.
339 Don't include dates in diff headers.
340 ``showfunc``
340 ``showfunc``
341 Show which function each change is in.
341 Show which function each change is in.
342 ``ignorews``
342 ``ignorews``
343 Ignore white space when comparing lines.
343 Ignore white space when comparing lines.
344 ``ignorewsamount``
344 ``ignorewsamount``
345 Ignore changes in the amount of white space.
345 Ignore changes in the amount of white space.
346 ``ignoreblanklines``
346 ``ignoreblanklines``
347 Ignore changes whose lines are all blank.
347 Ignore changes whose lines are all blank.
348 ``unified``
348 ``unified``
349 Number of lines of context to show.
349 Number of lines of context to show.
350
350
351 ``email``
351 ``email``
352 """""""""
352 """""""""
353 Settings for extensions that send email messages.
353 Settings for extensions that send email messages.
354
354
355 ``from``
355 ``from``
356 Optional. Email address to use in "From" header and SMTP envelope
356 Optional. Email address to use in "From" header and SMTP envelope
357 of outgoing messages.
357 of outgoing messages.
358 ``to``
358 ``to``
359 Optional. Comma-separated list of recipients' email addresses.
359 Optional. Comma-separated list of recipients' email addresses.
360 ``cc``
360 ``cc``
361 Optional. Comma-separated list of carbon copy recipients'
361 Optional. Comma-separated list of carbon copy recipients'
362 email addresses.
362 email addresses.
363 ``bcc``
363 ``bcc``
364 Optional. Comma-separated list of blind carbon copy recipients'
364 Optional. Comma-separated list of blind carbon copy recipients'
365 email addresses.
365 email addresses.
366 ``method``
366 ``method``
367 Optional. Method to use to send email messages. If value is ``smtp``
367 Optional. Method to use to send email messages. If value is ``smtp``
368 (default), use SMTP (see the SMTP_ section for configuration).
368 (default), use SMTP (see the SMTP_ section for configuration).
369 Otherwise, use as name of program to run that acts like sendmail
369 Otherwise, use as name of program to run that acts like sendmail
370 (takes ``-f`` option for sender, list of recipients on command line,
370 (takes ``-f`` option for sender, list of recipients on command line,
371 message on stdin). Normally, setting this to ``sendmail`` or
371 message on stdin). Normally, setting this to ``sendmail`` or
372 ``/usr/sbin/sendmail`` is enough to use sendmail to send messages.
372 ``/usr/sbin/sendmail`` is enough to use sendmail to send messages.
373 ``charsets``
373 ``charsets``
374 Optional. Comma-separated list of character sets considered
374 Optional. Comma-separated list of character sets considered
375 convenient for recipients. Addresses, headers, and parts not
375 convenient for recipients. Addresses, headers, and parts not
376 containing patches of outgoing messages will be encoded in the
376 containing patches of outgoing messages will be encoded in the
377 first character set to which conversion from local encoding
377 first character set to which conversion from local encoding
378 (``$HGENCODING``, ``ui.fallbackencoding``) succeeds. If correct
378 (``$HGENCODING``, ``ui.fallbackencoding``) succeeds. If correct
379 conversion fails, the text in question is sent as is. Defaults to
379 conversion fails, the text in question is sent as is. Defaults to
380 empty (explicit) list.
380 empty (explicit) list.
381
381
382 Order of outgoing email character sets:
382 Order of outgoing email character sets:
383
383
384 1. ``us-ascii``: always first, regardless of settings
384 1. ``us-ascii``: always first, regardless of settings
385 2. ``email.charsets``: in order given by user
385 2. ``email.charsets``: in order given by user
386 3. ``ui.fallbackencoding``: if not in email.charsets
386 3. ``ui.fallbackencoding``: if not in email.charsets
387 4. ``$HGENCODING``: if not in email.charsets
387 4. ``$HGENCODING``: if not in email.charsets
388 5. ``utf-8``: always last, regardless of settings
388 5. ``utf-8``: always last, regardless of settings
389
389
390 Email example::
390 Email example::
391
391
392 [email]
392 [email]
393 from = Joseph User <joe.user@example.com>
393 from = Joseph User <joe.user@example.com>
394 method = /usr/sbin/sendmail
394 method = /usr/sbin/sendmail
395 # charsets for western Europeans
395 # charsets for western Europeans
396 # us-ascii, utf-8 omitted, as they are tried first and last
396 # us-ascii, utf-8 omitted, as they are tried first and last
397 charsets = iso-8859-1, iso-8859-15, windows-1252
397 charsets = iso-8859-1, iso-8859-15, windows-1252
398
398
399
399
400 ``extensions``
400 ``extensions``
401 """"""""""""""
401 """"""""""""""
402
402
403 Mercurial has an extension mechanism for adding new features. To
403 Mercurial has an extension mechanism for adding new features. To
404 enable an extension, create an entry for it in this section.
404 enable an extension, create an entry for it in this section.
405
405
406 If you know that the extension is already in Python's search path,
406 If you know that the extension is already in Python's search path,
407 you can give the name of the module, followed by ``=``, with nothing
407 you can give the name of the module, followed by ``=``, with nothing
408 after the ``=``.
408 after the ``=``.
409
409
410 Otherwise, give a name that you choose, followed by ``=``, followed by
410 Otherwise, give a name that you choose, followed by ``=``, followed by
411 the path to the ``.py`` file (including the file name extension) that
411 the path to the ``.py`` file (including the file name extension) that
412 defines the extension.
412 defines the extension.
413
413
414 To explicitly disable an extension that is enabled in an hgrc of
414 To explicitly disable an extension that is enabled in an hgrc of
415 broader scope, prepend its path with ``!``, as in ``foo = !/ext/path``
415 broader scope, prepend its path with ``!``, as in ``foo = !/ext/path``
416 or ``foo = !`` when path is not supplied.
416 or ``foo = !`` when path is not supplied.
417
417
418 Example for ``~/.hgrc``::
418 Example for ``~/.hgrc``::
419
419
420 [extensions]
420 [extensions]
421 # (the mq extension will get loaded from Mercurial's path)
421 # (the mq extension will get loaded from Mercurial's path)
422 mq =
422 mq =
423 # (this extension will get loaded from the file specified)
423 # (this extension will get loaded from the file specified)
424 myfeature = ~/.hgext/myfeature.py
424 myfeature = ~/.hgext/myfeature.py
425
425
426
426
427 ``hostfingerprints``
427 ``hostfingerprints``
428 """"""""""""""""""""
428 """"""""""""""""""""
429
429
430 Fingerprints of the certificates of known HTTPS servers.
430 Fingerprints of the certificates of known HTTPS servers.
431 A HTTPS connection to a server with a fingerprint configured here will
431 A HTTPS connection to a server with a fingerprint configured here will
432 only succeed if the servers certificate matches the fingerprint.
432 only succeed if the servers certificate matches the fingerprint.
433 This is very similar to how ssh known hosts works.
433 This is very similar to how ssh known hosts works.
434 The fingerprint is the SHA-1 hash value of the DER encoded certificate.
434 The fingerprint is the SHA-1 hash value of the DER encoded certificate.
435 The CA chain and web.cacerts is not used for servers with a fingerprint.
435 The CA chain and web.cacerts is not used for servers with a fingerprint.
436
436
437 For example::
437 For example::
438
438
439 [hostfingerprints]
439 [hostfingerprints]
440 hg.intevation.org = 38:76:52:7c:87:26:9a:8f:4a:f8:d3:de:08:45:3b:ea:d6:4b:ee:cc
440 hg.intevation.org = 38:76:52:7c:87:26:9a:8f:4a:f8:d3:de:08:45:3b:ea:d6:4b:ee:cc
441
441
442 This feature is only supported when using Python 2.6 or later.
442 This feature is only supported when using Python 2.6 or later.
443
443
444
444
445 ``format``
445 ``format``
446 """"""""""
446 """"""""""
447
447
448 ``usestore``
448 ``usestore``
449 Enable or disable the "store" repository format which improves
449 Enable or disable the "store" repository format which improves
450 compatibility with systems that fold case or otherwise mangle
450 compatibility with systems that fold case or otherwise mangle
451 filenames. Enabled by default. Disabling this option will allow
451 filenames. Enabled by default. Disabling this option will allow
452 you to store longer filenames in some situations at the expense of
452 you to store longer filenames in some situations at the expense of
453 compatibility and ensures that the on-disk format of newly created
453 compatibility and ensures that the on-disk format of newly created
454 repositories will be compatible with Mercurial before version 0.9.4.
454 repositories will be compatible with Mercurial before version 0.9.4.
455
455
456 ``usefncache``
456 ``usefncache``
457 Enable or disable the "fncache" repository format which enhances
457 Enable or disable the "fncache" repository format which enhances
458 the "store" repository format (which has to be enabled to use
458 the "store" repository format (which has to be enabled to use
459 fncache) to allow longer filenames and avoids using Windows
459 fncache) to allow longer filenames and avoids using Windows
460 reserved names, e.g. "nul". Enabled by default. Disabling this
460 reserved names, e.g. "nul". Enabled by default. Disabling this
461 option ensures that the on-disk format of newly created
461 option ensures that the on-disk format of newly created
462 repositories will be compatible with Mercurial before version 1.1.
462 repositories will be compatible with Mercurial before version 1.1.
463
463
464 ``dotencode``
464 ``dotencode``
465 Enable or disable the "dotencode" repository format which enhances
465 Enable or disable the "dotencode" repository format which enhances
466 the "fncache" repository format (which has to be enabled to use
466 the "fncache" repository format (which has to be enabled to use
467 dotencode) to avoid issues with filenames starting with ._ on
467 dotencode) to avoid issues with filenames starting with ._ on
468 Mac OS X and spaces on Windows. Enabled by default. Disabling this
468 Mac OS X and spaces on Windows. Enabled by default. Disabling this
469 option ensures that the on-disk format of newly created
469 option ensures that the on-disk format of newly created
470 repositories will be compatible with Mercurial before version 1.7.
470 repositories will be compatible with Mercurial before version 1.7.
471
471
472 ``merge-patterns``
472 ``merge-patterns``
473 """"""""""""""""""
473 """"""""""""""""""
474
474
475 This section specifies merge tools to associate with particular file
475 This section specifies merge tools to associate with particular file
476 patterns. Tools matched here will take precedence over the default
476 patterns. Tools matched here will take precedence over the default
477 merge tool. Patterns are globs by default, rooted at the repository
477 merge tool. Patterns are globs by default, rooted at the repository
478 root.
478 root.
479
479
480 Example::
480 Example::
481
481
482 [merge-patterns]
482 [merge-patterns]
483 **.c = kdiff3
483 **.c = kdiff3
484 **.jpg = myimgmerge
484 **.jpg = myimgmerge
485
485
486 ``merge-tools``
486 ``merge-tools``
487 """""""""""""""
487 """""""""""""""
488
488
489 This section configures external merge tools to use for file-level
489 This section configures external merge tools to use for file-level
490 merges.
490 merges.
491
491
492 Example ``~/.hgrc``::
492 Example ``~/.hgrc``::
493
493
494 [merge-tools]
494 [merge-tools]
495 # Override stock tool location
495 # Override stock tool location
496 kdiff3.executable = ~/bin/kdiff3
496 kdiff3.executable = ~/bin/kdiff3
497 # Specify command line
497 # Specify command line
498 kdiff3.args = $base $local $other -o $output
498 kdiff3.args = $base $local $other -o $output
499 # Give higher priority
499 # Give higher priority
500 kdiff3.priority = 1
500 kdiff3.priority = 1
501
501
502 # Define new tool
502 # Define new tool
503 myHtmlTool.args = -m $local $other $base $output
503 myHtmlTool.args = -m $local $other $base $output
504 myHtmlTool.regkey = Software\FooSoftware\HtmlMerge
504 myHtmlTool.regkey = Software\FooSoftware\HtmlMerge
505 myHtmlTool.priority = 1
505 myHtmlTool.priority = 1
506
506
507 Supported arguments:
507 Supported arguments:
508
508
509 ``priority``
509 ``priority``
510 The priority in which to evaluate this tool.
510 The priority in which to evaluate this tool.
511 Default: 0.
511 Default: 0.
512 ``executable``
512 ``executable``
513 Either just the name of the executable or its pathname. On Windows,
513 Either just the name of the executable or its pathname. On Windows,
514 the path can use environment variables with ${ProgramFiles} syntax.
514 the path can use environment variables with ${ProgramFiles} syntax.
515 Default: the tool name.
515 Default: the tool name.
516 ``args``
516 ``args``
517 The arguments to pass to the tool executable. You can refer to the
517 The arguments to pass to the tool executable. You can refer to the
518 files being merged as well as the output file through these
518 files being merged as well as the output file through these
519 variables: ``$base``, ``$local``, ``$other``, ``$output``.
519 variables: ``$base``, ``$local``, ``$other``, ``$output``.
520 Default: ``$local $base $other``
520 Default: ``$local $base $other``
521 ``premerge``
521 ``premerge``
522 Attempt to run internal non-interactive 3-way merge tool before
522 Attempt to run internal non-interactive 3-way merge tool before
523 launching external tool. Options are ``true``, ``false``, or ``keep``
523 launching external tool. Options are ``true``, ``false``, or ``keep``
524 to leave markers in the file if the premerge fails.
524 to leave markers in the file if the premerge fails.
525 Default: True
525 Default: True
526 ``binary``
526 ``binary``
527 This tool can merge binary files. Defaults to False, unless tool
527 This tool can merge binary files. Defaults to False, unless tool
528 was selected by file pattern match.
528 was selected by file pattern match.
529 ``symlink``
529 ``symlink``
530 This tool can merge symlinks. Defaults to False, even if tool was
530 This tool can merge symlinks. Defaults to False, even if tool was
531 selected by file pattern match.
531 selected by file pattern match.
532 ``check``
532 ``check``
533 A list of merge success-checking options:
533 A list of merge success-checking options:
534
534
535 ``changed``
535 ``changed``
536 Ask whether merge was successful when the merged file shows no changes.
536 Ask whether merge was successful when the merged file shows no changes.
537 ``conflicts``
537 ``conflicts``
538 Check whether there are conflicts even though the tool reported success.
538 Check whether there are conflicts even though the tool reported success.
539 ``prompt``
539 ``prompt``
540 Always prompt for merge success, regardless of success reported by tool.
540 Always prompt for merge success, regardless of success reported by tool.
541
541
542 ``checkchanged``
542 ``checkchanged``
543 True is equivalent to ``check = changed``.
543 True is equivalent to ``check = changed``.
544 Default: False
544 Default: False
545 ``checkconflicts``
545 ``checkconflicts``
546 True is equivalent to ``check = conflicts``.
546 True is equivalent to ``check = conflicts``.
547 Default: False
547 Default: False
548 ``fixeol``
548 ``fixeol``
549 Attempt to fix up EOL changes caused by the merge tool.
549 Attempt to fix up EOL changes caused by the merge tool.
550 Default: False
550 Default: False
551 ``gui``
551 ``gui``
552 This tool requires a graphical interface to run. Default: False
552 This tool requires a graphical interface to run. Default: False
553 ``regkey``
553 ``regkey``
554 Windows registry key which describes install location of this
554 Windows registry key which describes install location of this
555 tool. Mercurial will search for this key first under
555 tool. Mercurial will search for this key first under
556 ``HKEY_CURRENT_USER`` and then under ``HKEY_LOCAL_MACHINE``.
556 ``HKEY_CURRENT_USER`` and then under ``HKEY_LOCAL_MACHINE``.
557 Default: None
557 Default: None
558 ``regkeyalt``
558 ``regkeyalt``
559 An alternate Windows registry key to try if the first key is not
559 An alternate Windows registry key to try if the first key is not
560 found. The alternate key uses the same ``regname`` and ``regappend``
560 found. The alternate key uses the same ``regname`` and ``regappend``
561 semantics of the primary key. The most common use for this key
561 semantics of the primary key. The most common use for this key
562 is to search for 32bit applications on 64bit operating systems.
562 is to search for 32bit applications on 64bit operating systems.
563 Default: None
563 Default: None
564 ``regname``
564 ``regname``
565 Name of value to read from specified registry key. Defaults to the
565 Name of value to read from specified registry key. Defaults to the
566 unnamed (default) value.
566 unnamed (default) value.
567 ``regappend``
567 ``regappend``
568 String to append to the value read from the registry, typically
568 String to append to the value read from the registry, typically
569 the executable name of the tool.
569 the executable name of the tool.
570 Default: None
570 Default: None
571
571
572
572
573 ``hooks``
573 ``hooks``
574 """""""""
574 """""""""
575 Commands or Python functions that get automatically executed by
575 Commands or Python functions that get automatically executed by
576 various actions such as starting or finishing a commit. Multiple
576 various actions such as starting or finishing a commit. Multiple
577 hooks can be run for the same action by appending a suffix to the
577 hooks can be run for the same action by appending a suffix to the
578 action. Overriding a site-wide hook can be done by changing its
578 action. Overriding a site-wide hook can be done by changing its
579 value or setting it to an empty string.
579 value or setting it to an empty string.
580
580
581 Example ``.hg/hgrc``::
581 Example ``.hg/hgrc``::
582
582
583 [hooks]
583 [hooks]
584 # update working directory after adding changesets
584 # update working directory after adding changesets
585 changegroup.update = hg update
585 changegroup.update = hg update
586 # do not use the site-wide hook
586 # do not use the site-wide hook
587 incoming =
587 incoming =
588 incoming.email = /my/email/hook
588 incoming.email = /my/email/hook
589 incoming.autobuild = /my/build/hook
589 incoming.autobuild = /my/build/hook
590
590
591 Most hooks are run with environment variables set that give useful
591 Most hooks are run with environment variables set that give useful
592 additional information. For each hook below, the environment
592 additional information. For each hook below, the environment
593 variables it is passed are listed with names of the form ``$HG_foo``.
593 variables it is passed are listed with names of the form ``$HG_foo``.
594
594
595 ``changegroup``
595 ``changegroup``
596 Run after a changegroup has been added via push, pull or unbundle.
596 Run after a changegroup has been added via push, pull or unbundle.
597 ID of the first new changeset is in ``$HG_NODE``. URL from which
597 ID of the first new changeset is in ``$HG_NODE``. URL from which
598 changes came is in ``$HG_URL``.
598 changes came is in ``$HG_URL``.
599 ``commit``
599 ``commit``
600 Run after a changeset has been created in the local repository. ID
600 Run after a changeset has been created in the local repository. ID
601 of the newly created changeset is in ``$HG_NODE``. Parent changeset
601 of the newly created changeset is in ``$HG_NODE``. Parent changeset
602 IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``.
602 IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``.
603 ``incoming``
603 ``incoming``
604 Run after a changeset has been pulled, pushed, or unbundled into
604 Run after a changeset has been pulled, pushed, or unbundled into
605 the local repository. The ID of the newly arrived changeset is in
605 the local repository. The ID of the newly arrived changeset is in
606 ``$HG_NODE``. URL that was source of changes came is in ``$HG_URL``.
606 ``$HG_NODE``. URL that was source of changes came is in ``$HG_URL``.
607 ``outgoing``
607 ``outgoing``
608 Run after sending changes from local repository to another. ID of
608 Run after sending changes from local repository to another. ID of
609 first changeset sent is in ``$HG_NODE``. Source of operation is in
609 first changeset sent is in ``$HG_NODE``. Source of operation is in
610 ``$HG_SOURCE``; see "preoutgoing" hook for description.
610 ``$HG_SOURCE``; see "preoutgoing" hook for description.
611 ``post-<command>``
611 ``post-<command>``
612 Run after successful invocations of the associated command. The
612 Run after successful invocations of the associated command. The
613 contents of the command line are passed as ``$HG_ARGS`` and the result
613 contents of the command line are passed as ``$HG_ARGS`` and the result
614 code in ``$HG_RESULT``. Parsed command line arguments are passed as
614 code in ``$HG_RESULT``. Parsed command line arguments are passed as
615 ``$HG_PATS`` and ``$HG_OPTS``. These contain string representations of
615 ``$HG_PATS`` and ``$HG_OPTS``. These contain string representations of
616 the python data internally passed to <command>. ``$HG_OPTS`` is a
616 the python data internally passed to <command>. ``$HG_OPTS`` is a
617 dictionary of options (with unspecified options set to their defaults).
617 dictionary of options (with unspecified options set to their defaults).
618 ``$HG_PATS`` is a list of arguments. Hook failure is ignored.
618 ``$HG_PATS`` is a list of arguments. Hook failure is ignored.
619 ``pre-<command>``
619 ``pre-<command>``
620 Run before executing the associated command. The contents of the
620 Run before executing the associated command. The contents of the
621 command line are passed as ``$HG_ARGS``. Parsed command line arguments
621 command line are passed as ``$HG_ARGS``. Parsed command line arguments
622 are passed as ``$HG_PATS`` and ``$HG_OPTS``. These contain string
622 are passed as ``$HG_PATS`` and ``$HG_OPTS``. These contain string
623 representations of the data internally passed to <command>. ``$HG_OPTS``
623 representations of the data internally passed to <command>. ``$HG_OPTS``
624 is a dictionary of options (with unspecified options set to their
624 is a dictionary of options (with unspecified options set to their
625 defaults). ``$HG_PATS`` is a list of arguments. If the hook returns
625 defaults). ``$HG_PATS`` is a list of arguments. If the hook returns
626 failure, the command doesn't execute and Mercurial returns the failure
626 failure, the command doesn't execute and Mercurial returns the failure
627 code.
627 code.
628 ``prechangegroup``
628 ``prechangegroup``
629 Run before a changegroup is added via push, pull or unbundle. Exit
629 Run before a changegroup is added via push, pull or unbundle. Exit
630 status 0 allows the changegroup to proceed. Non-zero status will
630 status 0 allows the changegroup to proceed. Non-zero status will
631 cause the push, pull or unbundle to fail. URL from which changes
631 cause the push, pull or unbundle to fail. URL from which changes
632 will come is in ``$HG_URL``.
632 will come is in ``$HG_URL``.
633 ``precommit``
633 ``precommit``
634 Run before starting a local commit. Exit status 0 allows the
634 Run before starting a local commit. Exit status 0 allows the
635 commit to proceed. Non-zero status will cause the commit to fail.
635 commit to proceed. Non-zero status will cause the commit to fail.
636 Parent changeset IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``.
636 Parent changeset IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``.
637 ``preoutgoing``
637 ``preoutgoing``
638 Run before collecting changes to send from the local repository to
638 Run before collecting changes to send from the local repository to
639 another. Non-zero status will cause failure. This lets you prevent
639 another. Non-zero status will cause failure. This lets you prevent
640 pull over HTTP or SSH. Also prevents against local pull, push
640 pull over HTTP or SSH. Also prevents against local pull, push
641 (outbound) or bundle commands, but not effective, since you can
641 (outbound) or bundle commands, but not effective, since you can
642 just copy files instead then. Source of operation is in
642 just copy files instead then. Source of operation is in
643 ``$HG_SOURCE``. If "serve", operation is happening on behalf of remote
643 ``$HG_SOURCE``. If "serve", operation is happening on behalf of remote
644 SSH or HTTP repository. If "push", "pull" or "bundle", operation
644 SSH or HTTP repository. If "push", "pull" or "bundle", operation
645 is happening on behalf of repository on same system.
645 is happening on behalf of repository on same system.
646 ``pretag``
646 ``pretag``
647 Run before creating a tag. Exit status 0 allows the tag to be
647 Run before creating a tag. Exit status 0 allows the tag to be
648 created. Non-zero status will cause the tag to fail. ID of
648 created. Non-zero status will cause the tag to fail. ID of
649 changeset to tag is in ``$HG_NODE``. Name of tag is in ``$HG_TAG``. Tag is
649 changeset to tag is in ``$HG_NODE``. Name of tag is in ``$HG_TAG``. Tag is
650 local if ``$HG_LOCAL=1``, in repository if ``$HG_LOCAL=0``.
650 local if ``$HG_LOCAL=1``, in repository if ``$HG_LOCAL=0``.
651 ``pretxnchangegroup``
651 ``pretxnchangegroup``
652 Run after a changegroup has been added via push, pull or unbundle,
652 Run after a changegroup has been added via push, pull or unbundle,
653 but before the transaction has been committed. Changegroup is
653 but before the transaction has been committed. Changegroup is
654 visible to hook program. This lets you validate incoming changes
654 visible to hook program. This lets you validate incoming changes
655 before accepting them. Passed the ID of the first new changeset in
655 before accepting them. Passed the ID of the first new changeset in
656 ``$HG_NODE``. Exit status 0 allows the transaction to commit. Non-zero
656 ``$HG_NODE``. Exit status 0 allows the transaction to commit. Non-zero
657 status will cause the transaction to be rolled back and the push,
657 status will cause the transaction to be rolled back and the push,
658 pull or unbundle will fail. URL that was source of changes is in
658 pull or unbundle will fail. URL that was source of changes is in
659 ``$HG_URL``.
659 ``$HG_URL``.
660 ``pretxncommit``
660 ``pretxncommit``
661 Run after a changeset has been created but the transaction not yet
661 Run after a changeset has been created but the transaction not yet
662 committed. Changeset is visible to hook program. This lets you
662 committed. Changeset is visible to hook program. This lets you
663 validate commit message and changes. Exit status 0 allows the
663 validate commit message and changes. Exit status 0 allows the
664 commit to proceed. Non-zero status will cause the transaction to
664 commit to proceed. Non-zero status will cause the transaction to
665 be rolled back. ID of changeset is in ``$HG_NODE``. Parent changeset
665 be rolled back. ID of changeset is in ``$HG_NODE``. Parent changeset
666 IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``.
666 IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``.
667 ``preupdate``
667 ``preupdate``
668 Run before updating the working directory. Exit status 0 allows
668 Run before updating the working directory. Exit status 0 allows
669 the update to proceed. Non-zero status will prevent the update.
669 the update to proceed. Non-zero status will prevent the update.
670 Changeset ID of first new parent is in ``$HG_PARENT1``. If merge, ID
670 Changeset ID of first new parent is in ``$HG_PARENT1``. If merge, ID
671 of second new parent is in ``$HG_PARENT2``.
671 of second new parent is in ``$HG_PARENT2``.
672 ``tag``
672 ``tag``
673 Run after a tag is created. ID of tagged changeset is in ``$HG_NODE``.
673 Run after a tag is created. ID of tagged changeset is in ``$HG_NODE``.
674 Name of tag is in ``$HG_TAG``. Tag is local if ``$HG_LOCAL=1``, in
674 Name of tag is in ``$HG_TAG``. Tag is local if ``$HG_LOCAL=1``, in
675 repository if ``$HG_LOCAL=0``.
675 repository if ``$HG_LOCAL=0``.
676 ``update``
676 ``update``
677 Run after updating the working directory. Changeset ID of first
677 Run after updating the working directory. Changeset ID of first
678 new parent is in ``$HG_PARENT1``. If merge, ID of second new parent is
678 new parent is in ``$HG_PARENT1``. If merge, ID of second new parent is
679 in ``$HG_PARENT2``. If the update succeeded, ``$HG_ERROR=0``. If the
679 in ``$HG_PARENT2``. If the update succeeded, ``$HG_ERROR=0``. If the
680 update failed (e.g. because conflicts not resolved), ``$HG_ERROR=1``.
680 update failed (e.g. because conflicts not resolved), ``$HG_ERROR=1``.
681
681
682 .. note:: It is generally better to use standard hooks rather than the
682 .. note:: It is generally better to use standard hooks rather than the
683 generic pre- and post- command hooks as they are guaranteed to be
683 generic pre- and post- command hooks as they are guaranteed to be
684 called in the appropriate contexts for influencing transactions.
684 called in the appropriate contexts for influencing transactions.
685 Also, hooks like "commit" will be called in all contexts that
685 Also, hooks like "commit" will be called in all contexts that
686 generate a commit (e.g. tag) and not just the commit command.
686 generate a commit (e.g. tag) and not just the commit command.
687
687
688 .. note:: Environment variables with empty values may not be passed to
688 .. note:: Environment variables with empty values may not be passed to
689 hooks on platforms such as Windows. As an example, ``$HG_PARENT2``
689 hooks on platforms such as Windows. As an example, ``$HG_PARENT2``
690 will have an empty value under Unix-like platforms for non-merge
690 will have an empty value under Unix-like platforms for non-merge
691 changesets, while it will not be available at all under Windows.
691 changesets, while it will not be available at all under Windows.
692
692
693 The syntax for Python hooks is as follows::
693 The syntax for Python hooks is as follows::
694
694
695 hookname = python:modulename.submodule.callable
695 hookname = python:modulename.submodule.callable
696 hookname = python:/path/to/python/module.py:callable
696 hookname = python:/path/to/python/module.py:callable
697
697
698 Python hooks are run within the Mercurial process. Each hook is
698 Python hooks are run within the Mercurial process. Each hook is
699 called with at least three keyword arguments: a ui object (keyword
699 called with at least three keyword arguments: a ui object (keyword
700 ``ui``), a repository object (keyword ``repo``), and a ``hooktype``
700 ``ui``), a repository object (keyword ``repo``), and a ``hooktype``
701 keyword that tells what kind of hook is used. Arguments listed as
701 keyword that tells what kind of hook is used. Arguments listed as
702 environment variables above are passed as keyword arguments, with no
702 environment variables above are passed as keyword arguments, with no
703 ``HG_`` prefix, and names in lower case.
703 ``HG_`` prefix, and names in lower case.
704
704
705 If a Python hook returns a "true" value or raises an exception, this
705 If a Python hook returns a "true" value or raises an exception, this
706 is treated as a failure.
706 is treated as a failure.
707
707
708
708
709 ``http_proxy``
709 ``http_proxy``
710 """"""""""""""
710 """"""""""""""
711 Used to access web-based Mercurial repositories through a HTTP
711 Used to access web-based Mercurial repositories through a HTTP
712 proxy.
712 proxy.
713
713
714 ``host``
714 ``host``
715 Host name and (optional) port of the proxy server, for example
715 Host name and (optional) port of the proxy server, for example
716 "myproxy:8000".
716 "myproxy:8000".
717 ``no``
717 ``no``
718 Optional. Comma-separated list of host names that should bypass
718 Optional. Comma-separated list of host names that should bypass
719 the proxy.
719 the proxy.
720 ``passwd``
720 ``passwd``
721 Optional. Password to authenticate with at the proxy server.
721 Optional. Password to authenticate with at the proxy server.
722 ``user``
722 ``user``
723 Optional. User name to authenticate with at the proxy server.
723 Optional. User name to authenticate with at the proxy server.
724 ``always``
724 ``always``
725 Optional. Always use the proxy, even for localhost and any entries
725 Optional. Always use the proxy, even for localhost and any entries
726 in ``http_proxy.no``. True or False. Default: False.
726 in ``http_proxy.no``. True or False. Default: False.
727
727
728 ``smtp``
728 ``smtp``
729 """"""""
729 """"""""
730 Configuration for extensions that need to send email messages.
730 Configuration for extensions that need to send email messages.
731
731
732 ``host``
732 ``host``
733 Host name of mail server, e.g. "mail.example.com".
733 Host name of mail server, e.g. "mail.example.com".
734 ``port``
734 ``port``
735 Optional. Port to connect to on mail server. Default: 25.
735 Optional. Port to connect to on mail server. Default: 25.
736 ``tls``
736 ``tls``
737 Optional. Method to enable TLS when connecting to mail server: starttls,
737 Optional. Method to enable TLS when connecting to mail server: starttls,
738 smtps or none. Default: none.
738 smtps or none. Default: none.
739 ``username``
739 ``username``
740 Optional. User name for authenticating with the SMTP server.
740 Optional. User name for authenticating with the SMTP server.
741 Default: none.
741 Default: none.
742 ``password``
742 ``password``
743 Optional. Password for authenticating with the SMTP server. If not
743 Optional. Password for authenticating with the SMTP server. If not
744 specified, interactive sessions will prompt the user for a
744 specified, interactive sessions will prompt the user for a
745 password; non-interactive sessions will fail. Default: none.
745 password; non-interactive sessions will fail. Default: none.
746 ``local_hostname``
746 ``local_hostname``
747 Optional. It's the hostname that the sender can use to identify
747 Optional. It's the hostname that the sender can use to identify
748 itself to the MTA.
748 itself to the MTA.
749
749
750
750
751 ``patch``
751 ``patch``
752 """""""""
752 """""""""
753 Settings used when applying patches, for instance through the 'import'
753 Settings used when applying patches, for instance through the 'import'
754 command or with Mercurial Queues extension.
754 command or with Mercurial Queues extension.
755
755
756 ``eol``
756 ``eol``
757 When set to 'strict' patch content and patched files end of lines
757 When set to 'strict' patch content and patched files end of lines
758 are preserved. When set to ``lf`` or ``crlf``, both files end of
758 are preserved. When set to ``lf`` or ``crlf``, both files end of
759 lines are ignored when patching and the result line endings are
759 lines are ignored when patching and the result line endings are
760 normalized to either LF (Unix) or CRLF (Windows). When set to
760 normalized to either LF (Unix) or CRLF (Windows). When set to
761 ``auto``, end of lines are again ignored while patching but line
761 ``auto``, end of lines are again ignored while patching but line
762 endings in patched files are normalized to their original setting
762 endings in patched files are normalized to their original setting
763 on a per-file basis. If target file does not exist or has no end
763 on a per-file basis. If target file does not exist or has no end
764 of line, patch line endings are preserved.
764 of line, patch line endings are preserved.
765 Default: strict.
765 Default: strict.
766
766
767
767
768 ``paths``
768 ``paths``
769 """""""""
769 """""""""
770 Assigns symbolic names to repositories. The left side is the
770 Assigns symbolic names to repositories. The left side is the
771 symbolic name, and the right gives the directory or URL that is the
771 symbolic name, and the right gives the directory or URL that is the
772 location of the repository. Default paths can be declared by setting
772 location of the repository. Default paths can be declared by setting
773 the following entries.
773 the following entries.
774
774
775 ``default``
775 ``default``
776 Directory or URL to use when pulling if no source is specified.
776 Directory or URL to use when pulling if no source is specified.
777 Default is set to repository from which the current repository was
777 Default is set to repository from which the current repository was
778 cloned.
778 cloned.
779 ``default-push``
779 ``default-push``
780 Optional. Directory or URL to use when pushing if no destination
780 Optional. Directory or URL to use when pushing if no destination
781 is specified.
781 is specified.
782
782
783
783
784 ``profiling``
784 ``profiling``
785 """""""""""""
785 """""""""""""
786 Specifies profiling format and file output. In this section
786 Specifies profiling format and file output. In this section
787 description, 'profiling data' stands for the raw data collected
787 description, 'profiling data' stands for the raw data collected
788 during profiling, while 'profiling report' stands for a statistical
788 during profiling, while 'profiling report' stands for a statistical
789 text report generated from the profiling data. The profiling is done
789 text report generated from the profiling data. The profiling is done
790 using lsprof.
790 using lsprof.
791
791
792 ``format``
792 ``format``
793 Profiling format.
793 Profiling format.
794 Default: text.
794 Default: text.
795
795
796 ``text``
796 ``text``
797 Generate a profiling report. When saving to a file, it should be
797 Generate a profiling report. When saving to a file, it should be
798 noted that only the report is saved, and the profiling data is
798 noted that only the report is saved, and the profiling data is
799 not kept.
799 not kept.
800 ``kcachegrind``
800 ``kcachegrind``
801 Format profiling data for kcachegrind use: when saving to a
801 Format profiling data for kcachegrind use: when saving to a
802 file, the generated file can directly be loaded into
802 file, the generated file can directly be loaded into
803 kcachegrind.
803 kcachegrind.
804 ``output``
804 ``output``
805 File path where profiling data or report should be saved. If the
805 File path where profiling data or report should be saved. If the
806 file exists, it is replaced. Default: None, data is printed on
806 file exists, it is replaced. Default: None, data is printed on
807 stderr
807 stderr
808
808
809 ``server``
809 ``server``
810 """"""""""
810 """"""""""
811 Controls generic server settings.
811 Controls generic server settings.
812
812
813 ``uncompressed``
813 ``uncompressed``
814 Whether to allow clients to clone a repository using the
814 Whether to allow clients to clone a repository using the
815 uncompressed streaming protocol. This transfers about 40% more
815 uncompressed streaming protocol. This transfers about 40% more
816 data than a regular clone, but uses less memory and CPU on both
816 data than a regular clone, but uses less memory and CPU on both
817 server and client. Over a LAN (100 Mbps or better) or a very fast
817 server and client. Over a LAN (100 Mbps or better) or a very fast
818 WAN, an uncompressed streaming clone is a lot faster (~10x) than a
818 WAN, an uncompressed streaming clone is a lot faster (~10x) than a
819 regular clone. Over most WAN connections (anything slower than
819 regular clone. Over most WAN connections (anything slower than
820 about 6 Mbps), uncompressed streaming is slower, because of the
820 about 6 Mbps), uncompressed streaming is slower, because of the
821 extra data transfer overhead. This mode will also temporarily hold
821 extra data transfer overhead. This mode will also temporarily hold
822 the write lock while determining what data to transfer.
822 the write lock while determining what data to transfer.
823 Default is True.
823 Default is True.
824
824
825 ``validate``
825 ``validate``
826 Whether to validate the completeness of pushed changesets by
826 Whether to validate the completeness of pushed changesets by
827 checking that all new file revisions specified in manifests are
827 checking that all new file revisions specified in manifests are
828 present. Default is False.
828 present. Default is False.
829
829
830 ``subpaths``
830 ``subpaths``
831 """"""""""""
831 """"""""""""
832 Defines subrepositories source locations rewriting rules of the form::
832 Defines subrepositories source locations rewriting rules of the form::
833
833
834 <pattern> = <replacement>
834 <pattern> = <replacement>
835
835
836 Where ``pattern`` is a regular expression matching the source and
836 Where ``pattern`` is a regular expression matching the source and
837 ``replacement`` is the replacement string used to rewrite it. Groups
837 ``replacement`` is the replacement string used to rewrite it. Groups
838 can be matched in ``pattern`` and referenced in ``replacements``. For
838 can be matched in ``pattern`` and referenced in ``replacements``. For
839 instance::
839 instance::
840
840
841 http://server/(.*)-hg/ = http://hg.server/\1/
841 http://server/(.*)-hg/ = http://hg.server/\1/
842
842
843 rewrites ``http://server/foo-hg/`` into ``http://hg.server/foo/``.
843 rewrites ``http://server/foo-hg/`` into ``http://hg.server/foo/``.
844
844
845 All patterns are applied in definition order.
845 All patterns are applied in definition order.
846
846
847 ``trusted``
847 ``trusted``
848 """""""""""
848 """""""""""
849
849
850 Mercurial will not use the settings in the
850 Mercurial will not use the settings in the
851 ``.hg/hgrc`` file from a repository if it doesn't belong to a trusted
851 ``.hg/hgrc`` file from a repository if it doesn't belong to a trusted
852 user or to a trusted group, as various hgrc features allow arbitrary
852 user or to a trusted group, as various hgrc features allow arbitrary
853 commands to be run. This issue is often encountered when configuring
853 commands to be run. This issue is often encountered when configuring
854 hooks or extensions for shared repositories or servers. However,
854 hooks or extensions for shared repositories or servers. However,
855 the web interface will use some safe settings from the ``[web]``
855 the web interface will use some safe settings from the ``[web]``
856 section.
856 section.
857
857
858 This section specifies what users and groups are trusted. The
858 This section specifies what users and groups are trusted. The
859 current user is always trusted. To trust everybody, list a user or a
859 current user is always trusted. To trust everybody, list a user or a
860 group with name ``*``. These settings must be placed in an
860 group with name ``*``. These settings must be placed in an
861 *already-trusted file* to take effect, such as ``$HOME/.hgrc`` of the
861 *already-trusted file* to take effect, such as ``$HOME/.hgrc`` of the
862 user or service running Mercurial.
862 user or service running Mercurial.
863
863
864 ``users``
864 ``users``
865 Comma-separated list of trusted users.
865 Comma-separated list of trusted users.
866 ``groups``
866 ``groups``
867 Comma-separated list of trusted groups.
867 Comma-separated list of trusted groups.
868
868
869
869
870 ``ui``
870 ``ui``
871 """"""
871 """"""
872
872
873 User interface controls.
873 User interface controls.
874
874
875 ``archivemeta``
875 ``archivemeta``
876 Whether to include the .hg_archival.txt file containing meta data
876 Whether to include the .hg_archival.txt file containing meta data
877 (hashes for the repository base and for tip) in archives created
877 (hashes for the repository base and for tip) in archives created
878 by the :hg:`archive` command or downloaded via hgweb.
878 by the :hg:`archive` command or downloaded via hgweb.
879 Default is True.
879 Default is True.
880 ``askusername``
880 ``askusername``
881 Whether to prompt for a username when committing. If True, and
881 Whether to prompt for a username when committing. If True, and
882 neither ``$HGUSER`` nor ``$EMAIL`` has been specified, then the user will
882 neither ``$HGUSER`` nor ``$EMAIL`` has been specified, then the user will
883 be prompted to enter a username. If no username is entered, the
883 be prompted to enter a username. If no username is entered, the
884 default ``USER@HOST`` is used instead.
884 default ``USER@HOST`` is used instead.
885 Default is False.
885 Default is False.
886 ``commitsubrepos``
886 ``commitsubrepos``
887 Whether to commit modified subrepositories when committing the
887 Whether to commit modified subrepositories when committing the
888 parent repository. If False and one subrepository has uncommitted
888 parent repository. If False and one subrepository has uncommitted
889 changes, abort the commit.
889 changes, abort the commit.
890 Default is True.
890 Default is True.
891 ``debug``
891 ``debug``
892 Print debugging information. True or False. Default is False.
892 Print debugging information. True or False. Default is False.
893 ``editor``
893 ``editor``
894 The editor to use during a commit. Default is ``$EDITOR`` or ``vi``.
894 The editor to use during a commit. Default is ``$EDITOR`` or ``vi``.
895 ``fallbackencoding``
895 ``fallbackencoding``
896 Encoding to try if it's not possible to decode the changelog using
896 Encoding to try if it's not possible to decode the changelog using
897 UTF-8. Default is ISO-8859-1.
897 UTF-8. Default is ISO-8859-1.
898 ``ignore``
898 ``ignore``
899 A file to read per-user ignore patterns from. This file should be
899 A file to read per-user ignore patterns from. This file should be
900 in the same format as a repository-wide .hgignore file. This
900 in the same format as a repository-wide .hgignore file. This
901 option supports hook syntax, so if you want to specify multiple
901 option supports hook syntax, so if you want to specify multiple
902 ignore files, you can do so by setting something like
902 ignore files, you can do so by setting something like
903 ``ignore.other = ~/.hgignore2``. For details of the ignore file
903 ``ignore.other = ~/.hgignore2``. For details of the ignore file
904 format, see the |hgignore(5)|_ man page.
904 format, see the |hgignore(5)|_ man page.
905 ``interactive``
905 ``interactive``
906 Allow to prompt the user. True or False. Default is True.
906 Allow to prompt the user. True or False. Default is True.
907 ``logtemplate``
907 ``logtemplate``
908 Template string for commands that print changesets.
908 Template string for commands that print changesets.
909 ``merge``
909 ``merge``
910 The conflict resolution program to use during a manual merge.
910 The conflict resolution program to use during a manual merge.
911 For more information on merge tools see :hg:`help merge-tools`.
911 For more information on merge tools see :hg:`help merge-tools`.
912 For configuring merge tools see the merge-tools_ section.
912 For configuring merge tools see the merge-tools_ section.
913 ``portablefilenames``
913 ``portablefilenames``
914 Check for portable filenames. Can be ``warn``, ``ignore`` or ``abort``.
914 Check for portable filenames. Can be ``warn``, ``ignore`` or ``abort``.
915 Default is ``warn``.
915 Default is ``warn``.
916 If set to ``warn`` (or ``true``), a warning message is printed on POSIX
916 If set to ``warn`` (or ``true``), a warning message is printed on POSIX
917 platforms, if a file with a non-portable filename is added (e.g. a file
917 platforms, if a file with a non-portable filename is added (e.g. a file
918 with a name that can't be created on Windows because it contains reserved
918 with a name that can't be created on Windows because it contains reserved
919 parts like ``AUX`` or reserved characters like ``:``).
919 parts like ``AUX`` or reserved characters like ``:``).
920 If set to ``ignore`` (or ``false``), no warning is printed.
920 If set to ``ignore`` (or ``false``), no warning is printed.
921 If set to ``abort``, the command is aborted.
921 If set to ``abort``, the command is aborted.
922 On Windows, this configuration option is ignored and the command aborted.
922 On Windows, this configuration option is ignored and the command aborted.
923 ``quiet``
923 ``quiet``
924 Reduce the amount of output printed. True or False. Default is False.
924 Reduce the amount of output printed. True or False. Default is False.
925 ``remotecmd``
925 ``remotecmd``
926 remote command to use for clone/push/pull operations. Default is ``hg``.
926 remote command to use for clone/push/pull operations. Default is ``hg``.
927 ``report_untrusted``
927 ``report_untrusted``
928 Warn if a ``.hg/hgrc`` file is ignored due to not being owned by a
928 Warn if a ``.hg/hgrc`` file is ignored due to not being owned by a
929 trusted user or group. True or False. Default is True.
929 trusted user or group. True or False. Default is True.
930 ``slash``
930 ``slash``
931 Display paths using a slash (``/``) as the path separator. This
931 Display paths using a slash (``/``) as the path separator. This
932 only makes a difference on systems where the default path
932 only makes a difference on systems where the default path
933 separator is not the slash character (e.g. Windows uses the
933 separator is not the slash character (e.g. Windows uses the
934 backslash character (``\``)).
934 backslash character (``\``)).
935 Default is False.
935 Default is False.
936 ``ssh``
936 ``ssh``
937 command to use for SSH connections. Default is ``ssh``.
937 command to use for SSH connections. Default is ``ssh``.
938 ``strict``
938 ``strict``
939 Require exact command names, instead of allowing unambiguous
939 Require exact command names, instead of allowing unambiguous
940 abbreviations. True or False. Default is False.
940 abbreviations. True or False. Default is False.
941 ``style``
941 ``style``
942 Name of style to use for command output.
942 Name of style to use for command output.
943 ``timeout``
943 ``timeout``
944 The timeout used when a lock is held (in seconds), a negative value
944 The timeout used when a lock is held (in seconds), a negative value
945 means no timeout. Default is 600.
945 means no timeout. Default is 600.
946 ``traceback``
946 ``traceback``
947 Mercurial always prints a traceback when an unknown exception
947 Mercurial always prints a traceback when an unknown exception
948 occurs. Setting this to True will make Mercurial print a traceback
948 occurs. Setting this to True will make Mercurial print a traceback
949 on all exceptions, even those recognized by Mercurial (such as
949 on all exceptions, even those recognized by Mercurial (such as
950 IOError or MemoryError). Default is False.
950 IOError or MemoryError). Default is False.
951 ``username``
951 ``username``
952 The committer of a changeset created when running "commit".
952 The committer of a changeset created when running "commit".
953 Typically a person's name and email address, e.g. ``Fred Widget
953 Typically a person's name and email address, e.g. ``Fred Widget
954 <fred@example.com>``. Default is ``$EMAIL`` or ``username@hostname``. If
954 <fred@example.com>``. Default is ``$EMAIL`` or ``username@hostname``. If
955 the username in hgrc is empty, it has to be specified manually or
955 the username in hgrc is empty, it has to be specified manually or
956 in a different hgrc file (e.g. ``$HOME/.hgrc``, if the admin set
956 in a different hgrc file (e.g. ``$HOME/.hgrc``, if the admin set
957 ``username =`` in the system hgrc). Environment variables in the
957 ``username =`` in the system hgrc). Environment variables in the
958 username are expanded.
958 username are expanded.
959 ``verbose``
959 ``verbose``
960 Increase the amount of output printed. True or False. Default is False.
960 Increase the amount of output printed. True or False. Default is False.
961
961
962
962
963 ``web``
963 ``web``
964 """""""
964 """""""
965
965
966 Web interface configuration. The settings in this section apply to
966 Web interface configuration. The settings in this section apply to
967 both the builtin webserver (started by :hg:`serve`) and the script you
967 both the builtin webserver (started by :hg:`serve`) and the script you
968 run through a webserver (``hgweb.cgi`` and the derivatives for FastCGI
968 run through a webserver (``hgweb.cgi`` and the derivatives for FastCGI
969 and WSGI).
969 and WSGI).
970
970
971 The Mercurial webserver does no authentication (it does not prompt for
971 The Mercurial webserver does no authentication (it does not prompt for
972 usernames and passwords to validate *who* users are), but it does do
972 usernames and passwords to validate *who* users are), but it does do
973 authorization (it grants or denies access for *authenticated users*
973 authorization (it grants or denies access for *authenticated users*
974 based on settings in this section). You must either configure your
974 based on settings in this section). You must either configure your
975 webserver to do authentication for you, or disable the authorization
975 webserver to do authentication for you, or disable the authorization
976 checks.
976 checks.
977
977
978 For a quick setup in a trusted environment, e.g., a private LAN, where
978 For a quick setup in a trusted environment, e.g., a private LAN, where
979 you want it to accept pushes from anybody, you can use the following
979 you want it to accept pushes from anybody, you can use the following
980 command line::
980 command line::
981
981
982 $ hg --config web.allow_push=* --config web.push_ssl=False serve
982 $ hg --config web.allow_push=* --config web.push_ssl=False serve
983
983
984 Note that this will allow anybody to push anything to the server and
984 Note that this will allow anybody to push anything to the server and
985 that this should not be used for public servers.
985 that this should not be used for public servers.
986
986
987 The full set of options is:
987 The full set of options is:
988
988
989 ``accesslog``
989 ``accesslog``
990 Where to output the access log. Default is stdout.
990 Where to output the access log. Default is stdout.
991 ``address``
991 ``address``
992 Interface address to bind to. Default is all.
992 Interface address to bind to. Default is all.
993 ``allow_archive``
993 ``allow_archive``
994 List of archive format (bz2, gz, zip) allowed for downloading.
994 List of archive format (bz2, gz, zip) allowed for downloading.
995 Default is empty.
995 Default is empty.
996 ``allowbz2``
996 ``allowbz2``
997 (DEPRECATED) Whether to allow .tar.bz2 downloading of repository
997 (DEPRECATED) Whether to allow .tar.bz2 downloading of repository
998 revisions.
998 revisions.
999 Default is False.
999 Default is False.
1000 ``allowgz``
1000 ``allowgz``
1001 (DEPRECATED) Whether to allow .tar.gz downloading of repository
1001 (DEPRECATED) Whether to allow .tar.gz downloading of repository
1002 revisions.
1002 revisions.
1003 Default is False.
1003 Default is False.
1004 ``allowpull``
1004 ``allowpull``
1005 Whether to allow pulling from the repository. Default is True.
1005 Whether to allow pulling from the repository. Default is True.
1006 ``allow_push``
1006 ``allow_push``
1007 Whether to allow pushing to the repository. If empty or not set,
1007 Whether to allow pushing to the repository. If empty or not set,
1008 push is not allowed. If the special value ``*``, any remote user can
1008 push is not allowed. If the special value ``*``, any remote user can
1009 push, including unauthenticated users. Otherwise, the remote user
1009 push, including unauthenticated users. Otherwise, the remote user
1010 must have been authenticated, and the authenticated user name must
1010 must have been authenticated, and the authenticated user name must
1011 be present in this list. The contents of the allow_push list are
1011 be present in this list. The contents of the allow_push list are
1012 examined after the deny_push list.
1012 examined after the deny_push list.
1013 ``allow_read``
1013 ``allow_read``
1014 If the user has not already been denied repository access due to
1014 If the user has not already been denied repository access due to
1015 the contents of deny_read, this list determines whether to grant
1015 the contents of deny_read, this list determines whether to grant
1016 repository access to the user. If this list is not empty, and the
1016 repository access to the user. If this list is not empty, and the
1017 user is unauthenticated or not present in the list, then access is
1017 user is unauthenticated or not present in the list, then access is
1018 denied for the user. If the list is empty or not set, then access
1018 denied for the user. If the list is empty or not set, then access
1019 is permitted to all users by default. Setting allow_read to the
1019 is permitted to all users by default. Setting allow_read to the
1020 special value ``*`` is equivalent to it not being set (i.e. access
1020 special value ``*`` is equivalent to it not being set (i.e. access
1021 is permitted to all users). The contents of the allow_read list are
1021 is permitted to all users). The contents of the allow_read list are
1022 examined after the deny_read list.
1022 examined after the deny_read list.
1023 ``allowzip``
1023 ``allowzip``
1024 (DEPRECATED) Whether to allow .zip downloading of repository
1024 (DEPRECATED) Whether to allow .zip downloading of repository
1025 revisions. Default is False. This feature creates temporary files.
1025 revisions. Default is False. This feature creates temporary files.
1026 ``baseurl``
1026 ``baseurl``
1027 Base URL to use when publishing URLs in other locations, so
1027 Base URL to use when publishing URLs in other locations, so
1028 third-party tools like email notification hooks can construct
1028 third-party tools like email notification hooks can construct
1029 URLs. Example: ``http://hgserver/repos/``.
1029 URLs. Example: ``http://hgserver/repos/``.
1030 ``cacerts``
1030 ``cacerts``
1031 Path to file containing a list of PEM encoded certificate
1031 Path to file containing a list of PEM encoded certificate
1032 authority certificates. Environment variables and ``~user``
1032 authority certificates. Environment variables and ``~user``
1033 constructs are expanded in the filename. If specified on the
1033 constructs are expanded in the filename. If specified on the
1034 client, then it will verify the identity of remote HTTPS servers
1034 client, then it will verify the identity of remote HTTPS servers
1035 with these certificates. The form must be as follows::
1035 with these certificates. The form must be as follows::
1036
1036
1037 -----BEGIN CERTIFICATE-----
1037 -----BEGIN CERTIFICATE-----
1038 ... (certificate in base64 PEM encoding) ...
1038 ... (certificate in base64 PEM encoding) ...
1039 -----END CERTIFICATE-----
1039 -----END CERTIFICATE-----
1040 -----BEGIN CERTIFICATE-----
1040 -----BEGIN CERTIFICATE-----
1041 ... (certificate in base64 PEM encoding) ...
1041 ... (certificate in base64 PEM encoding) ...
1042 -----END CERTIFICATE-----
1042 -----END CERTIFICATE-----
1043
1043
1044 This feature is only supported when using Python 2.6 or later. If you wish
1044 This feature is only supported when using Python 2.6 or later. If you wish
1045 to use it with earlier versions of Python, install the backported
1045 to use it with earlier versions of Python, install the backported
1046 version of the ssl library that is available from
1046 version of the ssl library that is available from
1047 ``http://pypi.python.org``.
1047 ``http://pypi.python.org``.
1048
1048
1049 You can use OpenSSL's CA certificate file if your platform has one.
1049 You can use OpenSSL's CA certificate file if your platform has one.
1050 On most Linux systems this will be ``/etc/ssl/certs/ca-certificates.crt``.
1050 On most Linux systems this will be ``/etc/ssl/certs/ca-certificates.crt``.
1051 Otherwise you will have to generate this file manually.
1051 Otherwise you will have to generate this file manually.
1052
1052
1053 To disable SSL verification temporarily, specify ``--insecure`` from
1053 To disable SSL verification temporarily, specify ``--insecure`` from
1054 command line.
1054 command line.
1055 ``contact``
1055 ``contact``
1056 Name or email address of the person in charge of the repository.
1056 Name or email address of the person in charge of the repository.
1057 Defaults to ui.username or ``$EMAIL`` or "unknown" if unset or empty.
1057 Defaults to ui.username or ``$EMAIL`` or "unknown" if unset or empty.
1058 ``deny_push``
1058 ``deny_push``
1059 Whether to deny pushing to the repository. If empty or not set,
1059 Whether to deny pushing to the repository. If empty or not set,
1060 push is not denied. If the special value ``*``, all remote users are
1060 push is not denied. If the special value ``*``, all remote users are
1061 denied push. Otherwise, unauthenticated users are all denied, and
1061 denied push. Otherwise, unauthenticated users are all denied, and
1062 any authenticated user name present in this list is also denied. The
1062 any authenticated user name present in this list is also denied. The
1063 contents of the deny_push list are examined before the allow_push list.
1063 contents of the deny_push list are examined before the allow_push list.
1064 ``deny_read``
1064 ``deny_read``
1065 Whether to deny reading/viewing of the repository. If this list is
1065 Whether to deny reading/viewing of the repository. If this list is
1066 not empty, unauthenticated users are all denied, and any
1066 not empty, unauthenticated users are all denied, and any
1067 authenticated user name present in this list is also denied access to
1067 authenticated user name present in this list is also denied access to
1068 the repository. If set to the special value ``*``, all remote users
1068 the repository. If set to the special value ``*``, all remote users
1069 are denied access (rarely needed ;). If deny_read is empty or not set,
1069 are denied access (rarely needed ;). If deny_read is empty or not set,
1070 the determination of repository access depends on the presence and
1070 the determination of repository access depends on the presence and
1071 content of the allow_read list (see description). If both
1071 content of the allow_read list (see description). If both
1072 deny_read and allow_read are empty or not set, then access is
1072 deny_read and allow_read are empty or not set, then access is
1073 permitted to all users by default. If the repository is being
1073 permitted to all users by default. If the repository is being
1074 served via hgwebdir, denied users will not be able to see it in
1074 served via hgwebdir, denied users will not be able to see it in
1075 the list of repositories. The contents of the deny_read list have
1075 the list of repositories. The contents of the deny_read list have
1076 priority over (are examined before) the contents of the allow_read
1076 priority over (are examined before) the contents of the allow_read
1077 list.
1077 list.
1078 ``descend``
1078 ``descend``
1079 hgwebdir indexes will not descend into subdirectories. Only repositories
1079 hgwebdir indexes will not descend into subdirectories. Only repositories
1080 directly in the current path will be shown (other repositories are still
1080 directly in the current path will be shown (other repositories are still
1081 available from the index corresponding to their containing path).
1081 available from the index corresponding to their containing path).
1082 ``description``
1082 ``description``
1083 Textual description of the repository's purpose or contents.
1083 Textual description of the repository's purpose or contents.
1084 Default is "unknown".
1084 Default is "unknown".
1085 ``encoding``
1085 ``encoding``
1086 Character encoding name. Default is the current locale charset.
1086 Character encoding name. Default is the current locale charset.
1087 Example: "UTF-8"
1087 Example: "UTF-8"
1088 ``errorlog``
1088 ``errorlog``
1089 Where to output the error log. Default is stderr.
1089 Where to output the error log. Default is stderr.
1090 ``hidden``
1090 ``hidden``
1091 Whether to hide the repository in the hgwebdir index.
1091 Whether to hide the repository in the hgwebdir index.
1092 Default is False.
1092 Default is False.
1093 ``ipv6``
1093 ``ipv6``
1094 Whether to use IPv6. Default is False.
1094 Whether to use IPv6. Default is False.
1095 ``logourl``
1096 Base URL to use for logos. If unset, ``http://mercurial.selenic.com/``
1097 will be used.
1095 ``name``
1098 ``name``
1096 Repository name to use in the web interface. Default is current
1099 Repository name to use in the web interface. Default is current
1097 working directory.
1100 working directory.
1098 ``maxchanges``
1101 ``maxchanges``
1099 Maximum number of changes to list on the changelog. Default is 10.
1102 Maximum number of changes to list on the changelog. Default is 10.
1100 ``maxfiles``
1103 ``maxfiles``
1101 Maximum number of files to list per changeset. Default is 10.
1104 Maximum number of files to list per changeset. Default is 10.
1102 ``port``
1105 ``port``
1103 Port to listen on. Default is 8000.
1106 Port to listen on. Default is 8000.
1104 ``prefix``
1107 ``prefix``
1105 Prefix path to serve from. Default is '' (server root).
1108 Prefix path to serve from. Default is '' (server root).
1106 ``push_ssl``
1109 ``push_ssl``
1107 Whether to require that inbound pushes be transported over SSL to
1110 Whether to require that inbound pushes be transported over SSL to
1108 prevent password sniffing. Default is True.
1111 prevent password sniffing. Default is True.
1109 ``staticurl``
1112 ``staticurl``
1110 Base URL to use for static files. If unset, static files (e.g. the
1113 Base URL to use for static files. If unset, static files (e.g. the
1111 hgicon.png favicon) will be served by the CGI script itself. Use
1114 hgicon.png favicon) will be served by the CGI script itself. Use
1112 this setting to serve them directly with the HTTP server.
1115 this setting to serve them directly with the HTTP server.
1113 Example: ``http://hgserver/static/``.
1116 Example: ``http://hgserver/static/``.
1114 ``stripes``
1117 ``stripes``
1115 How many lines a "zebra stripe" should span in multiline output.
1118 How many lines a "zebra stripe" should span in multiline output.
1116 Default is 1; set to 0 to disable.
1119 Default is 1; set to 0 to disable.
1117 ``style``
1120 ``style``
1118 Which template map style to use.
1121 Which template map style to use.
1119 ``templates``
1122 ``templates``
1120 Where to find the HTML templates. Default is install path.
1123 Where to find the HTML templates. Default is install path.
1121
1124
1122
1125
1123 Author
1126 Author
1124 ------
1127 ------
1125 Bryan O'Sullivan <bos@serpentine.com>.
1128 Bryan O'Sullivan <bos@serpentine.com>.
1126
1129
1127 Mercurial was written by Matt Mackall <mpm@selenic.com>.
1130 Mercurial was written by Matt Mackall <mpm@selenic.com>.
1128
1131
1129 See Also
1132 See Also
1130 --------
1133 --------
1131 |hg(1)|_, |hgignore(5)|_
1134 |hg(1)|_, |hgignore(5)|_
1132
1135
1133 Copying
1136 Copying
1134 -------
1137 -------
1135 This manual page is copyright 2005 Bryan O'Sullivan.
1138 This manual page is copyright 2005 Bryan O'Sullivan.
1136 Mercurial is copyright 2005-2010 Matt Mackall.
1139 Mercurial is copyright 2005-2010 Matt Mackall.
1137 Free use of this software is granted under the terms of the GNU General
1140 Free use of this software is granted under the terms of the GNU General
1138 Public License version 2 or any later version.
1141 Public License version 2 or any later version.
1139
1142
1140 .. include:: common.txt
1143 .. include:: common.txt
@@ -1,299 +1,301 b''
1 # hgweb/hgweb_mod.py - Web interface for a repository.
1 # hgweb/hgweb_mod.py - Web interface for a repository.
2 #
2 #
3 # Copyright 21 May 2005 - (c) 2005 Jake Edge <jake@edge2.net>
3 # Copyright 21 May 2005 - (c) 2005 Jake Edge <jake@edge2.net>
4 # Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
4 # Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
5 #
5 #
6 # This software may be used and distributed according to the terms of the
6 # This software may be used and distributed according to the terms of the
7 # GNU General Public License version 2 or any later version.
7 # GNU General Public License version 2 or any later version.
8
8
9 import os
9 import os
10 from mercurial import ui, hg, hook, error, encoding, templater
10 from mercurial import ui, hg, hook, error, encoding, templater
11 from common import get_stat, ErrorResponse, permhooks, caching
11 from common import get_stat, ErrorResponse, permhooks, caching
12 from common import HTTP_OK, HTTP_NOT_MODIFIED, HTTP_BAD_REQUEST
12 from common import HTTP_OK, HTTP_NOT_MODIFIED, HTTP_BAD_REQUEST
13 from common import HTTP_NOT_FOUND, HTTP_SERVER_ERROR
13 from common import HTTP_NOT_FOUND, HTTP_SERVER_ERROR
14 from request import wsgirequest
14 from request import wsgirequest
15 import webcommands, protocol, webutil
15 import webcommands, protocol, webutil
16
16
17 perms = {
17 perms = {
18 'changegroup': 'pull',
18 'changegroup': 'pull',
19 'changegroupsubset': 'pull',
19 'changegroupsubset': 'pull',
20 'getbundle': 'pull',
20 'getbundle': 'pull',
21 'stream_out': 'pull',
21 'stream_out': 'pull',
22 'listkeys': 'pull',
22 'listkeys': 'pull',
23 'unbundle': 'push',
23 'unbundle': 'push',
24 'pushkey': 'push',
24 'pushkey': 'push',
25 }
25 }
26
26
27 class hgweb(object):
27 class hgweb(object):
28 def __init__(self, repo, name=None, baseui=None):
28 def __init__(self, repo, name=None, baseui=None):
29 if isinstance(repo, str):
29 if isinstance(repo, str):
30 if baseui:
30 if baseui:
31 u = baseui.copy()
31 u = baseui.copy()
32 else:
32 else:
33 u = ui.ui()
33 u = ui.ui()
34 self.repo = hg.repository(u, repo)
34 self.repo = hg.repository(u, repo)
35 else:
35 else:
36 self.repo = repo
36 self.repo = repo
37
37
38 self.repo.ui.setconfig('ui', 'report_untrusted', 'off')
38 self.repo.ui.setconfig('ui', 'report_untrusted', 'off')
39 self.repo.ui.setconfig('ui', 'interactive', 'off')
39 self.repo.ui.setconfig('ui', 'interactive', 'off')
40 hook.redirect(True)
40 hook.redirect(True)
41 self.mtime = -1
41 self.mtime = -1
42 self.size = -1
42 self.size = -1
43 self.reponame = name
43 self.reponame = name
44 self.archives = 'zip', 'gz', 'bz2'
44 self.archives = 'zip', 'gz', 'bz2'
45 self.stripecount = 1
45 self.stripecount = 1
46 # a repo owner may set web.templates in .hg/hgrc to get any file
46 # a repo owner may set web.templates in .hg/hgrc to get any file
47 # readable by the user running the CGI script
47 # readable by the user running the CGI script
48 self.templatepath = self.config('web', 'templates')
48 self.templatepath = self.config('web', 'templates')
49
49
50 # The CGI scripts are often run by a user different from the repo owner.
50 # The CGI scripts are often run by a user different from the repo owner.
51 # Trust the settings from the .hg/hgrc files by default.
51 # Trust the settings from the .hg/hgrc files by default.
52 def config(self, section, name, default=None, untrusted=True):
52 def config(self, section, name, default=None, untrusted=True):
53 return self.repo.ui.config(section, name, default,
53 return self.repo.ui.config(section, name, default,
54 untrusted=untrusted)
54 untrusted=untrusted)
55
55
56 def configbool(self, section, name, default=False, untrusted=True):
56 def configbool(self, section, name, default=False, untrusted=True):
57 return self.repo.ui.configbool(section, name, default,
57 return self.repo.ui.configbool(section, name, default,
58 untrusted=untrusted)
58 untrusted=untrusted)
59
59
60 def configlist(self, section, name, default=None, untrusted=True):
60 def configlist(self, section, name, default=None, untrusted=True):
61 return self.repo.ui.configlist(section, name, default,
61 return self.repo.ui.configlist(section, name, default,
62 untrusted=untrusted)
62 untrusted=untrusted)
63
63
64 def refresh(self, request=None):
64 def refresh(self, request=None):
65 if request:
65 if request:
66 self.repo.ui.environ = request.env
66 self.repo.ui.environ = request.env
67 st = get_stat(self.repo.spath)
67 st = get_stat(self.repo.spath)
68 # compare changelog size in addition to mtime to catch
68 # compare changelog size in addition to mtime to catch
69 # rollbacks made less than a second ago
69 # rollbacks made less than a second ago
70 if st.st_mtime != self.mtime or st.st_size != self.size:
70 if st.st_mtime != self.mtime or st.st_size != self.size:
71 self.mtime = st.st_mtime
71 self.mtime = st.st_mtime
72 self.size = st.st_size
72 self.size = st.st_size
73 self.repo = hg.repository(self.repo.ui, self.repo.root)
73 self.repo = hg.repository(self.repo.ui, self.repo.root)
74 self.maxchanges = int(self.config("web", "maxchanges", 10))
74 self.maxchanges = int(self.config("web", "maxchanges", 10))
75 self.stripecount = int(self.config("web", "stripes", 1))
75 self.stripecount = int(self.config("web", "stripes", 1))
76 self.maxshortchanges = int(self.config("web", "maxshortchanges", 60))
76 self.maxshortchanges = int(self.config("web", "maxshortchanges", 60))
77 self.maxfiles = int(self.config("web", "maxfiles", 10))
77 self.maxfiles = int(self.config("web", "maxfiles", 10))
78 self.allowpull = self.configbool("web", "allowpull", True)
78 self.allowpull = self.configbool("web", "allowpull", True)
79 encoding.encoding = self.config("web", "encoding",
79 encoding.encoding = self.config("web", "encoding",
80 encoding.encoding)
80 encoding.encoding)
81
81
82 def run(self):
82 def run(self):
83 if not os.environ.get('GATEWAY_INTERFACE', '').startswith("CGI/1."):
83 if not os.environ.get('GATEWAY_INTERFACE', '').startswith("CGI/1."):
84 raise RuntimeError("This function is only intended to be "
84 raise RuntimeError("This function is only intended to be "
85 "called while running as a CGI script.")
85 "called while running as a CGI script.")
86 import mercurial.hgweb.wsgicgi as wsgicgi
86 import mercurial.hgweb.wsgicgi as wsgicgi
87 wsgicgi.launch(self)
87 wsgicgi.launch(self)
88
88
89 def __call__(self, env, respond):
89 def __call__(self, env, respond):
90 req = wsgirequest(env, respond)
90 req = wsgirequest(env, respond)
91 return self.run_wsgi(req)
91 return self.run_wsgi(req)
92
92
93 def run_wsgi(self, req):
93 def run_wsgi(self, req):
94
94
95 self.refresh(req)
95 self.refresh(req)
96
96
97 # work with CGI variables to create coherent structure
97 # work with CGI variables to create coherent structure
98 # use SCRIPT_NAME, PATH_INFO and QUERY_STRING as well as our REPO_NAME
98 # use SCRIPT_NAME, PATH_INFO and QUERY_STRING as well as our REPO_NAME
99
99
100 req.url = req.env['SCRIPT_NAME']
100 req.url = req.env['SCRIPT_NAME']
101 if not req.url.endswith('/'):
101 if not req.url.endswith('/'):
102 req.url += '/'
102 req.url += '/'
103 if 'REPO_NAME' in req.env:
103 if 'REPO_NAME' in req.env:
104 req.url += req.env['REPO_NAME'] + '/'
104 req.url += req.env['REPO_NAME'] + '/'
105
105
106 if 'PATH_INFO' in req.env:
106 if 'PATH_INFO' in req.env:
107 parts = req.env['PATH_INFO'].strip('/').split('/')
107 parts = req.env['PATH_INFO'].strip('/').split('/')
108 repo_parts = req.env.get('REPO_NAME', '').split('/')
108 repo_parts = req.env.get('REPO_NAME', '').split('/')
109 if parts[:len(repo_parts)] == repo_parts:
109 if parts[:len(repo_parts)] == repo_parts:
110 parts = parts[len(repo_parts):]
110 parts = parts[len(repo_parts):]
111 query = '/'.join(parts)
111 query = '/'.join(parts)
112 else:
112 else:
113 query = req.env['QUERY_STRING'].split('&', 1)[0]
113 query = req.env['QUERY_STRING'].split('&', 1)[0]
114 query = query.split(';', 1)[0]
114 query = query.split(';', 1)[0]
115
115
116 # process this if it's a protocol request
116 # process this if it's a protocol request
117 # protocol bits don't need to create any URLs
117 # protocol bits don't need to create any URLs
118 # and the clients always use the old URL structure
118 # and the clients always use the old URL structure
119
119
120 cmd = req.form.get('cmd', [''])[0]
120 cmd = req.form.get('cmd', [''])[0]
121 if protocol.iscmd(cmd):
121 if protocol.iscmd(cmd):
122 try:
122 try:
123 if query:
123 if query:
124 raise ErrorResponse(HTTP_NOT_FOUND)
124 raise ErrorResponse(HTTP_NOT_FOUND)
125 if cmd in perms:
125 if cmd in perms:
126 self.check_perm(req, perms[cmd])
126 self.check_perm(req, perms[cmd])
127 return protocol.call(self.repo, req, cmd)
127 return protocol.call(self.repo, req, cmd)
128 except ErrorResponse, inst:
128 except ErrorResponse, inst:
129 # A client that sends unbundle without 100-continue will
129 # A client that sends unbundle without 100-continue will
130 # break if we respond early.
130 # break if we respond early.
131 if (cmd == 'unbundle' and
131 if (cmd == 'unbundle' and
132 req.env.get('HTTP_EXPECT',
132 req.env.get('HTTP_EXPECT',
133 '').lower() != '100-continue'):
133 '').lower() != '100-continue'):
134 req.drain()
134 req.drain()
135 req.respond(inst, protocol.HGTYPE)
135 req.respond(inst, protocol.HGTYPE)
136 return '0\n%s\n' % inst.message
136 return '0\n%s\n' % inst.message
137
137
138 # translate user-visible url structure to internal structure
138 # translate user-visible url structure to internal structure
139
139
140 args = query.split('/', 2)
140 args = query.split('/', 2)
141 if 'cmd' not in req.form and args and args[0]:
141 if 'cmd' not in req.form and args and args[0]:
142
142
143 cmd = args.pop(0)
143 cmd = args.pop(0)
144 style = cmd.rfind('-')
144 style = cmd.rfind('-')
145 if style != -1:
145 if style != -1:
146 req.form['style'] = [cmd[:style]]
146 req.form['style'] = [cmd[:style]]
147 cmd = cmd[style + 1:]
147 cmd = cmd[style + 1:]
148
148
149 # avoid accepting e.g. style parameter as command
149 # avoid accepting e.g. style parameter as command
150 if hasattr(webcommands, cmd):
150 if hasattr(webcommands, cmd):
151 req.form['cmd'] = [cmd]
151 req.form['cmd'] = [cmd]
152 else:
152 else:
153 cmd = ''
153 cmd = ''
154
154
155 if cmd == 'static':
155 if cmd == 'static':
156 req.form['file'] = ['/'.join(args)]
156 req.form['file'] = ['/'.join(args)]
157 else:
157 else:
158 if args and args[0]:
158 if args and args[0]:
159 node = args.pop(0)
159 node = args.pop(0)
160 req.form['node'] = [node]
160 req.form['node'] = [node]
161 if args:
161 if args:
162 req.form['file'] = args
162 req.form['file'] = args
163
163
164 ua = req.env.get('HTTP_USER_AGENT', '')
164 ua = req.env.get('HTTP_USER_AGENT', '')
165 if cmd == 'rev' and 'mercurial' in ua:
165 if cmd == 'rev' and 'mercurial' in ua:
166 req.form['style'] = ['raw']
166 req.form['style'] = ['raw']
167
167
168 if cmd == 'archive':
168 if cmd == 'archive':
169 fn = req.form['node'][0]
169 fn = req.form['node'][0]
170 for type_, spec in self.archive_specs.iteritems():
170 for type_, spec in self.archive_specs.iteritems():
171 ext = spec[2]
171 ext = spec[2]
172 if fn.endswith(ext):
172 if fn.endswith(ext):
173 req.form['node'] = [fn[:-len(ext)]]
173 req.form['node'] = [fn[:-len(ext)]]
174 req.form['type'] = [type_]
174 req.form['type'] = [type_]
175
175
176 # process the web interface request
176 # process the web interface request
177
177
178 try:
178 try:
179 tmpl = self.templater(req)
179 tmpl = self.templater(req)
180 ctype = tmpl('mimetype', encoding=encoding.encoding)
180 ctype = tmpl('mimetype', encoding=encoding.encoding)
181 ctype = templater.stringify(ctype)
181 ctype = templater.stringify(ctype)
182
182
183 # check read permissions non-static content
183 # check read permissions non-static content
184 if cmd != 'static':
184 if cmd != 'static':
185 self.check_perm(req, None)
185 self.check_perm(req, None)
186
186
187 if cmd == '':
187 if cmd == '':
188 req.form['cmd'] = [tmpl.cache['default']]
188 req.form['cmd'] = [tmpl.cache['default']]
189 cmd = req.form['cmd'][0]
189 cmd = req.form['cmd'][0]
190
190
191 caching(self, req) # sets ETag header or raises NOT_MODIFIED
191 caching(self, req) # sets ETag header or raises NOT_MODIFIED
192 if cmd not in webcommands.__all__:
192 if cmd not in webcommands.__all__:
193 msg = 'no such method: %s' % cmd
193 msg = 'no such method: %s' % cmd
194 raise ErrorResponse(HTTP_BAD_REQUEST, msg)
194 raise ErrorResponse(HTTP_BAD_REQUEST, msg)
195 elif cmd == 'file' and 'raw' in req.form.get('style', []):
195 elif cmd == 'file' and 'raw' in req.form.get('style', []):
196 self.ctype = ctype
196 self.ctype = ctype
197 content = webcommands.rawfile(self, req, tmpl)
197 content = webcommands.rawfile(self, req, tmpl)
198 else:
198 else:
199 content = getattr(webcommands, cmd)(self, req, tmpl)
199 content = getattr(webcommands, cmd)(self, req, tmpl)
200 req.respond(HTTP_OK, ctype)
200 req.respond(HTTP_OK, ctype)
201
201
202 return content
202 return content
203
203
204 except error.LookupError, err:
204 except error.LookupError, err:
205 req.respond(HTTP_NOT_FOUND, ctype)
205 req.respond(HTTP_NOT_FOUND, ctype)
206 msg = str(err)
206 msg = str(err)
207 if 'manifest' not in msg:
207 if 'manifest' not in msg:
208 msg = 'revision not found: %s' % err.name
208 msg = 'revision not found: %s' % err.name
209 return tmpl('error', error=msg)
209 return tmpl('error', error=msg)
210 except (error.RepoError, error.RevlogError), inst:
210 except (error.RepoError, error.RevlogError), inst:
211 req.respond(HTTP_SERVER_ERROR, ctype)
211 req.respond(HTTP_SERVER_ERROR, ctype)
212 return tmpl('error', error=str(inst))
212 return tmpl('error', error=str(inst))
213 except ErrorResponse, inst:
213 except ErrorResponse, inst:
214 req.respond(inst, ctype)
214 req.respond(inst, ctype)
215 if inst.code == HTTP_NOT_MODIFIED:
215 if inst.code == HTTP_NOT_MODIFIED:
216 # Not allowed to return a body on a 304
216 # Not allowed to return a body on a 304
217 return ['']
217 return ['']
218 return tmpl('error', error=inst.message)
218 return tmpl('error', error=inst.message)
219
219
220 def templater(self, req):
220 def templater(self, req):
221
221
222 # determine scheme, port and server name
222 # determine scheme, port and server name
223 # this is needed to create absolute urls
223 # this is needed to create absolute urls
224
224
225 proto = req.env.get('wsgi.url_scheme')
225 proto = req.env.get('wsgi.url_scheme')
226 if proto == 'https':
226 if proto == 'https':
227 proto = 'https'
227 proto = 'https'
228 default_port = "443"
228 default_port = "443"
229 else:
229 else:
230 proto = 'http'
230 proto = 'http'
231 default_port = "80"
231 default_port = "80"
232
232
233 port = req.env["SERVER_PORT"]
233 port = req.env["SERVER_PORT"]
234 port = port != default_port and (":" + port) or ""
234 port = port != default_port and (":" + port) or ""
235 urlbase = '%s://%s%s' % (proto, req.env['SERVER_NAME'], port)
235 urlbase = '%s://%s%s' % (proto, req.env['SERVER_NAME'], port)
236 logourl = self.config("web", "logourl", "http://mercurial.selenic.com/")
236 staticurl = self.config("web", "staticurl") or req.url + 'static/'
237 staticurl = self.config("web", "staticurl") or req.url + 'static/'
237 if not staticurl.endswith('/'):
238 if not staticurl.endswith('/'):
238 staticurl += '/'
239 staticurl += '/'
239
240
240 # some functions for the templater
241 # some functions for the templater
241
242
242 def header(**map):
243 def header(**map):
243 yield tmpl('header', encoding=encoding.encoding, **map)
244 yield tmpl('header', encoding=encoding.encoding, **map)
244
245
245 def footer(**map):
246 def footer(**map):
246 yield tmpl("footer", **map)
247 yield tmpl("footer", **map)
247
248
248 def motd(**map):
249 def motd(**map):
249 yield self.config("web", "motd", "")
250 yield self.config("web", "motd", "")
250
251
251 # figure out which style to use
252 # figure out which style to use
252
253
253 vars = {}
254 vars = {}
254 styles = (
255 styles = (
255 req.form.get('style', [None])[0],
256 req.form.get('style', [None])[0],
256 self.config('web', 'style'),
257 self.config('web', 'style'),
257 'paper',
258 'paper',
258 )
259 )
259 style, mapfile = templater.stylemap(styles, self.templatepath)
260 style, mapfile = templater.stylemap(styles, self.templatepath)
260 if style == styles[0]:
261 if style == styles[0]:
261 vars['style'] = style
262 vars['style'] = style
262
263
263 start = req.url[-1] == '?' and '&' or '?'
264 start = req.url[-1] == '?' and '&' or '?'
264 sessionvars = webutil.sessionvars(vars, start)
265 sessionvars = webutil.sessionvars(vars, start)
265
266
266 if not self.reponame:
267 if not self.reponame:
267 self.reponame = (self.config("web", "name")
268 self.reponame = (self.config("web", "name")
268 or req.env.get('REPO_NAME')
269 or req.env.get('REPO_NAME')
269 or req.url.strip('/') or self.repo.root)
270 or req.url.strip('/') or self.repo.root)
270
271
271 # create the templater
272 # create the templater
272
273
273 tmpl = templater.templater(mapfile,
274 tmpl = templater.templater(mapfile,
274 defaults={"url": req.url,
275 defaults={"url": req.url,
276 "logourl": logourl,
275 "staticurl": staticurl,
277 "staticurl": staticurl,
276 "urlbase": urlbase,
278 "urlbase": urlbase,
277 "repo": self.reponame,
279 "repo": self.reponame,
278 "header": header,
280 "header": header,
279 "footer": footer,
281 "footer": footer,
280 "motd": motd,
282 "motd": motd,
281 "sessionvars": sessionvars
283 "sessionvars": sessionvars
282 })
284 })
283 return tmpl
285 return tmpl
284
286
285 def archivelist(self, nodeid):
287 def archivelist(self, nodeid):
286 allowed = self.configlist("web", "allow_archive")
288 allowed = self.configlist("web", "allow_archive")
287 for i, spec in self.archive_specs.iteritems():
289 for i, spec in self.archive_specs.iteritems():
288 if i in allowed or self.configbool("web", "allow" + i):
290 if i in allowed or self.configbool("web", "allow" + i):
289 yield {"type" : i, "extension" : spec[2], "node" : nodeid}
291 yield {"type" : i, "extension" : spec[2], "node" : nodeid}
290
292
291 archive_specs = {
293 archive_specs = {
292 'bz2': ('application/x-bzip2', 'tbz2', '.tar.bz2', None),
294 'bz2': ('application/x-bzip2', 'tbz2', '.tar.bz2', None),
293 'gz': ('application/x-gzip', 'tgz', '.tar.gz', None),
295 'gz': ('application/x-gzip', 'tgz', '.tar.gz', None),
294 'zip': ('application/zip', 'zip', '.zip', None),
296 'zip': ('application/zip', 'zip', '.zip', None),
295 }
297 }
296
298
297 def check_perm(self, req, op):
299 def check_perm(self, req, op):
298 for hook in permhooks:
300 for hook in permhooks:
299 hook(self, req, op)
301 hook(self, req, op)
@@ -1,369 +1,371 b''
1 # hgweb/hgwebdir_mod.py - Web interface for a directory of repositories.
1 # hgweb/hgwebdir_mod.py - Web interface for a directory of repositories.
2 #
2 #
3 # Copyright 21 May 2005 - (c) 2005 Jake Edge <jake@edge2.net>
3 # Copyright 21 May 2005 - (c) 2005 Jake Edge <jake@edge2.net>
4 # Copyright 2005, 2006 Matt Mackall <mpm@selenic.com>
4 # Copyright 2005, 2006 Matt Mackall <mpm@selenic.com>
5 #
5 #
6 # This software may be used and distributed according to the terms of the
6 # This software may be used and distributed according to the terms of the
7 # GNU General Public License version 2 or any later version.
7 # GNU General Public License version 2 or any later version.
8
8
9 import os, re, time
9 import os, re, time
10 from mercurial.i18n import _
10 from mercurial.i18n import _
11 from mercurial import ui, hg, util, templater
11 from mercurial import ui, hg, util, templater
12 from mercurial import error, encoding, url
12 from mercurial import error, encoding, url
13 from common import ErrorResponse, get_mtime, staticfile, paritygen, \
13 from common import ErrorResponse, get_mtime, staticfile, paritygen, \
14 get_contact, HTTP_OK, HTTP_NOT_FOUND, HTTP_SERVER_ERROR
14 get_contact, HTTP_OK, HTTP_NOT_FOUND, HTTP_SERVER_ERROR
15 from hgweb_mod import hgweb
15 from hgweb_mod import hgweb
16 from request import wsgirequest
16 from request import wsgirequest
17 import webutil
17 import webutil
18
18
19 def cleannames(items):
19 def cleannames(items):
20 return [(util.pconvert(name).strip('/'), path) for name, path in items]
20 return [(util.pconvert(name).strip('/'), path) for name, path in items]
21
21
22 def findrepos(paths):
22 def findrepos(paths):
23 repos = []
23 repos = []
24 for prefix, root in cleannames(paths):
24 for prefix, root in cleannames(paths):
25 roothead, roottail = os.path.split(root)
25 roothead, roottail = os.path.split(root)
26 # "foo = /bar/*" makes every subrepo of /bar/ to be
26 # "foo = /bar/*" makes every subrepo of /bar/ to be
27 # mounted as foo/subrepo
27 # mounted as foo/subrepo
28 # and "foo = /bar/**" also recurses into the subdirectories,
28 # and "foo = /bar/**" also recurses into the subdirectories,
29 # remember to use it without working dir.
29 # remember to use it without working dir.
30 try:
30 try:
31 recurse = {'*': False, '**': True}[roottail]
31 recurse = {'*': False, '**': True}[roottail]
32 except KeyError:
32 except KeyError:
33 repos.append((prefix, root))
33 repos.append((prefix, root))
34 continue
34 continue
35 roothead = os.path.normpath(os.path.abspath(roothead))
35 roothead = os.path.normpath(os.path.abspath(roothead))
36 paths = util.walkrepos(roothead, followsym=True, recurse=recurse)
36 paths = util.walkrepos(roothead, followsym=True, recurse=recurse)
37 repos.extend(urlrepos(prefix, roothead, paths))
37 repos.extend(urlrepos(prefix, roothead, paths))
38 return repos
38 return repos
39
39
40 def urlrepos(prefix, roothead, paths):
40 def urlrepos(prefix, roothead, paths):
41 """yield url paths and filesystem paths from a list of repo paths
41 """yield url paths and filesystem paths from a list of repo paths
42
42
43 >>> conv = lambda seq: [(v, util.pconvert(p)) for v,p in seq]
43 >>> conv = lambda seq: [(v, util.pconvert(p)) for v,p in seq]
44 >>> conv(urlrepos('hg', '/opt', ['/opt/r', '/opt/r/r', '/opt']))
44 >>> conv(urlrepos('hg', '/opt', ['/opt/r', '/opt/r/r', '/opt']))
45 [('hg/r', '/opt/r'), ('hg/r/r', '/opt/r/r'), ('hg', '/opt')]
45 [('hg/r', '/opt/r'), ('hg/r/r', '/opt/r/r'), ('hg', '/opt')]
46 >>> conv(urlrepos('', '/opt', ['/opt/r', '/opt/r/r', '/opt']))
46 >>> conv(urlrepos('', '/opt', ['/opt/r', '/opt/r/r', '/opt']))
47 [('r', '/opt/r'), ('r/r', '/opt/r/r'), ('', '/opt')]
47 [('r', '/opt/r'), ('r/r', '/opt/r/r'), ('', '/opt')]
48 """
48 """
49 for path in paths:
49 for path in paths:
50 path = os.path.normpath(path)
50 path = os.path.normpath(path)
51 yield (prefix + '/' +
51 yield (prefix + '/' +
52 util.pconvert(path[len(roothead):]).lstrip('/')).strip('/'), path
52 util.pconvert(path[len(roothead):]).lstrip('/')).strip('/'), path
53
53
54 class hgwebdir(object):
54 class hgwebdir(object):
55 refreshinterval = 20
55 refreshinterval = 20
56
56
57 def __init__(self, conf, baseui=None):
57 def __init__(self, conf, baseui=None):
58 self.conf = conf
58 self.conf = conf
59 self.baseui = baseui
59 self.baseui = baseui
60 self.lastrefresh = 0
60 self.lastrefresh = 0
61 self.motd = None
61 self.motd = None
62 self.refresh()
62 self.refresh()
63
63
64 def refresh(self):
64 def refresh(self):
65 if self.lastrefresh + self.refreshinterval > time.time():
65 if self.lastrefresh + self.refreshinterval > time.time():
66 return
66 return
67
67
68 if self.baseui:
68 if self.baseui:
69 u = self.baseui.copy()
69 u = self.baseui.copy()
70 else:
70 else:
71 u = ui.ui()
71 u = ui.ui()
72 u.setconfig('ui', 'report_untrusted', 'off')
72 u.setconfig('ui', 'report_untrusted', 'off')
73 u.setconfig('ui', 'interactive', 'off')
73 u.setconfig('ui', 'interactive', 'off')
74
74
75 if not isinstance(self.conf, (dict, list, tuple)):
75 if not isinstance(self.conf, (dict, list, tuple)):
76 map = {'paths': 'hgweb-paths'}
76 map = {'paths': 'hgweb-paths'}
77 if not os.path.exists(self.conf):
77 if not os.path.exists(self.conf):
78 raise util.Abort(_('config file %s not found!') % self.conf)
78 raise util.Abort(_('config file %s not found!') % self.conf)
79 u.readconfig(self.conf, remap=map, trust=True)
79 u.readconfig(self.conf, remap=map, trust=True)
80 paths = []
80 paths = []
81 for name, ignored in u.configitems('hgweb-paths'):
81 for name, ignored in u.configitems('hgweb-paths'):
82 for path in u.configlist('hgweb-paths', name):
82 for path in u.configlist('hgweb-paths', name):
83 paths.append((name, path))
83 paths.append((name, path))
84 elif isinstance(self.conf, (list, tuple)):
84 elif isinstance(self.conf, (list, tuple)):
85 paths = self.conf
85 paths = self.conf
86 elif isinstance(self.conf, dict):
86 elif isinstance(self.conf, dict):
87 paths = self.conf.items()
87 paths = self.conf.items()
88
88
89 repos = findrepos(paths)
89 repos = findrepos(paths)
90 for prefix, root in u.configitems('collections'):
90 for prefix, root in u.configitems('collections'):
91 prefix = util.pconvert(prefix)
91 prefix = util.pconvert(prefix)
92 for path in util.walkrepos(root, followsym=True):
92 for path in util.walkrepos(root, followsym=True):
93 repo = os.path.normpath(path)
93 repo = os.path.normpath(path)
94 name = util.pconvert(repo)
94 name = util.pconvert(repo)
95 if name.startswith(prefix):
95 if name.startswith(prefix):
96 name = name[len(prefix):]
96 name = name[len(prefix):]
97 repos.append((name.lstrip('/'), repo))
97 repos.append((name.lstrip('/'), repo))
98
98
99 self.repos = repos
99 self.repos = repos
100 self.ui = u
100 self.ui = u
101 encoding.encoding = self.ui.config('web', 'encoding',
101 encoding.encoding = self.ui.config('web', 'encoding',
102 encoding.encoding)
102 encoding.encoding)
103 self.style = self.ui.config('web', 'style', 'paper')
103 self.style = self.ui.config('web', 'style', 'paper')
104 self.templatepath = self.ui.config('web', 'templates', None)
104 self.templatepath = self.ui.config('web', 'templates', None)
105 self.stripecount = self.ui.config('web', 'stripes', 1)
105 self.stripecount = self.ui.config('web', 'stripes', 1)
106 if self.stripecount:
106 if self.stripecount:
107 self.stripecount = int(self.stripecount)
107 self.stripecount = int(self.stripecount)
108 self._baseurl = self.ui.config('web', 'baseurl')
108 self._baseurl = self.ui.config('web', 'baseurl')
109 self.lastrefresh = time.time()
109 self.lastrefresh = time.time()
110
110
111 def run(self):
111 def run(self):
112 if not os.environ.get('GATEWAY_INTERFACE', '').startswith("CGI/1."):
112 if not os.environ.get('GATEWAY_INTERFACE', '').startswith("CGI/1."):
113 raise RuntimeError("This function is only intended to be "
113 raise RuntimeError("This function is only intended to be "
114 "called while running as a CGI script.")
114 "called while running as a CGI script.")
115 import mercurial.hgweb.wsgicgi as wsgicgi
115 import mercurial.hgweb.wsgicgi as wsgicgi
116 wsgicgi.launch(self)
116 wsgicgi.launch(self)
117
117
118 def __call__(self, env, respond):
118 def __call__(self, env, respond):
119 req = wsgirequest(env, respond)
119 req = wsgirequest(env, respond)
120 return self.run_wsgi(req)
120 return self.run_wsgi(req)
121
121
122 def read_allowed(self, ui, req):
122 def read_allowed(self, ui, req):
123 """Check allow_read and deny_read config options of a repo's ui object
123 """Check allow_read and deny_read config options of a repo's ui object
124 to determine user permissions. By default, with neither option set (or
124 to determine user permissions. By default, with neither option set (or
125 both empty), allow all users to read the repo. There are two ways a
125 both empty), allow all users to read the repo. There are two ways a
126 user can be denied read access: (1) deny_read is not empty, and the
126 user can be denied read access: (1) deny_read is not empty, and the
127 user is unauthenticated or deny_read contains user (or *), and (2)
127 user is unauthenticated or deny_read contains user (or *), and (2)
128 allow_read is not empty and the user is not in allow_read. Return True
128 allow_read is not empty and the user is not in allow_read. Return True
129 if user is allowed to read the repo, else return False."""
129 if user is allowed to read the repo, else return False."""
130
130
131 user = req.env.get('REMOTE_USER')
131 user = req.env.get('REMOTE_USER')
132
132
133 deny_read = ui.configlist('web', 'deny_read', untrusted=True)
133 deny_read = ui.configlist('web', 'deny_read', untrusted=True)
134 if deny_read and (not user or deny_read == ['*'] or user in deny_read):
134 if deny_read and (not user or deny_read == ['*'] or user in deny_read):
135 return False
135 return False
136
136
137 allow_read = ui.configlist('web', 'allow_read', untrusted=True)
137 allow_read = ui.configlist('web', 'allow_read', untrusted=True)
138 # by default, allow reading if no allow_read option has been set
138 # by default, allow reading if no allow_read option has been set
139 if (not allow_read) or (allow_read == ['*']) or (user in allow_read):
139 if (not allow_read) or (allow_read == ['*']) or (user in allow_read):
140 return True
140 return True
141
141
142 return False
142 return False
143
143
144 def run_wsgi(self, req):
144 def run_wsgi(self, req):
145 try:
145 try:
146 try:
146 try:
147 self.refresh()
147 self.refresh()
148
148
149 virtual = req.env.get("PATH_INFO", "").strip('/')
149 virtual = req.env.get("PATH_INFO", "").strip('/')
150 tmpl = self.templater(req)
150 tmpl = self.templater(req)
151 ctype = tmpl('mimetype', encoding=encoding.encoding)
151 ctype = tmpl('mimetype', encoding=encoding.encoding)
152 ctype = templater.stringify(ctype)
152 ctype = templater.stringify(ctype)
153
153
154 # a static file
154 # a static file
155 if virtual.startswith('static/') or 'static' in req.form:
155 if virtual.startswith('static/') or 'static' in req.form:
156 if virtual.startswith('static/'):
156 if virtual.startswith('static/'):
157 fname = virtual[7:]
157 fname = virtual[7:]
158 else:
158 else:
159 fname = req.form['static'][0]
159 fname = req.form['static'][0]
160 static = templater.templatepath('static')
160 static = templater.templatepath('static')
161 return (staticfile(static, fname, req),)
161 return (staticfile(static, fname, req),)
162
162
163 # top-level index
163 # top-level index
164 elif not virtual:
164 elif not virtual:
165 req.respond(HTTP_OK, ctype)
165 req.respond(HTTP_OK, ctype)
166 return self.makeindex(req, tmpl)
166 return self.makeindex(req, tmpl)
167
167
168 # nested indexes and hgwebs
168 # nested indexes and hgwebs
169
169
170 repos = dict(self.repos)
170 repos = dict(self.repos)
171 virtualrepo = virtual
171 virtualrepo = virtual
172 while virtualrepo:
172 while virtualrepo:
173 real = repos.get(virtualrepo)
173 real = repos.get(virtualrepo)
174 if real:
174 if real:
175 req.env['REPO_NAME'] = virtualrepo
175 req.env['REPO_NAME'] = virtualrepo
176 try:
176 try:
177 repo = hg.repository(self.ui, real)
177 repo = hg.repository(self.ui, real)
178 return hgweb(repo).run_wsgi(req)
178 return hgweb(repo).run_wsgi(req)
179 except IOError, inst:
179 except IOError, inst:
180 msg = inst.strerror
180 msg = inst.strerror
181 raise ErrorResponse(HTTP_SERVER_ERROR, msg)
181 raise ErrorResponse(HTTP_SERVER_ERROR, msg)
182 except error.RepoError, inst:
182 except error.RepoError, inst:
183 raise ErrorResponse(HTTP_SERVER_ERROR, str(inst))
183 raise ErrorResponse(HTTP_SERVER_ERROR, str(inst))
184
184
185 up = virtualrepo.rfind('/')
185 up = virtualrepo.rfind('/')
186 if up < 0:
186 if up < 0:
187 break
187 break
188 virtualrepo = virtualrepo[:up]
188 virtualrepo = virtualrepo[:up]
189
189
190 # browse subdirectories
190 # browse subdirectories
191 subdir = virtual + '/'
191 subdir = virtual + '/'
192 if [r for r in repos if r.startswith(subdir)]:
192 if [r for r in repos if r.startswith(subdir)]:
193 req.respond(HTTP_OK, ctype)
193 req.respond(HTTP_OK, ctype)
194 return self.makeindex(req, tmpl, subdir)
194 return self.makeindex(req, tmpl, subdir)
195
195
196 # prefixes not found
196 # prefixes not found
197 req.respond(HTTP_NOT_FOUND, ctype)
197 req.respond(HTTP_NOT_FOUND, ctype)
198 return tmpl("notfound", repo=virtual)
198 return tmpl("notfound", repo=virtual)
199
199
200 except ErrorResponse, err:
200 except ErrorResponse, err:
201 req.respond(err, ctype)
201 req.respond(err, ctype)
202 return tmpl('error', error=err.message or '')
202 return tmpl('error', error=err.message or '')
203 finally:
203 finally:
204 tmpl = None
204 tmpl = None
205
205
206 def makeindex(self, req, tmpl, subdir=""):
206 def makeindex(self, req, tmpl, subdir=""):
207
207
208 def archivelist(ui, nodeid, url):
208 def archivelist(ui, nodeid, url):
209 allowed = ui.configlist("web", "allow_archive", untrusted=True)
209 allowed = ui.configlist("web", "allow_archive", untrusted=True)
210 archives = []
210 archives = []
211 for i in [('zip', '.zip'), ('gz', '.tar.gz'), ('bz2', '.tar.bz2')]:
211 for i in [('zip', '.zip'), ('gz', '.tar.gz'), ('bz2', '.tar.bz2')]:
212 if i[0] in allowed or ui.configbool("web", "allow" + i[0],
212 if i[0] in allowed or ui.configbool("web", "allow" + i[0],
213 untrusted=True):
213 untrusted=True):
214 archives.append({"type" : i[0], "extension": i[1],
214 archives.append({"type" : i[0], "extension": i[1],
215 "node": nodeid, "url": url})
215 "node": nodeid, "url": url})
216 return archives
216 return archives
217
217
218 def rawentries(subdir="", **map):
218 def rawentries(subdir="", **map):
219
219
220 descend = self.ui.configbool('web', 'descend', True)
220 descend = self.ui.configbool('web', 'descend', True)
221 for name, path in self.repos:
221 for name, path in self.repos:
222
222
223 if not name.startswith(subdir):
223 if not name.startswith(subdir):
224 continue
224 continue
225 name = name[len(subdir):]
225 name = name[len(subdir):]
226 if not descend and '/' in name:
226 if not descend and '/' in name:
227 continue
227 continue
228
228
229 u = self.ui.copy()
229 u = self.ui.copy()
230 try:
230 try:
231 u.readconfig(os.path.join(path, '.hg', 'hgrc'))
231 u.readconfig(os.path.join(path, '.hg', 'hgrc'))
232 except Exception, e:
232 except Exception, e:
233 u.warn(_('error reading %s/.hg/hgrc: %s\n') % (path, e))
233 u.warn(_('error reading %s/.hg/hgrc: %s\n') % (path, e))
234 continue
234 continue
235 def get(section, name, default=None):
235 def get(section, name, default=None):
236 return u.config(section, name, default, untrusted=True)
236 return u.config(section, name, default, untrusted=True)
237
237
238 if u.configbool("web", "hidden", untrusted=True):
238 if u.configbool("web", "hidden", untrusted=True):
239 continue
239 continue
240
240
241 if not self.read_allowed(u, req):
241 if not self.read_allowed(u, req):
242 continue
242 continue
243
243
244 parts = [name]
244 parts = [name]
245 if 'PATH_INFO' in req.env:
245 if 'PATH_INFO' in req.env:
246 parts.insert(0, req.env['PATH_INFO'].rstrip('/'))
246 parts.insert(0, req.env['PATH_INFO'].rstrip('/'))
247 if req.env['SCRIPT_NAME']:
247 if req.env['SCRIPT_NAME']:
248 parts.insert(0, req.env['SCRIPT_NAME'])
248 parts.insert(0, req.env['SCRIPT_NAME'])
249 url = re.sub(r'/+', '/', '/'.join(parts) + '/')
249 url = re.sub(r'/+', '/', '/'.join(parts) + '/')
250
250
251 # update time with local timezone
251 # update time with local timezone
252 try:
252 try:
253 r = hg.repository(self.ui, path)
253 r = hg.repository(self.ui, path)
254 except IOError:
254 except IOError:
255 u.warn(_('error accessing repository at %s\n') % path)
255 u.warn(_('error accessing repository at %s\n') % path)
256 continue
256 continue
257 except error.RepoError:
257 except error.RepoError:
258 u.warn(_('error accessing repository at %s\n') % path)
258 u.warn(_('error accessing repository at %s\n') % path)
259 continue
259 continue
260 try:
260 try:
261 d = (get_mtime(r.spath), util.makedate()[1])
261 d = (get_mtime(r.spath), util.makedate()[1])
262 except OSError:
262 except OSError:
263 continue
263 continue
264
264
265 contact = get_contact(get)
265 contact = get_contact(get)
266 description = get("web", "description", "")
266 description = get("web", "description", "")
267 name = get("web", "name", name)
267 name = get("web", "name", name)
268 row = dict(contact=contact or "unknown",
268 row = dict(contact=contact or "unknown",
269 contact_sort=contact.upper() or "unknown",
269 contact_sort=contact.upper() or "unknown",
270 name=name,
270 name=name,
271 name_sort=name,
271 name_sort=name,
272 url=url,
272 url=url,
273 description=description or "unknown",
273 description=description or "unknown",
274 description_sort=description.upper() or "unknown",
274 description_sort=description.upper() or "unknown",
275 lastchange=d,
275 lastchange=d,
276 lastchange_sort=d[1]-d[0],
276 lastchange_sort=d[1]-d[0],
277 archives=archivelist(u, "tip", url))
277 archives=archivelist(u, "tip", url))
278 yield row
278 yield row
279
279
280 sortdefault = None, False
280 sortdefault = None, False
281 def entries(sortcolumn="", descending=False, subdir="", **map):
281 def entries(sortcolumn="", descending=False, subdir="", **map):
282 rows = rawentries(subdir=subdir, **map)
282 rows = rawentries(subdir=subdir, **map)
283
283
284 if sortcolumn and sortdefault != (sortcolumn, descending):
284 if sortcolumn and sortdefault != (sortcolumn, descending):
285 sortkey = '%s_sort' % sortcolumn
285 sortkey = '%s_sort' % sortcolumn
286 rows = sorted(rows, key=lambda x: x[sortkey],
286 rows = sorted(rows, key=lambda x: x[sortkey],
287 reverse=descending)
287 reverse=descending)
288 for row, parity in zip(rows, paritygen(self.stripecount)):
288 for row, parity in zip(rows, paritygen(self.stripecount)):
289 row['parity'] = parity
289 row['parity'] = parity
290 yield row
290 yield row
291
291
292 self.refresh()
292 self.refresh()
293 sortable = ["name", "description", "contact", "lastchange"]
293 sortable = ["name", "description", "contact", "lastchange"]
294 sortcolumn, descending = sortdefault
294 sortcolumn, descending = sortdefault
295 if 'sort' in req.form:
295 if 'sort' in req.form:
296 sortcolumn = req.form['sort'][0]
296 sortcolumn = req.form['sort'][0]
297 descending = sortcolumn.startswith('-')
297 descending = sortcolumn.startswith('-')
298 if descending:
298 if descending:
299 sortcolumn = sortcolumn[1:]
299 sortcolumn = sortcolumn[1:]
300 if sortcolumn not in sortable:
300 if sortcolumn not in sortable:
301 sortcolumn = ""
301 sortcolumn = ""
302
302
303 sort = [("sort_%s" % column,
303 sort = [("sort_%s" % column,
304 "%s%s" % ((not descending and column == sortcolumn)
304 "%s%s" % ((not descending and column == sortcolumn)
305 and "-" or "", column))
305 and "-" or "", column))
306 for column in sortable]
306 for column in sortable]
307
307
308 self.refresh()
308 self.refresh()
309 self.updatereqenv(req.env)
309 self.updatereqenv(req.env)
310
310
311 return tmpl("index", entries=entries, subdir=subdir,
311 return tmpl("index", entries=entries, subdir=subdir,
312 sortcolumn=sortcolumn, descending=descending,
312 sortcolumn=sortcolumn, descending=descending,
313 **dict(sort))
313 **dict(sort))
314
314
315 def templater(self, req):
315 def templater(self, req):
316
316
317 def header(**map):
317 def header(**map):
318 yield tmpl('header', encoding=encoding.encoding, **map)
318 yield tmpl('header', encoding=encoding.encoding, **map)
319
319
320 def footer(**map):
320 def footer(**map):
321 yield tmpl("footer", **map)
321 yield tmpl("footer", **map)
322
322
323 def motd(**map):
323 def motd(**map):
324 if self.motd is not None:
324 if self.motd is not None:
325 yield self.motd
325 yield self.motd
326 else:
326 else:
327 yield config('web', 'motd', '')
327 yield config('web', 'motd', '')
328
328
329 def config(section, name, default=None, untrusted=True):
329 def config(section, name, default=None, untrusted=True):
330 return self.ui.config(section, name, default, untrusted)
330 return self.ui.config(section, name, default, untrusted)
331
331
332 self.updatereqenv(req.env)
332 self.updatereqenv(req.env)
333
333
334 url = req.env.get('SCRIPT_NAME', '')
334 url = req.env.get('SCRIPT_NAME', '')
335 if not url.endswith('/'):
335 if not url.endswith('/'):
336 url += '/'
336 url += '/'
337
337
338 vars = {}
338 vars = {}
339 styles = (
339 styles = (
340 req.form.get('style', [None])[0],
340 req.form.get('style', [None])[0],
341 config('web', 'style'),
341 config('web', 'style'),
342 'paper'
342 'paper'
343 )
343 )
344 style, mapfile = templater.stylemap(styles, self.templatepath)
344 style, mapfile = templater.stylemap(styles, self.templatepath)
345 if style == styles[0]:
345 if style == styles[0]:
346 vars['style'] = style
346 vars['style'] = style
347
347
348 start = url[-1] == '?' and '&' or '?'
348 start = url[-1] == '?' and '&' or '?'
349 sessionvars = webutil.sessionvars(vars, start)
349 sessionvars = webutil.sessionvars(vars, start)
350 logourl = config('web', 'logourl', 'http://mercurial.selenic.com/')
350 staticurl = config('web', 'staticurl') or url + 'static/'
351 staticurl = config('web', 'staticurl') or url + 'static/'
351 if not staticurl.endswith('/'):
352 if not staticurl.endswith('/'):
352 staticurl += '/'
353 staticurl += '/'
353
354
354 tmpl = templater.templater(mapfile,
355 tmpl = templater.templater(mapfile,
355 defaults={"header": header,
356 defaults={"header": header,
356 "footer": footer,
357 "footer": footer,
357 "motd": motd,
358 "motd": motd,
358 "url": url,
359 "url": url,
360 "logourl": logourl,
359 "staticurl": staticurl,
361 "staticurl": staticurl,
360 "sessionvars": sessionvars})
362 "sessionvars": sessionvars})
361 return tmpl
363 return tmpl
362
364
363 def updatereqenv(self, env):
365 def updatereqenv(self, env):
364 if self._baseurl is not None:
366 if self._baseurl is not None:
365 u = url.url(self._baseurl)
367 u = url.url(self._baseurl)
366 env['SERVER_NAME'] = u.host
368 env['SERVER_NAME'] = u.host
367 if u.port:
369 if u.port:
368 env['SERVER_PORT'] = u.port
370 env['SERVER_PORT'] = u.port
369 env['SCRIPT_NAME'] = '/' + u.path
371 env['SCRIPT_NAME'] = '/' + u.path
@@ -1,32 +1,32 b''
1 {header}
1 {header}
2 <title>{repo|escape}: Bookmarks</title>
2 <title>{repo|escape}: Bookmarks</title>
3 <link rel="alternate" type="application/atom+xml"
3 <link rel="alternate" type="application/atom+xml"
4 href="{url}atom-bookmarks" title="Atom feed for {repo|escape}"/>
4 href="{url}atom-bookmarks" title="Atom feed for {repo|escape}"/>
5 <link rel="alternate" type="application/rss+xml"
5 <link rel="alternate" type="application/rss+xml"
6 href="{url}rss-bookmarks" title="RSS feed for {repo|escape}"/>
6 href="{url}rss-bookmarks" title="RSS feed for {repo|escape}"/>
7 </head>
7 </head>
8 <body>
8 <body>
9
9
10 <div class="page_header">
10 <div class="page_header">
11 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / bookmarks
11 <a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / bookmarks
12 </div>
12 </div>
13
13
14 <div class="page_nav">
14 <div class="page_nav">
15 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
15 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
16 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
16 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
17 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
17 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
18 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
18 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
19 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
19 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
20 bookmarks |
20 bookmarks |
21 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
21 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
22 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a> |
22 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a> |
23 <a href="{url}help{sessionvars%urlparameter}">help</a>
23 <a href="{url}help{sessionvars%urlparameter}">help</a>
24 <br/>
24 <br/>
25 </div>
25 </div>
26
26
27 <div class="title">&nbsp;</div>
27 <div class="title">&nbsp;</div>
28 <table cellspacing="0">
28 <table cellspacing="0">
29 {entries%bookmarkentry}
29 {entries%bookmarkentry}
30 </table>
30 </table>
31
31
32 {footer}
32 {footer}
@@ -1,32 +1,32 b''
1 {header}
1 {header}
2 <title>{repo|escape}: Branches</title>
2 <title>{repo|escape}: Branches</title>
3 <link rel="alternate" type="application/atom+xml"
3 <link rel="alternate" type="application/atom+xml"
4 href="{url}atom-tags" title="Atom feed for {repo|escape}"/>
4 href="{url}atom-tags" title="Atom feed for {repo|escape}"/>
5 <link rel="alternate" type="application/rss+xml"
5 <link rel="alternate" type="application/rss+xml"
6 href="{url}rss-tags" title="RSS feed for {repo|escape}"/>
6 href="{url}rss-tags" title="RSS feed for {repo|escape}"/>
7 </head>
7 </head>
8 <body>
8 <body>
9
9
10 <div class="page_header">
10 <div class="page_header">
11 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / branches
11 <a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / branches
12 </div>
12 </div>
13
13
14 <div class="page_nav">
14 <div class="page_nav">
15 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
15 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
16 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
16 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
17 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
17 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
18 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
18 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
19 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
19 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
20 <a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
20 <a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
21 branches |
21 branches |
22 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a> |
22 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a> |
23 <a href="{url}help{sessionvars%urlparameter}">help</a>
23 <a href="{url}help{sessionvars%urlparameter}">help</a>
24 <br/>
24 <br/>
25 </div>
25 </div>
26
26
27 <div class="title">&nbsp;</div>
27 <div class="title">&nbsp;</div>
28 <table cellspacing="0">
28 <table cellspacing="0">
29 {entries%branchentry}
29 {entries%branchentry}
30 </table>
30 </table>
31
31
32 {footer}
32 {footer}
@@ -1,41 +1,41 b''
1 {header}
1 {header}
2 <title>{repo|escape}: Changelog</title>
2 <title>{repo|escape}: Changelog</title>
3 <link rel="alternate" type="application/atom+xml"
3 <link rel="alternate" type="application/atom+xml"
4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
5 <link rel="alternate" type="application/rss+xml"
5 <link rel="alternate" type="application/rss+xml"
6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
7 </head>
7 </head>
8 <body>
8 <body>
9
9
10 <div class="page_header">
10 <div class="page_header">
11 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / changelog
11 <a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / changelog
12 </div>
12 </div>
13
13
14 <form action="{url}log">
14 <form action="{url}log">
15 {sessionvars%hiddenformentry}
15 {sessionvars%hiddenformentry}
16 <div class="search">
16 <div class="search">
17 <input type="text" name="rev" />
17 <input type="text" name="rev" />
18 </div>
18 </div>
19 </form>
19 </form>
20
20
21 <div class="page_nav">
21 <div class="page_nav">
22 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
22 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
23 <a href="{url}shortlog/{rev}{sessionvars%urlparameter}">shortlog</a> |
23 <a href="{url}shortlog/{rev}{sessionvars%urlparameter}">shortlog</a> |
24 changelog |
24 changelog |
25 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
25 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
26 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
26 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
27 <a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
27 <a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
28 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
28 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
29 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry} |
29 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry} |
30 <a href="{url}help{sessionvars%urlparameter}">help</a>
30 <a href="{url}help{sessionvars%urlparameter}">help</a>
31 <br/>
31 <br/>
32 {changenav%nav}<br/>
32 {changenav%nav}<br/>
33 </div>
33 </div>
34
34
35 {entries%changelogentry}
35 {entries%changelogentry}
36
36
37 <div class="page_nav">
37 <div class="page_nav">
38 {changenav%nav}<br/>
38 {changenav%nav}<br/>
39 </div>
39 </div>
40
40
41 {footer}
41 {footer}
@@ -1,53 +1,53 b''
1 {header}
1 {header}
2 <title>{repo|escape}: changeset {rev}:{node|short}</title>
2 <title>{repo|escape}: changeset {rev}:{node|short}</title>
3 <link rel="alternate" type="application/atom+xml"
3 <link rel="alternate" type="application/atom+xml"
4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
5 <link rel="alternate" type="application/rss+xml"
5 <link rel="alternate" type="application/rss+xml"
6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
7 </head>
7 </head>
8 <body>
8 <body>
9
9
10 <div class="page_header">
10 <div class="page_header">
11 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / changeset
11 <a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / changeset
12 </div>
12 </div>
13
13
14 <div class="page_nav">
14 <div class="page_nav">
15 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
15 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
16 <a href="{url}shortlog/{rev}{sessionvars%urlparameter}">shortlog</a> |
16 <a href="{url}shortlog/{rev}{sessionvars%urlparameter}">shortlog</a> |
17 <a href="{url}log/{rev}{sessionvars%urlparameter}">changelog</a> |
17 <a href="{url}log/{rev}{sessionvars%urlparameter}">changelog</a> |
18 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
18 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
19 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
19 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
20 <a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
20 <a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
21 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
21 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
22 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a> |
22 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a> |
23 changeset |
23 changeset |
24 <a href="{url}raw-rev/{node|short}">raw</a> {archives%archiveentry} |
24 <a href="{url}raw-rev/{node|short}">raw</a> {archives%archiveentry} |
25 <a href="{url}help{sessionvars%urlparameter}">help</a>
25 <a href="{url}help{sessionvars%urlparameter}">help</a>
26 <br/>
26 <br/>
27 </div>
27 </div>
28
28
29 <div>
29 <div>
30 <a class="title" href="{url}raw-rev/{node|short}">{desc|strip|escape|firstline|nonempty} <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}{bookmarks%bookmarktag}</span></a>
30 <a class="title" href="{url}raw-rev/{node|short}">{desc|strip|escape|firstline|nonempty} <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}{bookmarks%bookmarktag}</span></a>
31 </div>
31 </div>
32 <div class="title_text">
32 <div class="title_text">
33 <table cellspacing="0">
33 <table cellspacing="0">
34 <tr><td>author</td><td>{author|obfuscate}</td></tr>
34 <tr><td>author</td><td>{author|obfuscate}</td></tr>
35 <tr><td></td><td>{date|date} ({date|age})</td></tr>
35 <tr><td></td><td>{date|date} ({date|age})</td></tr>
36 {branch%changesetbranch}
36 {branch%changesetbranch}
37 <tr><td>changeset {rev}</td><td style="font-family:monospace">{node|short}</td></tr>
37 <tr><td>changeset {rev}</td><td style="font-family:monospace">{node|short}</td></tr>
38 {parent%changesetparent}
38 {parent%changesetparent}
39 {child%changesetchild}
39 {child%changesetchild}
40 </table></div>
40 </table></div>
41
41
42 <div class="page_body">
42 <div class="page_body">
43 {desc|strip|escape|addbreaks|nonempty}
43 {desc|strip|escape|addbreaks|nonempty}
44 </div>
44 </div>
45 <div class="list_head"></div>
45 <div class="list_head"></div>
46 <div class="title_text">
46 <div class="title_text">
47 <table cellspacing="0">
47 <table cellspacing="0">
48 {files}
48 {files}
49 </table></div>
49 </table></div>
50
50
51 <div class="page_body">{diff}</div>
51 <div class="page_body">{diff}</div>
52
52
53 {footer}
53 {footer}
@@ -1,33 +1,33 b''
1 {header}
1 {header}
2 <title>{repo|escape}: Error</title>
2 <title>{repo|escape}: Error</title>
3 <link rel="alternate" type="application/atom+xml"
3 <link rel="alternate" type="application/atom+xml"
4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
5 <link rel="alternate" type="application/rss+xml"
5 <link rel="alternate" type="application/rss+xml"
6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
7 </head>
7 </head>
8 <body>
8 <body>
9
9
10 <div class="page_header">
10 <div class="page_header">
11 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / error
11 <a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / error
12 </div>
12 </div>
13
13
14 <div class="page_nav">
14 <div class="page_nav">
15 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
15 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
16 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
16 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
17 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
17 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
18 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
18 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
19 <a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
19 <a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
20 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
20 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
21 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a> |
21 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a> |
22 <a href="{url}help{sessionvars%urlparameter}">help</a>
22 <a href="{url}help{sessionvars%urlparameter}">help</a>
23 <br/>
23 <br/>
24 </div>
24 </div>
25
25
26 <div class="page_body">
26 <div class="page_body">
27 <br/>
27 <br/>
28 <i>An error occurred while processing your request</i><br/>
28 <i>An error occurred while processing your request</i><br/>
29 <br/>
29 <br/>
30 {error|escape}
30 {error|escape}
31 </div>
31 </div>
32
32
33 {footer}
33 {footer}
@@ -1,65 +1,65 b''
1 {header}
1 {header}
2 <title>{repo|escape}: {file|escape}@{node|short} (annotated)</title>
2 <title>{repo|escape}: {file|escape}@{node|short} (annotated)</title>
3 <link rel="alternate" type="application/atom+xml"
3 <link rel="alternate" type="application/atom+xml"
4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
5 <link rel="alternate" type="application/rss+xml"
5 <link rel="alternate" type="application/rss+xml"
6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
7 </head>
7 </head>
8 <body>
8 <body>
9
9
10 <div class="page_header">
10 <div class="page_header">
11 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / annotate
11 <a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / annotate
12 </div>
12 </div>
13
13
14 <div class="page_nav">
14 <div class="page_nav">
15 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
15 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
16 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
16 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
17 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
17 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
18 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
18 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
19 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
19 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
20 <a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
20 <a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
21 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
21 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
22 <a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a> |
22 <a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a> |
23 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
23 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
24 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
24 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
25 <a href="{url}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a> |
25 <a href="{url}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a> |
26 <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
26 <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
27 annotate |
27 annotate |
28 <a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
28 <a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
29 <a href="{url}raw-annotate/{node|short}/{file|urlescape}">raw</a> |
29 <a href="{url}raw-annotate/{node|short}/{file|urlescape}">raw</a> |
30 <a href="{url}help{sessionvars%urlparameter}">help</a>
30 <a href="{url}help{sessionvars%urlparameter}">help</a>
31 <br/>
31 <br/>
32 </div>
32 </div>
33
33
34 <div class="title">{file|escape}</div>
34 <div class="title">{file|escape}</div>
35
35
36 <div class="title_text">
36 <div class="title_text">
37 <table cellspacing="0">
37 <table cellspacing="0">
38 <tr>
38 <tr>
39 <td>author</td>
39 <td>author</td>
40 <td>{author|obfuscate}</td></tr>
40 <td>{author|obfuscate}</td></tr>
41 <tr>
41 <tr>
42 <td></td>
42 <td></td>
43 <td>{date|date} ({date|age})</td></tr>
43 <td>{date|date} ({date|age})</td></tr>
44 {branch%filerevbranch}
44 {branch%filerevbranch}
45 <tr>
45 <tr>
46 <td>changeset {rev}</td>
46 <td>changeset {rev}</td>
47 <td style="font-family:monospace"><a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td></tr>
47 <td style="font-family:monospace"><a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td></tr>
48 {parent%fileannotateparent}
48 {parent%fileannotateparent}
49 {child%fileannotatechild}
49 {child%fileannotatechild}
50 <tr>
50 <tr>
51 <td>permissions</td>
51 <td>permissions</td>
52 <td style="font-family:monospace">{permissions|permissions}</td></tr>
52 <td style="font-family:monospace">{permissions|permissions}</td></tr>
53 </table>
53 </table>
54 </div>
54 </div>
55
55
56 <div class="page_path">
56 <div class="page_path">
57 {desc|strip|escape|addbreaks|nonempty}
57 {desc|strip|escape|addbreaks|nonempty}
58 </div>
58 </div>
59 <div class="page_body">
59 <div class="page_body">
60 <table>
60 <table>
61 {annotate%annotateline}
61 {annotate%annotateline}
62 </table>
62 </table>
63 </div>
63 </div>
64
64
65 {footer}
65 {footer}
@@ -1,50 +1,50 b''
1 {header}
1 {header}
2 <title>{repo|escape}: diff {file|escape}</title>
2 <title>{repo|escape}: diff {file|escape}</title>
3 <link rel="alternate" type="application/atom+xml"
3 <link rel="alternate" type="application/atom+xml"
4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
5 <link rel="alternate" type="application/rss+xml"
5 <link rel="alternate" type="application/rss+xml"
6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
7 </head>
7 </head>
8 <body>
8 <body>
9
9
10 <div class="page_header">
10 <div class="page_header">
11 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / diff
11 <a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / diff
12 </div>
12 </div>
13
13
14 <div class="page_nav">
14 <div class="page_nav">
15 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
15 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
16 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
16 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
17 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
17 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
18 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
18 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
19 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
19 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
20 <a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
20 <a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
21 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
21 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
22 <a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a> |
22 <a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a> |
23 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
23 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
24 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
24 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
25 <a href="{url}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a> |
25 <a href="{url}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a> |
26 <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
26 <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
27 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
27 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
28 diff |
28 diff |
29 <a href="{url}raw-diff/{node|short}/{file|urlescape}">raw</a><br/> |
29 <a href="{url}raw-diff/{node|short}/{file|urlescape}">raw</a><br/> |
30 <a href="{url}help{sessionvars%urlparameter}">help</a>
30 <a href="{url}help{sessionvars%urlparameter}">help</a>
31 </div>
31 </div>
32
32
33 <div class="title">{file|escape}</div>
33 <div class="title">{file|escape}</div>
34
34
35 <table>
35 <table>
36 {branch%filerevbranch}
36 {branch%filerevbranch}
37 <tr>
37 <tr>
38 <td>changeset {rev}</td>
38 <td>changeset {rev}</td>
39 <td style="font-family:monospace"><a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td></tr>
39 <td style="font-family:monospace"><a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td></tr>
40 {parent%filediffparent}
40 {parent%filediffparent}
41 {child%filediffchild}
41 {child%filediffchild}
42 </table>
42 </table>
43
43
44 <div class="list_head"></div>
44 <div class="list_head"></div>
45
45
46 <div class="page_body">
46 <div class="page_body">
47 {diff}
47 {diff}
48 </div>
48 </div>
49
49
50 {footer}
50 {footer}
@@ -1,42 +1,42 b''
1 {header}
1 {header}
2 <title>{repo|escape}: File revisions</title>
2 <title>{repo|escape}: File revisions</title>
3 <link rel="alternate" type="application/atom+xml"
3 <link rel="alternate" type="application/atom+xml"
4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
5 <link rel="alternate" type="application/rss+xml"
5 <link rel="alternate" type="application/rss+xml"
6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
7 </head>
7 </head>
8 <body>
8 <body>
9
9
10 <div class="page_header">
10 <div class="page_header">
11 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / file revisions
11 <a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / file revisions
12 </div>
12 </div>
13
13
14 <div class="page_nav">
14 <div class="page_nav">
15 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
15 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
16 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
16 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
17 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
17 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
18 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
18 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
19 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
19 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
20 <a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
20 <a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
21 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
21 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
22 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
22 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
23 revisions |
23 revisions |
24 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
24 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
25 <a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
25 <a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
26 <a href="{url}rss-log/tip/{file|urlescape}">rss</a> |
26 <a href="{url}rss-log/tip/{file|urlescape}">rss</a> |
27 <a href="{url}help{sessionvars%urlparameter}">help</a>
27 <a href="{url}help{sessionvars%urlparameter}">help</a>
28 <br/>
28 <br/>
29 {nav%filenav}
29 {nav%filenav}
30 </div>
30 </div>
31
31
32 <div class="title" >{file|urlescape}</div>
32 <div class="title" >{file|urlescape}</div>
33
33
34 <table>
34 <table>
35 {entries%filelogentry}
35 {entries%filelogentry}
36 </table>
36 </table>
37
37
38 <div class="page_nav">
38 <div class="page_nav">
39 {nav%filenav}
39 {nav%filenav}
40 </div>
40 </div>
41
41
42 {footer}
42 {footer}
@@ -1,64 +1,64 b''
1 {header}
1 {header}
2 <title>{repo|escape}: {file|escape}@{node|short}</title>
2 <title>{repo|escape}: {file|escape}@{node|short}</title>
3 <link rel="alternate" type="application/atom+xml"
3 <link rel="alternate" type="application/atom+xml"
4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
5 <link rel="alternate" type="application/rss+xml"
5 <link rel="alternate" type="application/rss+xml"
6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
7 </head>
7 </head>
8 <body>
8 <body>
9
9
10 <div class="page_header">
10 <div class="page_header">
11 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / file revision
11 <a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / file revision
12 </div>
12 </div>
13
13
14 <div class="page_nav">
14 <div class="page_nav">
15 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
15 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
16 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
16 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
17 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
17 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
18 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
18 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
19 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
19 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
20 <a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
20 <a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
21 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
21 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
22 <a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a> |
22 <a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a> |
23 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
23 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
24 file |
24 file |
25 <a href="{url}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a> |
25 <a href="{url}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a> |
26 <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
26 <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
27 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
27 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
28 <a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
28 <a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
29 <a href="{url}raw-file/{node|short}/{file|urlescape}">raw</a> |
29 <a href="{url}raw-file/{node|short}/{file|urlescape}">raw</a> |
30 <a href="{url}help{sessionvars%urlparameter}">help</a>
30 <a href="{url}help{sessionvars%urlparameter}">help</a>
31 <br/>
31 <br/>
32 </div>
32 </div>
33
33
34 <div class="title">{file|escape}</div>
34 <div class="title">{file|escape}</div>
35
35
36 <div class="title_text">
36 <div class="title_text">
37 <table cellspacing="0">
37 <table cellspacing="0">
38 <tr>
38 <tr>
39 <td>author</td>
39 <td>author</td>
40 <td>{author|obfuscate}</td></tr>
40 <td>{author|obfuscate}</td></tr>
41 <tr>
41 <tr>
42 <td></td>
42 <td></td>
43 <td>{date|date} ({date|age})</td></tr>
43 <td>{date|date} ({date|age})</td></tr>
44 {branch%filerevbranch}
44 {branch%filerevbranch}
45 <tr>
45 <tr>
46 <td>changeset {rev}</td>
46 <td>changeset {rev}</td>
47 <td style="font-family:monospace"><a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td></tr>
47 <td style="font-family:monospace"><a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td></tr>
48 {parent%filerevparent}
48 {parent%filerevparent}
49 {child%filerevchild}
49 {child%filerevchild}
50 <tr>
50 <tr>
51 <td>permissions</td>
51 <td>permissions</td>
52 <td style="font-family:monospace">{permissions|permissions}</td></tr>
52 <td style="font-family:monospace">{permissions|permissions}</td></tr>
53 </table>
53 </table>
54 </div>
54 </div>
55
55
56 <div class="page_path">
56 <div class="page_path">
57 {desc|strip|escape|addbreaks|nonempty}
57 {desc|strip|escape|addbreaks|nonempty}
58 </div>
58 </div>
59
59
60 <div class="page_body">
60 <div class="page_body">
61 {text%fileline}
61 {text%fileline}
62 </div>
62 </div>
63
63
64 {footer}
64 {footer}
@@ -1,129 +1,129 b''
1 {header}
1 {header}
2 <title>{repo|escape}: Graph</title>
2 <title>{repo|escape}: Graph</title>
3 <link rel="alternate" type="application/atom+xml"
3 <link rel="alternate" type="application/atom+xml"
4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
5 <link rel="alternate" type="application/rss+xml"
5 <link rel="alternate" type="application/rss+xml"
6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
7 <!--[if IE]><script type="text/javascript" src="{staticurl}excanvas.js"></script><![endif]-->
7 <!--[if IE]><script type="text/javascript" src="{staticurl}excanvas.js"></script><![endif]-->
8 </head>
8 </head>
9 <body>
9 <body>
10
10
11 <div class="page_header">
11 <div class="page_header">
12 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / graph
12 <a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / graph
13 </div>
13 </div>
14
14
15 <form action="{url}log">
15 <form action="{url}log">
16 {sessionvars%hiddenformentry}
16 {sessionvars%hiddenformentry}
17 <div class="search">
17 <div class="search">
18 <input type="text" name="rev" />
18 <input type="text" name="rev" />
19 </div>
19 </div>
20 </form>
20 </form>
21 <div class="page_nav">
21 <div class="page_nav">
22 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
22 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
23 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
23 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
24 <a href="{url}log/{rev}{sessionvars%urlparameter}">changelog</a> |
24 <a href="{url}log/{rev}{sessionvars%urlparameter}">changelog</a> |
25 graph |
25 graph |
26 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
26 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
27 <a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
27 <a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
28 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
28 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
29 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a> |
29 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a> |
30 <a href="{url}help{sessionvars%urlparameter}">help</a>
30 <a href="{url}help{sessionvars%urlparameter}">help</a>
31 <br/>
31 <br/>
32 <a href="{url}graph/{rev}{lessvars%urlparameter}">less</a>
32 <a href="{url}graph/{rev}{lessvars%urlparameter}">less</a>
33 <a href="{url}graph/{rev}{morevars%urlparameter}">more</a>
33 <a href="{url}graph/{rev}{morevars%urlparameter}">more</a>
34 | {changenav%navgraph}<br/>
34 | {changenav%navgraph}<br/>
35 </div>
35 </div>
36
36
37 <div class="title">&nbsp;</div>
37 <div class="title">&nbsp;</div>
38
38
39 <noscript>The revision graph only works with JavaScript-enabled browsers.</noscript>
39 <noscript>The revision graph only works with JavaScript-enabled browsers.</noscript>
40
40
41 <div id="wrapper">
41 <div id="wrapper">
42 <ul id="nodebgs"></ul>
42 <ul id="nodebgs"></ul>
43 <canvas id="graph" width="480" height="{canvasheight}"></canvas>
43 <canvas id="graph" width="480" height="{canvasheight}"></canvas>
44 <ul id="graphnodes"></ul>
44 <ul id="graphnodes"></ul>
45 </div>
45 </div>
46
46
47 <script type="text/javascript" src="{staticurl}graph.js"></script>
47 <script type="text/javascript" src="{staticurl}graph.js"></script>
48 <script>
48 <script>
49 <!-- hide script content
49 <!-- hide script content
50
50
51 var data = {jsdata|json};
51 var data = {jsdata|json};
52 var graph = new Graph();
52 var graph = new Graph();
53 graph.scale({bg_height});
53 graph.scale({bg_height});
54
54
55 graph.edge = function(x0, y0, x1, y1, color) \{
55 graph.edge = function(x0, y0, x1, y1, color) \{
56
56
57 this.setColor(color, 0.0, 0.65);
57 this.setColor(color, 0.0, 0.65);
58 this.ctx.beginPath();
58 this.ctx.beginPath();
59 this.ctx.moveTo(x0, y0);
59 this.ctx.moveTo(x0, y0);
60 this.ctx.lineTo(x1, y1);
60 this.ctx.lineTo(x1, y1);
61 this.ctx.stroke();
61 this.ctx.stroke();
62
62
63 }
63 }
64
64
65 var revlink = '<li style="_STYLE"><span class="desc">';
65 var revlink = '<li style="_STYLE"><span class="desc">';
66 revlink += '<a class="list" href="{url}rev/_NODEID{sessionvars%urlparameter}" title="_NODEID"><b>_DESC</b></a>';
66 revlink += '<a class="list" href="{url}rev/_NODEID{sessionvars%urlparameter}" title="_NODEID"><b>_DESC</b></a>';
67 revlink += '</span> _TAGS';
67 revlink += '</span> _TAGS';
68 revlink += '<span class="info">_DATE, by _USER</span></li>';
68 revlink += '<span class="info">_DATE, by _USER</span></li>';
69
69
70 graph.vertex = function(x, y, color, parity, cur) \{
70 graph.vertex = function(x, y, color, parity, cur) \{
71
71
72 this.ctx.beginPath();
72 this.ctx.beginPath();
73 color = this.setColor(color, 0.25, 0.75);
73 color = this.setColor(color, 0.25, 0.75);
74 this.ctx.arc(x, y, radius, 0, Math.PI * 2, true);
74 this.ctx.arc(x, y, radius, 0, Math.PI * 2, true);
75 this.ctx.fill();
75 this.ctx.fill();
76
76
77 var bg = '<li class="bg parity' + parity + '"></li>';
77 var bg = '<li class="bg parity' + parity + '"></li>';
78 var left = (this.columns + 1) * this.bg_height;
78 var left = (this.columns + 1) * this.bg_height;
79 var nstyle = 'padding-left: ' + left + 'px;';
79 var nstyle = 'padding-left: ' + left + 'px;';
80 var item = revlink.replace(/_STYLE/, nstyle);
80 var item = revlink.replace(/_STYLE/, nstyle);
81 item = item.replace(/_PARITY/, 'parity' + parity);
81 item = item.replace(/_PARITY/, 'parity' + parity);
82 item = item.replace(/_NODEID/, cur[0]);
82 item = item.replace(/_NODEID/, cur[0]);
83 item = item.replace(/_NODEID/, cur[0]);
83 item = item.replace(/_NODEID/, cur[0]);
84 item = item.replace(/_DESC/, cur[3]);
84 item = item.replace(/_DESC/, cur[3]);
85 item = item.replace(/_USER/, cur[4]);
85 item = item.replace(/_USER/, cur[4]);
86 item = item.replace(/_DATE/, cur[5]);
86 item = item.replace(/_DATE/, cur[5]);
87
87
88 var tagspan = '';
88 var tagspan = '';
89 if (cur[7].length || cur[8].length || (cur[6][0] != 'default' || cur[6][1])) \{
89 if (cur[7].length || cur[8].length || (cur[6][0] != 'default' || cur[6][1])) \{
90 tagspan = '<span class="logtags">';
90 tagspan = '<span class="logtags">';
91 if (cur[6][1]) \{
91 if (cur[6][1]) \{
92 tagspan += '<span class="branchtag" title="' + cur[6][0] + '">';
92 tagspan += '<span class="branchtag" title="' + cur[6][0] + '">';
93 tagspan += cur[6][0] + '</span> ';
93 tagspan += cur[6][0] + '</span> ';
94 } else if (!cur[6][1] && cur[6][0] != 'default') \{
94 } else if (!cur[6][1] && cur[6][0] != 'default') \{
95 tagspan += '<span class="inbranchtag" title="' + cur[6][0] + '">';
95 tagspan += '<span class="inbranchtag" title="' + cur[6][0] + '">';
96 tagspan += cur[6][0] + '</span> ';
96 tagspan += cur[6][0] + '</span> ';
97 }
97 }
98 if (cur[7].length) \{
98 if (cur[7].length) \{
99 for (var t in cur[7]) \{
99 for (var t in cur[7]) \{
100 var tag = cur[7][t];
100 var tag = cur[7][t];
101 tagspan += '<span class="tagtag">' + tag + '</span> ';
101 tagspan += '<span class="tagtag">' + tag + '</span> ';
102 }
102 }
103 }
103 }
104 if (cur[8].length) \{
104 if (cur[8].length) \{
105 for (var t in cur[8]) \{
105 for (var t in cur[8]) \{
106 var bookmark = cur[8][t];
106 var bookmark = cur[8][t];
107 tagspan += '<span class="bookmarktag">' + bookmark + '</span> ';
107 tagspan += '<span class="bookmarktag">' + bookmark + '</span> ';
108 }
108 }
109 }
109 }
110 tagspan += '</span>';
110 tagspan += '</span>';
111 }
111 }
112
112
113 item = item.replace(/_TAGS/, tagspan);
113 item = item.replace(/_TAGS/, tagspan);
114 return [bg, item];
114 return [bg, item];
115
115
116 }
116 }
117
117
118 graph.render(data);
118 graph.render(data);
119
119
120 // stop hiding script -->
120 // stop hiding script -->
121 </script>
121 </script>
122
122
123 <div class="page_nav">
123 <div class="page_nav">
124 <a href="{url}graph/{rev}{lessvars%urlparameter}">less</a>
124 <a href="{url}graph/{rev}{lessvars%urlparameter}">less</a>
125 <a href="{url}graph/{rev}{morevars%urlparameter}">more</a>
125 <a href="{url}graph/{rev}{morevars%urlparameter}">more</a>
126 | {changenav%navgraph}
126 | {changenav%navgraph}
127 </div>
127 </div>
128
128
129 {footer}
129 {footer}
@@ -1,33 +1,33 b''
1 {header}
1 {header}
2 <title>{repo|escape}: Branches</title>
2 <title>{repo|escape}: Branches</title>
3 <link rel="alternate" type="application/atom+xml"
3 <link rel="alternate" type="application/atom+xml"
4 href="{url}atom-tags" title="Atom feed for {repo|escape}"/>
4 href="{url}atom-tags" title="Atom feed for {repo|escape}"/>
5 <link rel="alternate" type="application/rss+xml"
5 <link rel="alternate" type="application/rss+xml"
6 href="{url}rss-tags" title="RSS feed for {repo|escape}"/>
6 href="{url}rss-tags" title="RSS feed for {repo|escape}"/>
7 </head>
7 </head>
8 <body>
8 <body>
9
9
10 <div class="page_header">
10 <div class="page_header">
11 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / help
11 <a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / help
12 </div>
12 </div>
13
13
14 <div class="page_nav">
14 <div class="page_nav">
15 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
15 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
16 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
16 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
17 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
17 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
18 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
18 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
19 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
19 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
20 <a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
20 <a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
21 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
21 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
22 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a> |
22 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a> |
23 help
23 help
24 <br/>
24 <br/>
25 </div>
25 </div>
26
26
27 <div class="title">&nbsp;</div>
27 <div class="title">&nbsp;</div>
28
28
29 <pre>
29 <pre>
30 {doc|escape}
30 {doc|escape}
31 </pre>
31 </pre>
32
32
33 {footer}
33 {footer}
@@ -1,39 +1,39 b''
1 {header}
1 {header}
2 <title>{repo|escape}: Branches</title>
2 <title>{repo|escape}: Branches</title>
3 <link rel="alternate" type="application/atom+xml"
3 <link rel="alternate" type="application/atom+xml"
4 href="{url}atom-tags" title="Atom feed for {repo|escape}"/>
4 href="{url}atom-tags" title="Atom feed for {repo|escape}"/>
5 <link rel="alternate" type="application/rss+xml"
5 <link rel="alternate" type="application/rss+xml"
6 href="{url}rss-tags" title="RSS feed for {repo|escape}"/>
6 href="{url}rss-tags" title="RSS feed for {repo|escape}"/>
7 </head>
7 </head>
8 <body>
8 <body>
9
9
10 <div class="page_header">
10 <div class="page_header">
11 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / help
11 <a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / help
12 </div>
12 </div>
13
13
14 <div class="page_nav">
14 <div class="page_nav">
15 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
15 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
16 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
16 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
17 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
17 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
18 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
18 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
19 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
19 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
20 <a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
20 <a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
21 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
21 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
22 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a> |
22 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a> |
23 help
23 help
24 <br/>
24 <br/>
25 </div>
25 </div>
26
26
27 <div class="title">&nbsp;</div>
27 <div class="title">&nbsp;</div>
28 <table cellspacing="0">
28 <table cellspacing="0">
29 <tr><td colspan="2"><h2><a name="main" href="#topics">Topics</a></h2></td></tr>
29 <tr><td colspan="2"><h2><a name="main" href="#topics">Topics</a></h2></td></tr>
30 {topics % helpentry}
30 {topics % helpentry}
31
31
32 <tr><td colspan="2"><h2><a name="main" href="#main">Main Commands</a></h2></td></tr>
32 <tr><td colspan="2"><h2><a name="main" href="#main">Main Commands</a></h2></td></tr>
33 {earlycommands % helpentry}
33 {earlycommands % helpentry}
34
34
35 <tr><td colspan="2"><h2><a name="other" href="#other">Other Commands</a></h2></td></tr>
35 <tr><td colspan="2"><h2><a name="other" href="#other">Other Commands</a></h2></td></tr>
36 {othercommands % helpentry}
36 {othercommands % helpentry}
37 </table>
37 </table>
38
38
39 {footer}
39 {footer}
@@ -1,26 +1,26 b''
1 {header}
1 {header}
2 <title>Mercurial repositories index</title>
2 <title>Mercurial repositories index</title>
3 </head>
3 </head>
4 <body>
4 <body>
5
5
6 <div class="page_header">
6 <div class="page_header">
7 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a>
7 <a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a>
8 Repositories list
8 Repositories list
9 </div>
9 </div>
10
10
11 <table cellspacing="0">
11 <table cellspacing="0">
12 <tr>
12 <tr>
13 <td><a href="?sort={sort_name}">Name</a></td>
13 <td><a href="?sort={sort_name}">Name</a></td>
14 <td><a href="?sort={sort_description}">Description</a></td>
14 <td><a href="?sort={sort_description}">Description</a></td>
15 <td><a href="?sort={sort_contact}">Contact</a></td>
15 <td><a href="?sort={sort_contact}">Contact</a></td>
16 <td><a href="?sort={sort_lastchange}">Last modified</a></td>
16 <td><a href="?sort={sort_lastchange}">Last modified</a></td>
17 <td>&nbsp;</td>
17 <td>&nbsp;</td>
18 <td>&nbsp;</td>
18 <td>&nbsp;</td>
19 </tr>
19 </tr>
20 {entries%indexentry}
20 {entries%indexentry}
21 </table>
21 </table>
22 <div class="page_footer">
22 <div class="page_footer">
23 {motd}
23 {motd}
24 </div>
24 </div>
25 </body>
25 </body>
26 </html>
26 </html>
@@ -1,41 +1,41 b''
1 {header}
1 {header}
2 <title>{repo|escape}: files</title>
2 <title>{repo|escape}: files</title>
3 <link rel="alternate" type="application/atom+xml"
3 <link rel="alternate" type="application/atom+xml"
4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
5 <link rel="alternate" type="application/rss+xml"
5 <link rel="alternate" type="application/rss+xml"
6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
7 </head>
7 </head>
8 <body>
8 <body>
9
9
10 <div class="page_header">
10 <div class="page_header">
11 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / files
11 <a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / files
12 </div>
12 </div>
13
13
14 <div class="page_nav">
14 <div class="page_nav">
15 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
15 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
16 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
16 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
17 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
17 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
18 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
18 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
19 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
19 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
20 <a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
20 <a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
21 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
21 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
22 files |
22 files |
23 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> {archives%archiveentry} |
23 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> {archives%archiveentry} |
24 <a href="{url}help{sessionvars%urlparameter}">help</a>
24 <a href="{url}help{sessionvars%urlparameter}">help</a>
25 <br/>
25 <br/>
26 </div>
26 </div>
27
27
28 <div class="title">{path|escape} <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}{bookmarks%bookmarktag}</span></div>
28 <div class="title">{path|escape} <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}{bookmarks%bookmarktag}</span></div>
29 <table cellspacing="0">
29 <table cellspacing="0">
30 <tr class="parity{upparity}">
30 <tr class="parity{upparity}">
31 <td style="font-family:monospace">drwxr-xr-x</td>
31 <td style="font-family:monospace">drwxr-xr-x</td>
32 <td style="font-family:monospace"></td>
32 <td style="font-family:monospace"></td>
33 <td style="font-family:monospace"></td>
33 <td style="font-family:monospace"></td>
34 <td><a href="{url}file/{node|short}{up|urlescape}{sessionvars%urlparameter}">[up]</a></td>
34 <td><a href="{url}file/{node|short}{up|urlescape}{sessionvars%urlparameter}">[up]</a></td>
35 <td class="link">&nbsp;</td>
35 <td class="link">&nbsp;</td>
36 </tr>
36 </tr>
37 {dentries%direntry}
37 {dentries%direntry}
38 {fentries%fileentry}
38 {fentries%fileentry}
39 </table>
39 </table>
40
40
41 {footer}
41 {footer}
@@ -1,18 +1,18 b''
1 {header}
1 {header}
2 <title>Mercurial repository not found</title>
2 <title>Mercurial repository not found</title>
3 </head>
3 </head>
4
4
5 <body>
5 <body>
6
6
7 <div class="page_header">
7 <div class="page_header">
8 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a> Not found: {repo|escape}
8 <a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a> Not found: {repo|escape}
9 </div>
9 </div>
10
10
11 <div class="page_body">
11 <div class="page_body">
12 The specified repository "{repo|escape}" is unknown, sorry.
12 The specified repository "{repo|escape}" is unknown, sorry.
13 <br/>
13 <br/>
14 <br/>
14 <br/>
15 Please go back to the <a href="{url}">main repository list page</a>.
15 Please go back to the <a href="{url}">main repository list page</a>.
16 </div>
16 </div>
17
17
18 {footer}
18 {footer}
@@ -1,39 +1,39 b''
1 {header}
1 {header}
2 <title>{repo|escape}: Search</title>
2 <title>{repo|escape}: Search</title>
3 <link rel="alternate" type="application/atom+xml"
3 <link rel="alternate" type="application/atom+xml"
4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
5 <link rel="alternate" type="application/rss+xml"
5 <link rel="alternate" type="application/rss+xml"
6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
7 </head>
7 </head>
8 <body>
8 <body>
9
9
10 <div class="page_header">
10 <div class="page_header">
11 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / search
11 <a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / search
12
12
13 <form action="{url}log">
13 <form action="{url}log">
14 {sessionvars%hiddenformentry}
14 {sessionvars%hiddenformentry}
15 <div class="search">
15 <div class="search">
16 <input type="text" name="rev" value="{query|escape}" />
16 <input type="text" name="rev" value="{query|escape}" />
17 </div>
17 </div>
18 </form>
18 </form>
19 </div>
19 </div>
20
20
21 <div class="page_nav">
21 <div class="page_nav">
22 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
22 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
23 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
23 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
24 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
24 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
25 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
25 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
26 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
26 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
27 <a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
27 <a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
28 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
28 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
29 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry}
29 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry}
30 |
30 |
31 <a href="{url}help{sessionvars%urlparameter}">help</a>
31 <a href="{url}help{sessionvars%urlparameter}">help</a>
32 <br/>
32 <br/>
33 </div>
33 </div>
34
34
35 <div class="title">searching for {query|escape}</div>
35 <div class="title">searching for {query|escape}</div>
36
36
37 {entries}
37 {entries}
38
38
39 {footer}
39 {footer}
@@ -1,42 +1,42 b''
1 {header}
1 {header}
2 <title>{repo|escape}: Shortlog</title>
2 <title>{repo|escape}: Shortlog</title>
3 <link rel="alternate" type="application/atom+xml"
3 <link rel="alternate" type="application/atom+xml"
4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
5 <link rel="alternate" type="application/rss+xml"
5 <link rel="alternate" type="application/rss+xml"
6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
7 </head>
7 </head>
8 <body>
8 <body>
9
9
10 <div class="page_header">
10 <div class="page_header">
11 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / shortlog
11 <a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / shortlog
12 </div>
12 </div>
13
13
14 <form action="{url}log">
14 <form action="{url}log">
15 {sessionvars%hiddenformentry}
15 {sessionvars%hiddenformentry}
16 <div class="search">
16 <div class="search">
17 <input type="text" name="rev" />
17 <input type="text" name="rev" />
18 </div>
18 </div>
19 </form>
19 </form>
20 <div class="page_nav">
20 <div class="page_nav">
21 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
21 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
22 shortlog |
22 shortlog |
23 <a href="{url}log/{rev}{sessionvars%urlparameter}">changelog</a> |
23 <a href="{url}log/{rev}{sessionvars%urlparameter}">changelog</a> |
24 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
24 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
25 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
25 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
26 <a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
26 <a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
27 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
27 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
28 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry} |
28 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry} |
29 <a href="{url}help{sessionvars%urlparameter}">help</a>
29 <a href="{url}help{sessionvars%urlparameter}">help</a>
30 <br/>{changenav%navshort}<br/>
30 <br/>{changenav%navshort}<br/>
31 </div>
31 </div>
32
32
33 <div class="title">&nbsp;</div>
33 <div class="title">&nbsp;</div>
34 <table cellspacing="0">
34 <table cellspacing="0">
35 {entries%shortlogentry}
35 {entries%shortlogentry}
36 </table>
36 </table>
37
37
38 <div class="page_nav">
38 <div class="page_nav">
39 {changenav%navshort}
39 {changenav%navshort}
40 </div>
40 </div>
41
41
42 {footer}
42 {footer}
@@ -1,66 +1,66 b''
1 {header}
1 {header}
2 <title>{repo|escape}: Summary</title>
2 <title>{repo|escape}: Summary</title>
3 <link rel="alternate" type="application/atom+xml"
3 <link rel="alternate" type="application/atom+xml"
4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
5 <link rel="alternate" type="application/rss+xml"
5 <link rel="alternate" type="application/rss+xml"
6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
7 </head>
7 </head>
8 <body>
8 <body>
9
9
10 <div class="page_header">
10 <div class="page_header">
11 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / summary
11 <a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / summary
12
12
13 <form action="{url}log">
13 <form action="{url}log">
14 {sessionvars%hiddenformentry}
14 {sessionvars%hiddenformentry}
15 <div class="search">
15 <div class="search">
16 <input type="text" name="rev" />
16 <input type="text" name="rev" />
17 </div>
17 </div>
18 </form>
18 </form>
19 </div>
19 </div>
20
20
21 <div class="page_nav">
21 <div class="page_nav">
22 summary |
22 summary |
23 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
23 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
24 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
24 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
25 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
25 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
26 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
26 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
27 <a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
27 <a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
28 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
28 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
29 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry} |
29 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry} |
30 <a href="{url}help{sessionvars%urlparameter}">help</a>
30 <a href="{url}help{sessionvars%urlparameter}">help</a>
31 <br/>
31 <br/>
32 </div>
32 </div>
33
33
34 <div class="title">&nbsp;</div>
34 <div class="title">&nbsp;</div>
35 <table cellspacing="0">
35 <table cellspacing="0">
36 <tr><td>description</td><td>{desc}</td></tr>
36 <tr><td>description</td><td>{desc}</td></tr>
37 <tr><td>owner</td><td>{owner|obfuscate}</td></tr>
37 <tr><td>owner</td><td>{owner|obfuscate}</td></tr>
38 <tr><td>last change</td><td>{lastchange|rfc822date}</td></tr>
38 <tr><td>last change</td><td>{lastchange|rfc822date}</td></tr>
39 </table>
39 </table>
40
40
41 <div><a class="title" href="{url}shortlog{sessionvars%urlparameter}">changes</a></div>
41 <div><a class="title" href="{url}shortlog{sessionvars%urlparameter}">changes</a></div>
42 <table cellspacing="0">
42 <table cellspacing="0">
43 {shortlog}
43 {shortlog}
44 <tr class="light"><td colspan="4"><a class="list" href="{url}shortlog{sessionvars%urlparameter}">...</a></td></tr>
44 <tr class="light"><td colspan="4"><a class="list" href="{url}shortlog{sessionvars%urlparameter}">...</a></td></tr>
45 </table>
45 </table>
46
46
47 <div><a class="title" href="{url}tags{sessionvars%urlparameter}">tags</a></div>
47 <div><a class="title" href="{url}tags{sessionvars%urlparameter}">tags</a></div>
48 <table cellspacing="0">
48 <table cellspacing="0">
49 {tags}
49 {tags}
50 <tr class="light"><td colspan="3"><a class="list" href="{url}tags{sessionvars%urlparameter}">...</a></td></tr>
50 <tr class="light"><td colspan="3"><a class="list" href="{url}tags{sessionvars%urlparameter}">...</a></td></tr>
51 </table>
51 </table>
52
52
53 <div><a class="title" href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></div>
53 <div><a class="title" href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></div>
54 <table cellspacing="0">
54 <table cellspacing="0">
55 {bookmarks%bookmarkentry}
55 {bookmarks%bookmarkentry}
56 <tr class="light"><td colspan="3"><a class="list" href="{url}bookmarks{sessionvars%urlparameter}">...</a></td></tr>
56 <tr class="light"><td colspan="3"><a class="list" href="{url}bookmarks{sessionvars%urlparameter}">...</a></td></tr>
57 </table>
57 </table>
58
58
59 <div><a class="title" href="#">branches</a></div>
59 <div><a class="title" href="#">branches</a></div>
60 <table cellspacing="0">
60 <table cellspacing="0">
61 {branches%branchentry}
61 {branches%branchentry}
62 <tr class="light">
62 <tr class="light">
63 <td colspan="4"><a class="list" href="#">...</a></td>
63 <td colspan="4"><a class="list" href="#">...</a></td>
64 </tr>
64 </tr>
65 </table>
65 </table>
66 {footer}
66 {footer}
@@ -1,32 +1,32 b''
1 {header}
1 {header}
2 <title>{repo|escape}: Tags</title>
2 <title>{repo|escape}: Tags</title>
3 <link rel="alternate" type="application/atom+xml"
3 <link rel="alternate" type="application/atom+xml"
4 href="{url}atom-tags" title="Atom feed for {repo|escape}"/>
4 href="{url}atom-tags" title="Atom feed for {repo|escape}"/>
5 <link rel="alternate" type="application/rss+xml"
5 <link rel="alternate" type="application/rss+xml"
6 href="{url}rss-tags" title="RSS feed for {repo|escape}"/>
6 href="{url}rss-tags" title="RSS feed for {repo|escape}"/>
7 </head>
7 </head>
8 <body>
8 <body>
9
9
10 <div class="page_header">
10 <div class="page_header">
11 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / tags
11 <a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / tags
12 </div>
12 </div>
13
13
14 <div class="page_nav">
14 <div class="page_nav">
15 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
15 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
16 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
16 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
17 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
17 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
18 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
18 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
19 tags |
19 tags |
20 <a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
20 <a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
21 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
21 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
22 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a> |
22 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a> |
23 <a href="{url}help{sessionvars%urlparameter}">help</a>
23 <a href="{url}help{sessionvars%urlparameter}">help</a>
24 <br/>
24 <br/>
25 </div>
25 </div>
26
26
27 <div class="title">&nbsp;</div>
27 <div class="title">&nbsp;</div>
28 <table cellspacing="0">
28 <table cellspacing="0">
29 {entries%tagentry}
29 {entries%tagentry}
30 </table>
30 </table>
31
31
32 {footer}
32 {footer}
@@ -1,22 +1,22 b''
1 <div class="page-footer">
1 <div class="page-footer">
2 <p>Mercurial Repository: {repo|escape}</p>
2 <p>Mercurial Repository: {repo|escape}</p>
3 <ul class="rss-logo">
3 <ul class="rss-logo">
4 <li><a href="{url}rss-log">RSS</a></li>
4 <li><a href="{url}rss-log">RSS</a></li>
5 <li><a href="{url}atom-log">Atom</a></li>
5 <li><a href="{url}atom-log">Atom</a></li>
6 </ul>
6 </ul>
7 {motd}
7 {motd}
8 </div>
8 </div>
9
9
10 <div id="powered-by">
10 <div id="powered-by">
11 <p><a href="http://mercurial.selenic.com/" title="Mercurial"><img src="{staticurl}hglogo.png" width=75 height=90 border=0 alt="mercurial"></a></p>
11 <p><a href="{logourl}" title="Mercurial"><img src="{staticurl}hglogo.png" width=75 height=90 border=0 alt="mercurial"></a></p>
12 </div>
12 </div>
13
13
14 <div id="corner-top-left"></div>
14 <div id="corner-top-left"></div>
15 <div id="corner-top-right"></div>
15 <div id="corner-top-right"></div>
16 <div id="corner-bottom-left"></div>
16 <div id="corner-bottom-left"></div>
17 <div id="corner-bottom-right"></div>
17 <div id="corner-bottom-right"></div>
18
18
19 </div>
19 </div>
20
20
21 </body>
21 </body>
22 </html>
22 </html>
@@ -1,39 +1,39 b''
1 {header}
1 {header}
2 <title>{repo|escape}: Mercurial repositories index</title>
2 <title>{repo|escape}: Mercurial repositories index</title>
3 </head>
3 </head>
4
4
5 <body>
5 <body>
6 <div id="container">
6 <div id="container">
7 <div class="page-header">
7 <div class="page-header">
8 <h1>Mercurial Repositories</h1>
8 <h1>Mercurial Repositories</h1>
9 <ul class="page-nav">
9 <ul class="page-nav">
10 </ul>
10 </ul>
11 </div>
11 </div>
12
12
13 <table cellspacing="0">
13 <table cellspacing="0">
14 <tr>
14 <tr>
15 <td><a href="?sort={sort_name}">Name</a></td>
15 <td><a href="?sort={sort_name}">Name</a></td>
16 <td><a href="?sort={sort_description}">Description</a></td>
16 <td><a href="?sort={sort_description}">Description</a></td>
17 <td><a href="?sort={sort_contact}">Contact</a></td>
17 <td><a href="?sort={sort_contact}">Contact</a></td>
18 <td><a href="?sort={sort_lastchange}">Last modified</a></td>
18 <td><a href="?sort={sort_lastchange}">Last modified</a></td>
19 <td>&nbsp;</td>
19 <td>&nbsp;</td>
20 <td>&nbsp;</td>
20 <td>&nbsp;</td>
21 </tr>
21 </tr>
22 {entries%indexentry}
22 {entries%indexentry}
23 </table>
23 </table>
24 <div class="page-footer">
24 <div class="page-footer">
25 {motd}
25 {motd}
26 </div>
26 </div>
27
27
28 <div id="powered-by">
28 <div id="powered-by">
29 <p><a href="http://mercurial.selenic.com/" title="Mercurial"><img src="{staticurl}hglogo.png" width=75 height=90 border=0 alt="mercurial"></a></p>
29 <p><a href="{logourl}" title="Mercurial"><img src="{staticurl}hglogo.png" width=75 height=90 border=0 alt="mercurial"></a></p>
30 </div>
30 </div>
31
31
32 <div id="corner-top-left"></div>
32 <div id="corner-top-left"></div>
33 <div id="corner-top-right"></div>
33 <div id="corner-top-right"></div>
34 <div id="corner-bottom-left"></div>
34 <div id="corner-bottom-left"></div>
35 <div id="corner-bottom-right"></div>
35 <div id="corner-bottom-right"></div>
36
36
37 </div>
37 </div>
38 </body>
38 </body>
39 </html>
39 </html>
@@ -1,49 +1,49 b''
1 {header}
1 {header}
2 <title>{repo|escape}: bookmarks</title>
2 <title>{repo|escape}: bookmarks</title>
3 <link rel="alternate" type="application/atom+xml"
3 <link rel="alternate" type="application/atom+xml"
4 href="{url}atom-bookmarks" title="Atom feed for {repo|escape}: bookmarks" />
4 href="{url}atom-bookmarks" title="Atom feed for {repo|escape}: bookmarks" />
5 <link rel="alternate" type="application/rss+xml"
5 <link rel="alternate" type="application/rss+xml"
6 href="{url}rss-bookmarks" title="RSS feed for {repo|escape}: bookmarks" />
6 href="{url}rss-bookmarks" title="RSS feed for {repo|escape}: bookmarks" />
7 </head>
7 </head>
8 <body>
8 <body>
9
9
10 <div class="container">
10 <div class="container">
11 <div class="menu">
11 <div class="menu">
12 <div class="logo">
12 <div class="logo">
13 <a href="http://mercurial.selenic.com/">
13 <a href="{logourl}">
14 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
14 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
15 </div>
15 </div>
16 <ul>
16 <ul>
17 <li><a href="{url}shortlog{sessionvars%urlparameter}">log</a></li>
17 <li><a href="{url}shortlog{sessionvars%urlparameter}">log</a></li>
18 <li><a href="{url}graph{sessionvars%urlparameter}">graph</a></li>
18 <li><a href="{url}graph{sessionvars%urlparameter}">graph</a></li>
19 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
19 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
20 <li class="active">bookmarks</li>
20 <li class="active">bookmarks</li>
21 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
21 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
22 </ul>
22 </ul>
23 <ul>
23 <ul>
24 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
24 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
25 </ul>
25 </ul>
26 </div>
26 </div>
27
27
28 <div class="main">
28 <div class="main">
29 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
29 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
30 <h3>bookmarks</h3>
30 <h3>bookmarks</h3>
31
31
32 <form class="search" action="{url}log">
32 <form class="search" action="{url}log">
33 {sessionvars%hiddenformentry}
33 {sessionvars%hiddenformentry}
34 <p><input name="rev" id="search1" type="text" size="30" /></p>
34 <p><input name="rev" id="search1" type="text" size="30" /></p>
35 <div id="hint">find changesets by author, revision,
35 <div id="hint">find changesets by author, revision,
36 files, or words in the commit message</div>
36 files, or words in the commit message</div>
37 </form>
37 </form>
38
38
39 <table class="bigtable">
39 <table class="bigtable">
40 <tr>
40 <tr>
41 <th>bookmark</th>
41 <th>bookmark</th>
42 <th>node</th>
42 <th>node</th>
43 </tr>
43 </tr>
44 {entries%bookmarkentry}
44 {entries%bookmarkentry}
45 </table>
45 </table>
46 </div>
46 </div>
47 </div>
47 </div>
48
48
49 {footer}
49 {footer}
@@ -1,60 +1,60 b''
1 {header}
1 {header}
2 <title>{repo|escape}: branches</title>
2 <title>{repo|escape}: branches</title>
3 <link rel="alternate" type="application/atom+xml"
3 <link rel="alternate" type="application/atom+xml"
4 href="{url}atom-tags" title="Atom feed for {repo|escape}: branches" />
4 href="{url}atom-tags" title="Atom feed for {repo|escape}: branches" />
5 <link rel="alternate" type="application/rss+xml"
5 <link rel="alternate" type="application/rss+xml"
6 href="{url}rss-tags" title="RSS feed for {repo|escape}: branches" />
6 href="{url}rss-tags" title="RSS feed for {repo|escape}: branches" />
7 </head>
7 </head>
8 <body>
8 <body>
9
9
10 <div class="container">
10 <div class="container">
11 <div class="menu">
11 <div class="menu">
12 <div class="logo">
12 <div class="logo">
13 <a href="http://mercurial.selenic.com/">
13 <a href="{logourl}">
14 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
14 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
15 </div>
15 </div>
16 <ul>
16 <ul>
17 <li><a href="{url}shortlog{sessionvars%urlparameter}">log</a></li>
17 <li><a href="{url}shortlog{sessionvars%urlparameter}">log</a></li>
18 <li><a href="{url}graph{sessionvars%urlparameter}">graph</a></li>
18 <li><a href="{url}graph{sessionvars%urlparameter}">graph</a></li>
19 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
19 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
20 <li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
20 <li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
21 <li class="active">branches</li>
21 <li class="active">branches</li>
22 </ul>
22 </ul>
23 <ul>
23 <ul>
24 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
24 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
25 </ul>
25 </ul>
26 </div>
26 </div>
27
27
28 <div class="main">
28 <div class="main">
29 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
29 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
30 <h3>branches</h3>
30 <h3>branches</h3>
31
31
32 <form class="search" action="{url}log">
32 <form class="search" action="{url}log">
33 {sessionvars%hiddenformentry}
33 {sessionvars%hiddenformentry}
34 <p><input name="rev" id="search1" type="text" size="30" /></p>
34 <p><input name="rev" id="search1" type="text" size="30" /></p>
35 <div id="hint">find changesets by author, revision,
35 <div id="hint">find changesets by author, revision,
36 files, or words in the commit message</div>
36 files, or words in the commit message</div>
37 </form>
37 </form>
38
38
39 <table class="bigtable">
39 <table class="bigtable">
40 <tr>
40 <tr>
41 <th>branch</th>
41 <th>branch</th>
42 <th>node</th>
42 <th>node</th>
43 </tr>
43 </tr>
44 {entries %
44 {entries %
45 ' <tr class="tagEntry parity{parity}">
45 ' <tr class="tagEntry parity{parity}">
46 <td>
46 <td>
47 <a href="{url}shortlog/{node|short}{sessionvars%urlparameter}" class="{status}">
47 <a href="{url}shortlog/{node|short}{sessionvars%urlparameter}" class="{status}">
48 {branch|escape}
48 {branch|escape}
49 </a>
49 </a>
50 </td>
50 </td>
51 <td class="node">
51 <td class="node">
52 {node|short}
52 {node|short}
53 </td>
53 </td>
54 </tr>'
54 </tr>'
55 }
55 }
56 </table>
56 </table>
57 </div>
57 </div>
58 </div>
58 </div>
59
59
60 {footer}
60 {footer}
@@ -1,75 +1,75 b''
1 {header}
1 {header}
2 <title>{repo|escape}: {node|short}</title>
2 <title>{repo|escape}: {node|short}</title>
3 </head>
3 </head>
4 <body>
4 <body>
5 <div class="container">
5 <div class="container">
6 <div class="menu">
6 <div class="menu">
7 <div class="logo">
7 <div class="logo">
8 <a href="http://mercurial.selenic.com/">
8 <a href="{logourl}">
9 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
9 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
10 </div>
10 </div>
11 <ul>
11 <ul>
12 <li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
12 <li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
13 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
13 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
14 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
14 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
15 <li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
15 <li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
16 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
16 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
17 </ul>
17 </ul>
18 <ul>
18 <ul>
19 <li class="active">changeset</li>
19 <li class="active">changeset</li>
20 <li><a href="{url}raw-rev/{node|short}{sessionvars%urlparameter}">raw</a></li>
20 <li><a href="{url}raw-rev/{node|short}{sessionvars%urlparameter}">raw</a></li>
21 <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">browse</a></li>
21 <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">browse</a></li>
22 </ul>
22 </ul>
23 <ul>
23 <ul>
24 {archives%archiveentry}
24 {archives%archiveentry}
25 </ul>
25 </ul>
26 <ul>
26 <ul>
27 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
27 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
28 </ul>
28 </ul>
29 </div>
29 </div>
30
30
31 <div class="main">
31 <div class="main">
32
32
33 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
33 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
34 <h3>changeset {rev}:{node|short} {changesetbranch%changelogbranchname} {changesettag} {changesetbookmark}</h3>
34 <h3>changeset {rev}:{node|short} {changesetbranch%changelogbranchname} {changesettag} {changesetbookmark}</h3>
35
35
36 <form class="search" action="{url}log">
36 <form class="search" action="{url}log">
37 {sessionvars%hiddenformentry}
37 {sessionvars%hiddenformentry}
38 <p><input name="rev" id="search1" type="text" size="30" /></p>
38 <p><input name="rev" id="search1" type="text" size="30" /></p>
39 <div id="hint">find changesets by author, revision,
39 <div id="hint">find changesets by author, revision,
40 files, or words in the commit message</div>
40 files, or words in the commit message</div>
41 </form>
41 </form>
42
42
43 <div class="description">{desc|strip|escape|nonempty}</div>
43 <div class="description">{desc|strip|escape|nonempty}</div>
44
44
45 <table id="changesetEntry">
45 <table id="changesetEntry">
46 <tr>
46 <tr>
47 <th class="author">author</th>
47 <th class="author">author</th>
48 <td class="author">{author|obfuscate}</td>
48 <td class="author">{author|obfuscate}</td>
49 </tr>
49 </tr>
50 <tr>
50 <tr>
51 <th class="date">date</th>
51 <th class="date">date</th>
52 <td class="date">{date|date} ({date|age})</td></tr>
52 <td class="date">{date|date} ({date|age})</td></tr>
53 <tr>
53 <tr>
54 <th class="author">parents</th>
54 <th class="author">parents</th>
55 <td class="author">{parent%changesetparent}</td>
55 <td class="author">{parent%changesetparent}</td>
56 </tr>
56 </tr>
57 <tr>
57 <tr>
58 <th class="author">children</th>
58 <th class="author">children</th>
59 <td class="author">{child%changesetchild}</td>
59 <td class="author">{child%changesetchild}</td>
60 </tr>
60 </tr>
61 <tr>
61 <tr>
62 <th class="files">files</th>
62 <th class="files">files</th>
63 <td class="files">{files}</td>
63 <td class="files">{files}</td>
64 </tr>
64 </tr>
65 </table>
65 </table>
66
66
67 <div class="overflow">
67 <div class="overflow">
68 <div class="sourcefirst"> line diff</div>
68 <div class="sourcefirst"> line diff</div>
69
69
70 {diff}
70 {diff}
71 </div>
71 </div>
72
72
73 </div>
73 </div>
74 </div>
74 </div>
75 {footer}
75 {footer}
@@ -1,45 +1,45 b''
1 {header}
1 {header}
2 <title>{repo|escape}: error</title>
2 <title>{repo|escape}: error</title>
3 </head>
3 </head>
4 <body>
4 <body>
5
5
6 <div class="container">
6 <div class="container">
7 <div class="menu">
7 <div class="menu">
8 <div class="logo">
8 <div class="logo">
9 <a href="http://mercurial.selenic.com/">
9 <a href="{logourl}">
10 <img src="{staticurl}hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
10 <img src="{staticurl}hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
11 </div>
11 </div>
12 <ul>
12 <ul>
13 <li><a href="{url}shortlog{sessionvars%urlparameter}">log</a></li>
13 <li><a href="{url}shortlog{sessionvars%urlparameter}">log</a></li>
14 <li><a href="{url}graph{sessionvars%urlparameter}">graph</a></li>
14 <li><a href="{url}graph{sessionvars%urlparameter}">graph</a></li>
15 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
15 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
16 <li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
16 <li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
17 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
17 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
18 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
18 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
19 </ul>
19 </ul>
20 </div>
20 </div>
21
21
22 <div class="main">
22 <div class="main">
23
23
24 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
24 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
25 <h3>error</h3>
25 <h3>error</h3>
26
26
27 <form class="search" action="{url}log">
27 <form class="search" action="{url}log">
28 {sessionvars%hiddenformentry}
28 {sessionvars%hiddenformentry}
29 <p><input name="rev" id="search1" type="text" size="30"></p>
29 <p><input name="rev" id="search1" type="text" size="30"></p>
30 <div id="hint">find changesets by author, revision,
30 <div id="hint">find changesets by author, revision,
31 files, or words in the commit message</div>
31 files, or words in the commit message</div>
32 </form>
32 </form>
33
33
34 <div class="description">
34 <div class="description">
35 <p>
35 <p>
36 An error occurred while processing your request:
36 An error occurred while processing your request:
37 </p>
37 </p>
38 <p>
38 <p>
39 {error|escape}
39 {error|escape}
40 </p>
40 </p>
41 </div>
41 </div>
42 </div>
42 </div>
43 </div>
43 </div>
44
44
45 {footer}
45 {footer}
@@ -1,82 +1,82 b''
1 {header}
1 {header}
2 <title>{repo|escape}: {file|escape} annotate</title>
2 <title>{repo|escape}: {file|escape} annotate</title>
3 </head>
3 </head>
4 <body>
4 <body>
5
5
6 <div class="container">
6 <div class="container">
7 <div class="menu">
7 <div class="menu">
8 <div class="logo">
8 <div class="logo">
9 <a href="http://mercurial.selenic.com/">
9 <a href="{logourl}">
10 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
10 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
11 </div>
11 </div>
12 <ul>
12 <ul>
13 <li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
13 <li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
14 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
14 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
15 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
15 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
16 <li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
16 <li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
17 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
17 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
18 </ul>
18 </ul>
19
19
20 <ul>
20 <ul>
21 <li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a></li>
21 <li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a></li>
22 <li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">browse</a></li>
22 <li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">browse</a></li>
23 </ul>
23 </ul>
24 <ul>
24 <ul>
25 <li><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a></li>
25 <li><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a></li>
26 <li><a href="{url}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a></li>
26 <li><a href="{url}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a></li>
27 <li><a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a></li>
27 <li><a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a></li>
28 <li class="active">annotate</li>
28 <li class="active">annotate</li>
29 <li><a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file log</a></li>
29 <li><a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file log</a></li>
30 <li><a href="{url}raw-annotate/{node|short}/{file|urlescape}">raw</a></li>
30 <li><a href="{url}raw-annotate/{node|short}/{file|urlescape}">raw</a></li>
31 </ul>
31 </ul>
32 <ul>
32 <ul>
33 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
33 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
34 </ul>
34 </ul>
35 </div>
35 </div>
36
36
37 <div class="main">
37 <div class="main">
38 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
38 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
39 <h3>annotate {file|escape} @ {rev}:{node|short}</h3>
39 <h3>annotate {file|escape} @ {rev}:{node|short}</h3>
40
40
41 <form class="search" action="{url}log">
41 <form class="search" action="{url}log">
42 {sessionvars%hiddenformentry}
42 {sessionvars%hiddenformentry}
43 <p><input name="rev" id="search1" type="text" size="30" /></p>
43 <p><input name="rev" id="search1" type="text" size="30" /></p>
44 <div id="hint">find changesets by author, revision,
44 <div id="hint">find changesets by author, revision,
45 files, or words in the commit message</div>
45 files, or words in the commit message</div>
46 </form>
46 </form>
47
47
48 <div class="description">{desc|strip|escape|nonempty}</div>
48 <div class="description">{desc|strip|escape|nonempty}</div>
49
49
50 <table id="changesetEntry">
50 <table id="changesetEntry">
51 <tr>
51 <tr>
52 <th class="author">author</th>
52 <th class="author">author</th>
53 <td class="author">{author|obfuscate}</td>
53 <td class="author">{author|obfuscate}</td>
54 </tr>
54 </tr>
55 <tr>
55 <tr>
56 <th class="date">date</th>
56 <th class="date">date</th>
57 <td class="date">{date|date} ({date|age})</td>
57 <td class="date">{date|date} ({date|age})</td>
58 </tr>
58 </tr>
59 <tr>
59 <tr>
60 <th class="author">parents</th>
60 <th class="author">parents</th>
61 <td class="author">{parent%filerevparent}</td>
61 <td class="author">{parent%filerevparent}</td>
62 </tr>
62 </tr>
63 <tr>
63 <tr>
64 <th class="author">children</th>
64 <th class="author">children</th>
65 <td class="author">{child%filerevchild}</td>
65 <td class="author">{child%filerevchild}</td>
66 </tr>
66 </tr>
67 {changesettag}
67 {changesettag}
68 </table>
68 </table>
69
69
70 <div class="overflow">
70 <div class="overflow">
71 <table class="bigtable">
71 <table class="bigtable">
72 <tr>
72 <tr>
73 <th class="annotate">rev</th>
73 <th class="annotate">rev</th>
74 <th class="line">&nbsp;&nbsp;line source</th>
74 <th class="line">&nbsp;&nbsp;line source</th>
75 </tr>
75 </tr>
76 {annotate%annotateline}
76 {annotate%annotateline}
77 </table>
77 </table>
78 </div>
78 </div>
79 </div>
79 </div>
80 </div>
80 </div>
81
81
82 {footer}
82 {footer}
@@ -1,77 +1,77 b''
1 {header}
1 {header}
2 <title>{repo|escape}: {file|escape} diff</title>
2 <title>{repo|escape}: {file|escape} diff</title>
3 </head>
3 </head>
4 <body>
4 <body>
5
5
6 <div class="container">
6 <div class="container">
7 <div class="menu">
7 <div class="menu">
8 <div class="logo">
8 <div class="logo">
9 <a href="http://mercurial.selenic.com/">
9 <a href="{logourl}">
10 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
10 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
11 </div>
11 </div>
12 <ul>
12 <ul>
13 <li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
13 <li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
14 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
14 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
15 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
15 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
16 <li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
16 <li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
17 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
17 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
18 </ul>
18 </ul>
19 <ul>
19 <ul>
20 <li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a></li>
20 <li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a></li>
21 <li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">browse</a></li>
21 <li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">browse</a></li>
22 </ul>
22 </ul>
23 <ul>
23 <ul>
24 <li><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a></li>
24 <li><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a></li>
25 <li><a href="{url}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a></li>
25 <li><a href="{url}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a></li>
26 <li class="active">diff</li>
26 <li class="active">diff</li>
27 <li><a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a></li>
27 <li><a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a></li>
28 <li><a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file log</a></li>
28 <li><a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file log</a></li>
29 <li><a href="{url}raw-file/{node|short}/{file|urlescape}">raw</a></li>
29 <li><a href="{url}raw-file/{node|short}/{file|urlescape}">raw</a></li>
30 </ul>
30 </ul>
31 <ul>
31 <ul>
32 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
32 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
33 </ul>
33 </ul>
34 </div>
34 </div>
35
35
36 <div class="main">
36 <div class="main">
37 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
37 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
38 <h3>diff {file|escape} @ {rev}:{node|short}</h3>
38 <h3>diff {file|escape} @ {rev}:{node|short}</h3>
39
39
40 <form class="search" action="{url}log">
40 <form class="search" action="{url}log">
41 <p>{sessionvars%hiddenformentry}</p>
41 <p>{sessionvars%hiddenformentry}</p>
42 <p><input name="rev" id="search1" type="text" size="30" /></p>
42 <p><input name="rev" id="search1" type="text" size="30" /></p>
43 <div id="hint">find changesets by author, revision,
43 <div id="hint">find changesets by author, revision,
44 files, or words in the commit message</div>
44 files, or words in the commit message</div>
45 </form>
45 </form>
46
46
47 <div class="description">{desc|strip|escape|nonempty}</div>
47 <div class="description">{desc|strip|escape|nonempty}</div>
48
48
49 <table id="changesetEntry">
49 <table id="changesetEntry">
50 <tr>
50 <tr>
51 <th>author</th>
51 <th>author</th>
52 <td>{author|obfuscate}</td>
52 <td>{author|obfuscate}</td>
53 </tr>
53 </tr>
54 <tr>
54 <tr>
55 <th>date</th>
55 <th>date</th>
56 <td>{date|date} ({date|age})</td>
56 <td>{date|date} ({date|age})</td>
57 </tr>
57 </tr>
58 <tr>
58 <tr>
59 <th>parents</th>
59 <th>parents</th>
60 <td>{parent%filerevparent}</td>
60 <td>{parent%filerevparent}</td>
61 </tr>
61 </tr>
62 <tr>
62 <tr>
63 <th>children</th>
63 <th>children</th>
64 <td>{child%filerevchild}</td>
64 <td>{child%filerevchild}</td>
65 </tr>
65 </tr>
66 {changesettag}
66 {changesettag}
67 </table>
67 </table>
68
68
69 <div class="overflow">
69 <div class="overflow">
70 <div class="sourcefirst"> line diff</div>
70 <div class="sourcefirst"> line diff</div>
71
71
72 {diff}
72 {diff}
73 </div>
73 </div>
74 </div>
74 </div>
75 </div>
75 </div>
76
76
77 {footer}
77 {footer}
@@ -1,73 +1,73 b''
1 {header}
1 {header}
2 <title>{repo|escape}: {file|escape} history</title>
2 <title>{repo|escape}: {file|escape} history</title>
3 <link rel="alternate" type="application/atom+xml"
3 <link rel="alternate" type="application/atom+xml"
4 href="{url}atom-log/tip/{file|urlescape}" title="Atom feed for {repo|escape}:{file}" />
4 href="{url}atom-log/tip/{file|urlescape}" title="Atom feed for {repo|escape}:{file}" />
5 <link rel="alternate" type="application/rss+xml"
5 <link rel="alternate" type="application/rss+xml"
6 href="{url}rss-log/tip/{file|urlescape}" title="RSS feed for {repo|escape}:{file}" />
6 href="{url}rss-log/tip/{file|urlescape}" title="RSS feed for {repo|escape}:{file}" />
7 </head>
7 </head>
8 <body>
8 <body>
9
9
10 <div class="container">
10 <div class="container">
11 <div class="menu">
11 <div class="menu">
12 <div class="logo">
12 <div class="logo">
13 <a href="http://mercurial.selenic.com/">
13 <a href="{logourl}">
14 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
14 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
15 </div>
15 </div>
16 <ul>
16 <ul>
17 <li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
17 <li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
18 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
18 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
19 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
19 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
20 <li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
20 <li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
21 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
21 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
22 </ul>
22 </ul>
23 <ul>
23 <ul>
24 <li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a></li>
24 <li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a></li>
25 <li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">browse</a></li>
25 <li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">browse</a></li>
26 </ul>
26 </ul>
27 <ul>
27 <ul>
28 <li><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a></li>
28 <li><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a></li>
29 <li><a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a></li>
29 <li><a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a></li>
30 <li><a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a></li>
30 <li><a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a></li>
31 <li class="active">file log</li>
31 <li class="active">file log</li>
32 <li><a href="{url}raw-file/{node|short}/{file|urlescape}">raw</a></li>
32 <li><a href="{url}raw-file/{node|short}/{file|urlescape}">raw</a></li>
33 </ul>
33 </ul>
34 <ul>
34 <ul>
35 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
35 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
36 </ul>
36 </ul>
37 </div>
37 </div>
38
38
39 <div class="main">
39 <div class="main">
40 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
40 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
41 <h3>log {file|escape}</h3>
41 <h3>log {file|escape}</h3>
42
42
43 <form class="search" action="{url}log">
43 <form class="search" action="{url}log">
44 {sessionvars%hiddenformentry}
44 {sessionvars%hiddenformentry}
45 <p><input name="rev" id="search1" type="text" size="30" /></p>
45 <p><input name="rev" id="search1" type="text" size="30" /></p>
46 <div id="hint">find changesets by author, revision,
46 <div id="hint">find changesets by author, revision,
47 files, or words in the commit message</div>
47 files, or words in the commit message</div>
48 </form>
48 </form>
49
49
50 <div class="navigate">
50 <div class="navigate">
51 <a href="{url}log/{node|short}/{file|urlescape}{lessvars%urlparameter}">less</a>
51 <a href="{url}log/{node|short}/{file|urlescape}{lessvars%urlparameter}">less</a>
52 <a href="{url}log/{node|short}/{file|urlescape}{morevars%urlparameter}">more</a>
52 <a href="{url}log/{node|short}/{file|urlescape}{morevars%urlparameter}">more</a>
53 | {nav%filenav}</div>
53 | {nav%filenav}</div>
54
54
55 <table class="bigtable">
55 <table class="bigtable">
56 <tr>
56 <tr>
57 <th class="age">age</th>
57 <th class="age">age</th>
58 <th class="author">author</th>
58 <th class="author">author</th>
59 <th class="description">description</th>
59 <th class="description">description</th>
60 </tr>
60 </tr>
61 {entries%filelogentry}
61 {entries%filelogentry}
62 </table>
62 </table>
63
63
64 <div class="navigate">
64 <div class="navigate">
65 <a href="{url}log/{node|short}/{file|urlescape}{lessvars%urlparameter}">less</a>
65 <a href="{url}log/{node|short}/{file|urlescape}{lessvars%urlparameter}">less</a>
66 <a href="{url}log/{node|short}/{file|urlescape}{morevars%urlparameter}">more</a>
66 <a href="{url}log/{node|short}/{file|urlescape}{morevars%urlparameter}">more</a>
67 | {nav%filenav}
67 | {nav%filenav}
68 </div>
68 </div>
69
69
70 </div>
70 </div>
71 </div>
71 </div>
72
72
73 {footer}
73 {footer}
@@ -1,76 +1,76 b''
1 {header}
1 {header}
2 <title>{repo|escape}: {node|short} {file|escape}</title>
2 <title>{repo|escape}: {node|short} {file|escape}</title>
3 </head>
3 </head>
4 <body>
4 <body>
5
5
6 <div class="container">
6 <div class="container">
7 <div class="menu">
7 <div class="menu">
8 <div class="logo">
8 <div class="logo">
9 <a href="http://mercurial.selenic.com/">
9 <a href="{logourl}">
10 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
10 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
11 </div>
11 </div>
12 <ul>
12 <ul>
13 <li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
13 <li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
14 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
14 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
15 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
15 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
16 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
16 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
17 </ul>
17 </ul>
18 <ul>
18 <ul>
19 <li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a></li>
19 <li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a></li>
20 <li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">browse</a></li>
20 <li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">browse</a></li>
21 </ul>
21 </ul>
22 <ul>
22 <ul>
23 <li class="active">file</li>
23 <li class="active">file</li>
24 <li><a href="{url}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a></li>
24 <li><a href="{url}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a></li>
25 <li><a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a></li>
25 <li><a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a></li>
26 <li><a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a></li>
26 <li><a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a></li>
27 <li><a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file log</a></li>
27 <li><a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file log</a></li>
28 <li><a href="{url}raw-file/{node|short}/{file|urlescape}">raw</a></li>
28 <li><a href="{url}raw-file/{node|short}/{file|urlescape}">raw</a></li>
29 </ul>
29 </ul>
30 <ul>
30 <ul>
31 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
31 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
32 </ul>
32 </ul>
33 </div>
33 </div>
34
34
35 <div class="main">
35 <div class="main">
36 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
36 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
37 <h3>view {file|escape} @ {rev}:{node|short}</h3>
37 <h3>view {file|escape} @ {rev}:{node|short}</h3>
38
38
39 <form class="search" action="{url}log">
39 <form class="search" action="{url}log">
40 {sessionvars%hiddenformentry}
40 {sessionvars%hiddenformentry}
41 <p><input name="rev" id="search1" type="text" size="30" /></p>
41 <p><input name="rev" id="search1" type="text" size="30" /></p>
42 <div id="hint">find changesets by author, revision,
42 <div id="hint">find changesets by author, revision,
43 files, or words in the commit message</div>
43 files, or words in the commit message</div>
44 </form>
44 </form>
45
45
46 <div class="description">{desc|strip|escape|nonempty}</div>
46 <div class="description">{desc|strip|escape|nonempty}</div>
47
47
48 <table id="changesetEntry">
48 <table id="changesetEntry">
49 <tr>
49 <tr>
50 <th class="author">author</th>
50 <th class="author">author</th>
51 <td class="author">{author|obfuscate}</td>
51 <td class="author">{author|obfuscate}</td>
52 </tr>
52 </tr>
53 <tr>
53 <tr>
54 <th class="date">date</th>
54 <th class="date">date</th>
55 <td class="date">{date|date} ({date|age})</td>
55 <td class="date">{date|date} ({date|age})</td>
56 </tr>
56 </tr>
57 <tr>
57 <tr>
58 <th class="author">parents</th>
58 <th class="author">parents</th>
59 <td class="author">{parent%filerevparent}</td>
59 <td class="author">{parent%filerevparent}</td>
60 </tr>
60 </tr>
61 <tr>
61 <tr>
62 <th class="author">children</th>
62 <th class="author">children</th>
63 <td class="author">{child%filerevchild}</td>
63 <td class="author">{child%filerevchild}</td>
64 </tr>
64 </tr>
65 {changesettag}
65 {changesettag}
66 </table>
66 </table>
67
67
68 <div class="overflow">
68 <div class="overflow">
69 <div class="sourcefirst"> line source</div>
69 <div class="sourcefirst"> line source</div>
70 {text%fileline}
70 {text%fileline}
71 <div class="sourcelast"></div>
71 <div class="sourcelast"></div>
72 </div>
72 </div>
73 </div>
73 </div>
74 </div>
74 </div>
75
75
76 {footer}
76 {footer}
@@ -1,142 +1,142 b''
1 {header}
1 {header}
2 <title>{repo|escape}: revision graph</title>
2 <title>{repo|escape}: revision graph</title>
3 <link rel="alternate" type="application/atom+xml"
3 <link rel="alternate" type="application/atom+xml"
4 href="{url}atom-log" title="Atom feed for {repo|escape}: log" />
4 href="{url}atom-log" title="Atom feed for {repo|escape}: log" />
5 <link rel="alternate" type="application/rss+xml"
5 <link rel="alternate" type="application/rss+xml"
6 href="{url}rss-log" title="RSS feed for {repo|escape}: log" />
6 href="{url}rss-log" title="RSS feed for {repo|escape}: log" />
7 <!--[if IE]><script type="text/javascript" src="{staticurl}excanvas.js"></script><![endif]-->
7 <!--[if IE]><script type="text/javascript" src="{staticurl}excanvas.js"></script><![endif]-->
8 </head>
8 </head>
9 <body>
9 <body>
10
10
11 <div class="container">
11 <div class="container">
12 <div class="menu">
12 <div class="menu">
13 <div class="logo">
13 <div class="logo">
14 <a href="http://mercurial.selenic.com/">
14 <a href="{logourl}">
15 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
15 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
16 </div>
16 </div>
17 <ul>
17 <ul>
18 <li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
18 <li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
19 <li class="active">graph</li>
19 <li class="active">graph</li>
20 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
20 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
21 <li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
21 <li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
22 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
22 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
23 </ul>
23 </ul>
24 <ul>
24 <ul>
25 <li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a></li>
25 <li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a></li>
26 <li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">browse</a></li>
26 <li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">browse</a></li>
27 </ul>
27 </ul>
28 <ul>
28 <ul>
29 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
29 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
30 </ul>
30 </ul>
31 </div>
31 </div>
32
32
33 <div class="main">
33 <div class="main">
34 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
34 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
35 <h3>graph</h3>
35 <h3>graph</h3>
36
36
37 <form class="search" action="{url}log">
37 <form class="search" action="{url}log">
38 {sessionvars%hiddenformentry}
38 {sessionvars%hiddenformentry}
39 <p><input name="rev" id="search1" type="text" size="30" /></p>
39 <p><input name="rev" id="search1" type="text" size="30" /></p>
40 <div id="hint">find changesets by author, revision,
40 <div id="hint">find changesets by author, revision,
41 files, or words in the commit message</div>
41 files, or words in the commit message</div>
42 </form>
42 </form>
43
43
44 <div class="navigate">
44 <div class="navigate">
45 <a href="{url}graph/{rev}{lessvars%urlparameter}">less</a>
45 <a href="{url}graph/{rev}{lessvars%urlparameter}">less</a>
46 <a href="{url}graph/{rev}{morevars%urlparameter}">more</a>
46 <a href="{url}graph/{rev}{morevars%urlparameter}">more</a>
47 | rev {rev}: {changenav%navgraph}
47 | rev {rev}: {changenav%navgraph}
48 </div>
48 </div>
49
49
50 <noscript><p>The revision graph only works with JavaScript-enabled browsers.</p></noscript>
50 <noscript><p>The revision graph only works with JavaScript-enabled browsers.</p></noscript>
51
51
52 <div id="wrapper">
52 <div id="wrapper">
53 <ul id="nodebgs"></ul>
53 <ul id="nodebgs"></ul>
54 <canvas id="graph" width="480" height="{canvasheight}"></canvas>
54 <canvas id="graph" width="480" height="{canvasheight}"></canvas>
55 <ul id="graphnodes"></ul>
55 <ul id="graphnodes"></ul>
56 </div>
56 </div>
57
57
58 <script type="text/javascript" src="{staticurl}graph.js"></script>
58 <script type="text/javascript" src="{staticurl}graph.js"></script>
59 <script type="text/javascript">
59 <script type="text/javascript">
60 <!-- hide script content
60 <!-- hide script content
61
61
62 var data = {jsdata|json};
62 var data = {jsdata|json};
63 var graph = new Graph();
63 var graph = new Graph();
64 graph.scale({bg_height});
64 graph.scale({bg_height});
65
65
66 graph.edge = function(x0, y0, x1, y1, color) \{
66 graph.edge = function(x0, y0, x1, y1, color) \{
67
67
68 this.setColor(color, 0.0, 0.65);
68 this.setColor(color, 0.0, 0.65);
69 this.ctx.beginPath();
69 this.ctx.beginPath();
70 this.ctx.moveTo(x0, y0);
70 this.ctx.moveTo(x0, y0);
71 this.ctx.lineTo(x1, y1);
71 this.ctx.lineTo(x1, y1);
72 this.ctx.stroke();
72 this.ctx.stroke();
73
73
74 }
74 }
75
75
76 var revlink = '<li style="_STYLE"><span class="desc">';
76 var revlink = '<li style="_STYLE"><span class="desc">';
77 revlink += '<a href="{url}rev/_NODEID{sessionvars%urlparameter}" title="_NODEID">_DESC</a>';
77 revlink += '<a href="{url}rev/_NODEID{sessionvars%urlparameter}" title="_NODEID">_DESC</a>';
78 revlink += '</span>_TAGS<span class="info">_DATE, by _USER</span></li>';
78 revlink += '</span>_TAGS<span class="info">_DATE, by _USER</span></li>';
79
79
80 graph.vertex = function(x, y, color, parity, cur) \{
80 graph.vertex = function(x, y, color, parity, cur) \{
81
81
82 this.ctx.beginPath();
82 this.ctx.beginPath();
83 color = this.setColor(color, 0.25, 0.75);
83 color = this.setColor(color, 0.25, 0.75);
84 this.ctx.arc(x, y, radius, 0, Math.PI * 2, true);
84 this.ctx.arc(x, y, radius, 0, Math.PI * 2, true);
85 this.ctx.fill();
85 this.ctx.fill();
86
86
87 var bg = '<li class="bg parity' + parity + '"></li>';
87 var bg = '<li class="bg parity' + parity + '"></li>';
88 var left = (this.columns + 1) * this.bg_height;
88 var left = (this.columns + 1) * this.bg_height;
89 var nstyle = 'padding-left: ' + left + 'px;';
89 var nstyle = 'padding-left: ' + left + 'px;';
90 var item = revlink.replace(/_STYLE/, nstyle);
90 var item = revlink.replace(/_STYLE/, nstyle);
91 item = item.replace(/_PARITY/, 'parity' + parity);
91 item = item.replace(/_PARITY/, 'parity' + parity);
92 item = item.replace(/_NODEID/, cur[0]);
92 item = item.replace(/_NODEID/, cur[0]);
93 item = item.replace(/_NODEID/, cur[0]);
93 item = item.replace(/_NODEID/, cur[0]);
94 item = item.replace(/_DESC/, cur[3]);
94 item = item.replace(/_DESC/, cur[3]);
95 item = item.replace(/_USER/, cur[4]);
95 item = item.replace(/_USER/, cur[4]);
96 item = item.replace(/_DATE/, cur[5]);
96 item = item.replace(/_DATE/, cur[5]);
97
97
98 var tagspan = '';
98 var tagspan = '';
99 if (cur[7].length || (cur[6][0] != 'default' || cur[6][1])) \{
99 if (cur[7].length || (cur[6][0] != 'default' || cur[6][1])) \{
100 tagspan = '<span class="logtags">';
100 tagspan = '<span class="logtags">';
101 if (cur[6][1]) \{
101 if (cur[6][1]) \{
102 tagspan += '<span class="branchhead" title="' + cur[6][0] + '">';
102 tagspan += '<span class="branchhead" title="' + cur[6][0] + '">';
103 tagspan += cur[6][0] + '</span> ';
103 tagspan += cur[6][0] + '</span> ';
104 } else if (!cur[6][1] && cur[6][0] != 'default') \{
104 } else if (!cur[6][1] && cur[6][0] != 'default') \{
105 tagspan += '<span class="branchname" title="' + cur[6][0] + '">';
105 tagspan += '<span class="branchname" title="' + cur[6][0] + '">';
106 tagspan += cur[6][0] + '</span> ';
106 tagspan += cur[6][0] + '</span> ';
107 }
107 }
108 if (cur[7].length) \{
108 if (cur[7].length) \{
109 for (var t in cur[7]) \{
109 for (var t in cur[7]) \{
110 var tag = cur[7][t];
110 var tag = cur[7][t];
111 tagspan += '<span class="tag">' + tag + '</span> ';
111 tagspan += '<span class="tag">' + tag + '</span> ';
112 }
112 }
113 }
113 }
114 if (cur[8].length) \{
114 if (cur[8].length) \{
115 for (var b in cur[8]) \{
115 for (var b in cur[8]) \{
116 var bookmark = cur[8][b];
116 var bookmark = cur[8][b];
117 tagspan += '<span class="tag">' + bookmark + '</span> ';
117 tagspan += '<span class="tag">' + bookmark + '</span> ';
118 }
118 }
119 }
119 }
120 tagspan += '</span>';
120 tagspan += '</span>';
121 }
121 }
122
122
123 item = item.replace(/_TAGS/, tagspan);
123 item = item.replace(/_TAGS/, tagspan);
124 return [bg, item];
124 return [bg, item];
125
125
126 }
126 }
127
127
128 graph.render(data);
128 graph.render(data);
129
129
130 // stop hiding script -->
130 // stop hiding script -->
131 </script>
131 </script>
132
132
133 <div class="navigate">
133 <div class="navigate">
134 <a href="{url}graph/{rev}{lessvars%urlparameter}">less</a>
134 <a href="{url}graph/{rev}{lessvars%urlparameter}">less</a>
135 <a href="{url}graph/{rev}{morevars%urlparameter}">more</a>
135 <a href="{url}graph/{rev}{morevars%urlparameter}">more</a>
136 | rev {rev}: {changenav%navgraph}
136 | rev {rev}: {changenav%navgraph}
137 </div>
137 </div>
138
138
139 </div>
139 </div>
140 </div>
140 </div>
141
141
142 {footer}
142 {footer}
@@ -1,44 +1,44 b''
1 {header}
1 {header}
2 <title>Help: {topic}</title>
2 <title>Help: {topic}</title>
3 <link rel="alternate" type="application/atom+xml"
3 <link rel="alternate" type="application/atom+xml"
4 href="{url}atom-tags" title="Atom feed for {repo|escape}" />
4 href="{url}atom-tags" title="Atom feed for {repo|escape}" />
5 <link rel="alternate" type="application/rss+xml"
5 <link rel="alternate" type="application/rss+xml"
6 href="{url}rss-tags" title="RSS feed for {repo|escape}" />
6 href="{url}rss-tags" title="RSS feed for {repo|escape}" />
7 </head>
7 </head>
8 <body>
8 <body>
9
9
10 <div class="container">
10 <div class="container">
11 <div class="menu">
11 <div class="menu">
12 <div class="logo">
12 <div class="logo">
13 <a href="http://mercurial.selenic.com/">
13 <a href="{logourl}">
14 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
14 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
15 </div>
15 </div>
16 <ul>
16 <ul>
17 <li><a href="{url}shortlog{sessionvars%urlparameter}">log</a></li>
17 <li><a href="{url}shortlog{sessionvars%urlparameter}">log</a></li>
18 <li><a href="{url}graph{sessionvars%urlparameter}">graph</a></li>
18 <li><a href="{url}graph{sessionvars%urlparameter}">graph</a></li>
19 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
19 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
20 <li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
20 <li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
21 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
21 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
22 </ul>
22 </ul>
23 <ul>
23 <ul>
24 <li class="active">help</li>
24 <li class="active">help</li>
25 </ul>
25 </ul>
26 </div>
26 </div>
27
27
28 <div class="main">
28 <div class="main">
29 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
29 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
30 <h3>Help: {topic}</h3>
30 <h3>Help: {topic}</h3>
31
31
32 <form class="search" action="{url}log">
32 <form class="search" action="{url}log">
33 {sessionvars%hiddenformentry}
33 {sessionvars%hiddenformentry}
34 <p><input name="rev" id="search1" type="text" size="30" /></p>
34 <p><input name="rev" id="search1" type="text" size="30" /></p>
35 <div id="hint">find changesets by author, revision,
35 <div id="hint">find changesets by author, revision,
36 files, or words in the commit message</div>
36 files, or words in the commit message</div>
37 </form>
37 </form>
38 <pre>
38 <pre>
39 {doc|escape}
39 {doc|escape}
40 </pre>
40 </pre>
41 </div>
41 </div>
42 </div>
42 </div>
43
43
44 {footer}
44 {footer}
@@ -1,49 +1,49 b''
1 {header}
1 {header}
2 <title>Help: {title}</title>
2 <title>Help: {title}</title>
3 <link rel="alternate" type="application/atom+xml"
3 <link rel="alternate" type="application/atom+xml"
4 href="{url}atom-tags" title="Atom feed for {repo|escape}" />
4 href="{url}atom-tags" title="Atom feed for {repo|escape}" />
5 <link rel="alternate" type="application/rss+xml"
5 <link rel="alternate" type="application/rss+xml"
6 href="{url}rss-tags" title="RSS feed for {repo|escape}" />
6 href="{url}rss-tags" title="RSS feed for {repo|escape}" />
7 </head>
7 </head>
8 <body>
8 <body>
9
9
10 <div class="container">
10 <div class="container">
11 <div class="menu">
11 <div class="menu">
12 <div class="logo">
12 <div class="logo">
13 <a href="http://mercurial.selenic.com/">
13 <a href="{logourl}">
14 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
14 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
15 </div>
15 </div>
16 <ul>
16 <ul>
17 <li><a href="{url}shortlog{sessionvars%urlparameter}">log</a></li>
17 <li><a href="{url}shortlog{sessionvars%urlparameter}">log</a></li>
18 <li><a href="{url}graph{sessionvars%urlparameter}">graph</a></li>
18 <li><a href="{url}graph{sessionvars%urlparameter}">graph</a></li>
19 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
19 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
20 <li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
20 <li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
21 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
21 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
22 </ul>
22 </ul>
23 <ul>
23 <ul>
24 <li class="active">help</li>
24 <li class="active">help</li>
25 </ul>
25 </ul>
26 </div>
26 </div>
27
27
28 <div class="main">
28 <div class="main">
29 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
29 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
30 <form class="search" action="{url}log">
30 <form class="search" action="{url}log">
31 {sessionvars%hiddenformentry}
31 {sessionvars%hiddenformentry}
32 <p><input name="rev" id="search1" type="text" size="30" /></p>
32 <p><input name="rev" id="search1" type="text" size="30" /></p>
33 <div id="hint">find changesets by author, revision,
33 <div id="hint">find changesets by author, revision,
34 files, or words in the commit message</div>
34 files, or words in the commit message</div>
35 </form>
35 </form>
36 <table class="bigtable">
36 <table class="bigtable">
37 <tr><td colspan="2"><h2><a name="main" href="#topics">Topics</a></h2></td></tr>
37 <tr><td colspan="2"><h2><a name="main" href="#topics">Topics</a></h2></td></tr>
38 {topics % helpentry}
38 {topics % helpentry}
39
39
40 <tr><td colspan="2"><h2><a name="main" href="#main">Main Commands</a></h2></td></tr>
40 <tr><td colspan="2"><h2><a name="main" href="#main">Main Commands</a></h2></td></tr>
41 {earlycommands % helpentry}
41 {earlycommands % helpentry}
42
42
43 <tr><td colspan="2"><h2><a name="other" href="#other">Other Commands</a></h2></td></tr>
43 <tr><td colspan="2"><h2><a name="other" href="#other">Other Commands</a></h2></td></tr>
44 {othercommands % helpentry}
44 {othercommands % helpentry}
45 </table>
45 </table>
46 </div>
46 </div>
47 </div>
47 </div>
48
48
49 {footer}
49 {footer}
@@ -1,26 +1,26 b''
1 {header}
1 {header}
2 <title>Mercurial repositories index</title>
2 <title>Mercurial repositories index</title>
3 </head>
3 </head>
4 <body>
4 <body>
5
5
6 <div class="container">
6 <div class="container">
7 <div class="menu">
7 <div class="menu">
8 <a href="http://mercurial.selenic.com/">
8 <a href="{logourl}">
9 <img src="{staticurl}hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
9 <img src="{staticurl}hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
10 </div>
10 </div>
11 <div class="main">
11 <div class="main">
12 <h2>Mercurial Repositories</h2>
12 <h2>Mercurial Repositories</h2>
13
13
14 <table class="bigtable">
14 <table class="bigtable">
15 <tr>
15 <tr>
16 <th><a href="?sort={sort_name}">Name</a></th>
16 <th><a href="?sort={sort_name}">Name</a></th>
17 <th><a href="?sort={sort_description}">Description</a></th>
17 <th><a href="?sort={sort_description}">Description</a></th>
18 <th><a href="?sort={sort_contact}">Contact</a></th>
18 <th><a href="?sort={sort_contact}">Contact</a></th>
19 <th><a href="?sort={sort_lastchange}">Last modified</a></th>
19 <th><a href="?sort={sort_lastchange}">Last modified</a></th>
20 <th>&nbsp;</th>
20 <th>&nbsp;</th>
21 </tr>
21 </tr>
22 {entries%indexentry}
22 {entries%indexentry}
23 </table>
23 </table>
24 </div>
24 </div>
25 </div>
25 </div>
26 {footer}
26 {footer}
@@ -1,58 +1,58 b''
1 {header}
1 {header}
2 <title>{repo|escape}: {node|short} {path|escape}</title>
2 <title>{repo|escape}: {node|short} {path|escape}</title>
3 </head>
3 </head>
4 <body>
4 <body>
5
5
6 <div class="container">
6 <div class="container">
7 <div class="menu">
7 <div class="menu">
8 <div class="logo">
8 <div class="logo">
9 <a href="http://mercurial.selenic.com/">
9 <a href="{logourl}">
10 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
10 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
11 </div>
11 </div>
12 <ul>
12 <ul>
13 <li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
13 <li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
14 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
14 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
15 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
15 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
16 <li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
16 <li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
17 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
17 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
18 </ul>
18 </ul>
19 <ul>
19 <ul>
20 <li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a></li>
20 <li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a></li>
21 <li class="active">browse</li>
21 <li class="active">browse</li>
22 </ul>
22 </ul>
23 <ul>
23 <ul>
24 {archives%archiveentry}
24 {archives%archiveentry}
25 </ul>
25 </ul>
26 <ul>
26 <ul>
27 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
27 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
28 </ul>
28 </ul>
29 </div>
29 </div>
30
30
31 <div class="main">
31 <div class="main">
32 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
32 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
33 <h3>directory {path|escape} @ {rev}:{node|short} {tags%changelogtag}</h3>
33 <h3>directory {path|escape} @ {rev}:{node|short} {tags%changelogtag}</h3>
34
34
35 <form class="search" action="{url}log">
35 <form class="search" action="{url}log">
36 {sessionvars%hiddenformentry}
36 {sessionvars%hiddenformentry}
37 <p><input name="rev" id="search1" type="text" size="30" /></p>
37 <p><input name="rev" id="search1" type="text" size="30" /></p>
38 <div id="hint">find changesets by author, revision,
38 <div id="hint">find changesets by author, revision,
39 files, or words in the commit message</div>
39 files, or words in the commit message</div>
40 </form>
40 </form>
41
41
42 <table class="bigtable">
42 <table class="bigtable">
43 <tr>
43 <tr>
44 <th class="name">name</th>
44 <th class="name">name</th>
45 <th class="size">size</th>
45 <th class="size">size</th>
46 <th class="permissions">permissions</th>
46 <th class="permissions">permissions</th>
47 </tr>
47 </tr>
48 <tr class="fileline parity{upparity}">
48 <tr class="fileline parity{upparity}">
49 <td class="name"><a href="{url}file/{node|short}{up|urlescape}{sessionvars%urlparameter}">[up]</a></td>
49 <td class="name"><a href="{url}file/{node|short}{up|urlescape}{sessionvars%urlparameter}">[up]</a></td>
50 <td class="size"></td>
50 <td class="size"></td>
51 <td class="permissions">drwxr-xr-x</td>
51 <td class="permissions">drwxr-xr-x</td>
52 </tr>
52 </tr>
53 {dentries%direntry}
53 {dentries%direntry}
54 {fentries%fileentry}
54 {fentries%fileentry}
55 </table>
55 </table>
56 </div>
56 </div>
57 </div>
57 </div>
58 {footer}
58 {footer}
@@ -1,55 +1,55 b''
1 {header}
1 {header}
2 <title>{repo|escape}: searching for {query|escape}</title>
2 <title>{repo|escape}: searching for {query|escape}</title>
3 </head>
3 </head>
4 <body>
4 <body>
5
5
6 <div class="container">
6 <div class="container">
7 <div class="menu">
7 <div class="menu">
8 <div class="logo">
8 <div class="logo">
9 <a href="http://mercurial.selenic.com/">
9 <a href="{logourl}">
10 <img src="{staticurl}hglogo.png" width=75 height=90 border=0 alt="mercurial"></a>
10 <img src="{staticurl}hglogo.png" width=75 height=90 border=0 alt="mercurial"></a>
11 </div>
11 </div>
12 <ul>
12 <ul>
13 <li><a href="{url}shortlog{sessionvars%urlparameter}">log</a></li>
13 <li><a href="{url}shortlog{sessionvars%urlparameter}">log</a></li>
14 <li><a href="{url}graph{sessionvars%urlparameter}">graph</a></li>
14 <li><a href="{url}graph{sessionvars%urlparameter}">graph</a></li>
15 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
15 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
16 <li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
16 <li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
17 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
17 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
18 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
18 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
19 </ul>
19 </ul>
20 </div>
20 </div>
21
21
22 <div class="main">
22 <div class="main">
23 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
23 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
24 <h3>searching for '{query|escape}'</h3>
24 <h3>searching for '{query|escape}'</h3>
25
25
26 <form class="search" action="{url}log">
26 <form class="search" action="{url}log">
27 {sessionvars%hiddenformentry}
27 {sessionvars%hiddenformentry}
28 <p><input name="rev" id="search1" type="text" size="30"></p>
28 <p><input name="rev" id="search1" type="text" size="30"></p>
29 <div id="hint">find changesets by author, revision,
29 <div id="hint">find changesets by author, revision,
30 files, or words in the commit message</div>
30 files, or words in the commit message</div>
31 </form>
31 </form>
32
32
33 <div class="navigate">
33 <div class="navigate">
34 <a href="{url}search/{lessvars%urlparameter}">less</a>
34 <a href="{url}search/{lessvars%urlparameter}">less</a>
35 <a href="{url}search/{morevars%urlparameter}">more</a>
35 <a href="{url}search/{morevars%urlparameter}">more</a>
36 </div>
36 </div>
37
37
38 <table class="bigtable">
38 <table class="bigtable">
39 <tr>
39 <tr>
40 <th class="age">age</th>
40 <th class="age">age</th>
41 <th class="author">author</th>
41 <th class="author">author</th>
42 <th class="description">description</th>
42 <th class="description">description</th>
43 </tr>
43 </tr>
44 {entries}
44 {entries}
45 </table>
45 </table>
46
46
47 <div class="navigate">
47 <div class="navigate">
48 <a href="{url}search/{lessvars%urlparameter}">less</a>
48 <a href="{url}search/{lessvars%urlparameter}">less</a>
49 <a href="{url}search/{morevars%urlparameter}">more</a>
49 <a href="{url}search/{morevars%urlparameter}">more</a>
50 </div>
50 </div>
51
51
52 </div>
52 </div>
53 </div>
53 </div>
54
54
55 {footer}
55 {footer}
@@ -1,70 +1,70 b''
1 {header}
1 {header}
2 <title>{repo|escape}: log</title>
2 <title>{repo|escape}: log</title>
3 <link rel="alternate" type="application/atom+xml"
3 <link rel="alternate" type="application/atom+xml"
4 href="{url}atom-log" title="Atom feed for {repo|escape}" />
4 href="{url}atom-log" title="Atom feed for {repo|escape}" />
5 <link rel="alternate" type="application/rss+xml"
5 <link rel="alternate" type="application/rss+xml"
6 href="{url}rss-log" title="RSS feed for {repo|escape}" />
6 href="{url}rss-log" title="RSS feed for {repo|escape}" />
7 </head>
7 </head>
8 <body>
8 <body>
9
9
10 <div class="container">
10 <div class="container">
11 <div class="menu">
11 <div class="menu">
12 <div class="logo">
12 <div class="logo">
13 <a href="http://mercurial.selenic.com/">
13 <a href="{logourl}">
14 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
14 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
15 </div>
15 </div>
16 <ul>
16 <ul>
17 <li class="active">log</li>
17 <li class="active">log</li>
18 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
18 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
19 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
19 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
20 <li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
20 <li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
21 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
21 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
22 </ul>
22 </ul>
23 <ul>
23 <ul>
24 <li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a></li>
24 <li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a></li>
25 <li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">browse</a></li>
25 <li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">browse</a></li>
26 </ul>
26 </ul>
27 <ul>
27 <ul>
28 {archives%archiveentry}
28 {archives%archiveentry}
29 </ul>
29 </ul>
30 <ul>
30 <ul>
31 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
31 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
32 </ul>
32 </ul>
33 </div>
33 </div>
34
34
35 <div class="main">
35 <div class="main">
36 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
36 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
37 <h3>log</h3>
37 <h3>log</h3>
38
38
39 <form class="search" action="{url}log">
39 <form class="search" action="{url}log">
40 {sessionvars%hiddenformentry}
40 {sessionvars%hiddenformentry}
41 <p><input name="rev" id="search1" type="text" size="30" /></p>
41 <p><input name="rev" id="search1" type="text" size="30" /></p>
42 <div id="hint">find changesets by author, revision,
42 <div id="hint">find changesets by author, revision,
43 files, or words in the commit message</div>
43 files, or words in the commit message</div>
44 </form>
44 </form>
45
45
46 <div class="navigate">
46 <div class="navigate">
47 <a href="{url}shortlog/{rev}{lessvars%urlparameter}">less</a>
47 <a href="{url}shortlog/{rev}{lessvars%urlparameter}">less</a>
48 <a href="{url}shortlog/{rev}{morevars%urlparameter}">more</a>
48 <a href="{url}shortlog/{rev}{morevars%urlparameter}">more</a>
49 | rev {rev}: {changenav%navshort}
49 | rev {rev}: {changenav%navshort}
50 </div>
50 </div>
51
51
52 <table class="bigtable">
52 <table class="bigtable">
53 <tr>
53 <tr>
54 <th class="age">age</th>
54 <th class="age">age</th>
55 <th class="author">author</th>
55 <th class="author">author</th>
56 <th class="description">description</th>
56 <th class="description">description</th>
57 </tr>
57 </tr>
58 {entries%shortlogentry}
58 {entries%shortlogentry}
59 </table>
59 </table>
60
60
61 <div class="navigate">
61 <div class="navigate">
62 <a href="{url}shortlog/{rev}{lessvars%urlparameter}">less</a>
62 <a href="{url}shortlog/{rev}{lessvars%urlparameter}">less</a>
63 <a href="{url}shortlog/{rev}{morevars%urlparameter}">more</a>
63 <a href="{url}shortlog/{rev}{morevars%urlparameter}">more</a>
64 | rev {rev}: {changenav%navshort}
64 | rev {rev}: {changenav%navshort}
65 </div>
65 </div>
66
66
67 </div>
67 </div>
68 </div>
68 </div>
69
69
70 {footer}
70 {footer}
@@ -1,49 +1,49 b''
1 {header}
1 {header}
2 <title>{repo|escape}: tags</title>
2 <title>{repo|escape}: tags</title>
3 <link rel="alternate" type="application/atom+xml"
3 <link rel="alternate" type="application/atom+xml"
4 href="{url}atom-tags" title="Atom feed for {repo|escape}: tags" />
4 href="{url}atom-tags" title="Atom feed for {repo|escape}: tags" />
5 <link rel="alternate" type="application/rss+xml"
5 <link rel="alternate" type="application/rss+xml"
6 href="{url}rss-tags" title="RSS feed for {repo|escape}: tags" />
6 href="{url}rss-tags" title="RSS feed for {repo|escape}: tags" />
7 </head>
7 </head>
8 <body>
8 <body>
9
9
10 <div class="container">
10 <div class="container">
11 <div class="menu">
11 <div class="menu">
12 <div class="logo">
12 <div class="logo">
13 <a href="http://mercurial.selenic.com/">
13 <a href="{logourl}">
14 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
14 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
15 </div>
15 </div>
16 <ul>
16 <ul>
17 <li><a href="{url}shortlog{sessionvars%urlparameter}">log</a></li>
17 <li><a href="{url}shortlog{sessionvars%urlparameter}">log</a></li>
18 <li><a href="{url}graph{sessionvars%urlparameter}">graph</a></li>
18 <li><a href="{url}graph{sessionvars%urlparameter}">graph</a></li>
19 <li class="active">tags</li>
19 <li class="active">tags</li>
20 <li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
20 <li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
21 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
21 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
22 </ul>
22 </ul>
23 <ul>
23 <ul>
24 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
24 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
25 </ul>
25 </ul>
26 </div>
26 </div>
27
27
28 <div class="main">
28 <div class="main">
29 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
29 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
30 <h3>tags</h3>
30 <h3>tags</h3>
31
31
32 <form class="search" action="{url}log">
32 <form class="search" action="{url}log">
33 {sessionvars%hiddenformentry}
33 {sessionvars%hiddenformentry}
34 <p><input name="rev" id="search1" type="text" size="30" /></p>
34 <p><input name="rev" id="search1" type="text" size="30" /></p>
35 <div id="hint">find changesets by author, revision,
35 <div id="hint">find changesets by author, revision,
36 files, or words in the commit message</div>
36 files, or words in the commit message</div>
37 </form>
37 </form>
38
38
39 <table class="bigtable">
39 <table class="bigtable">
40 <tr>
40 <tr>
41 <th>tag</th>
41 <th>tag</th>
42 <th>node</th>
42 <th>node</th>
43 </tr>
43 </tr>
44 {entries%tagentry}
44 {entries%tagentry}
45 </table>
45 </table>
46 </div>
46 </div>
47 </div>
47 </div>
48
48
49 {footer}
49 {footer}
@@ -1,8 +1,8 b''
1 {motd}
1 {motd}
2 <div class="logo">
2 <div class="logo">
3 <a href="http://mercurial.selenic.com/">
3 <a href="{logourl}">
4 <img src="{staticurl}hglogo.png" width=75 height=90 border=0 alt="mercurial"></a>
4 <img src="{staticurl}hglogo.png" width=75 height=90 border=0 alt="mercurial"></a>
5 </div>
5 </div>
6
6
7 </body>
7 </body>
8 </html>
8 </html>
@@ -1,41 +1,42 b''
1 repo the name of the repo
1 repo the name of the repo
2 rev a changeset.manifest revision
2 rev a changeset.manifest revision
3 node a changeset node
3 node a changeset node
4 changesets total number of changesets
4 changesets total number of changesets
5 file a filename
5 file a filename
6 filerev a file revision
6 filerev a file revision
7 filerevs total number of file revisions
7 filerevs total number of file revisions
8 up the directory of the relevant file
8 up the directory of the relevant file
9 path a path in the manifest, starting with "/"
9 path a path in the manifest, starting with "/"
10 basename a short pathname
10 basename a short pathname
11 date a date string
11 date a date string
12 age age in hours, days, etc
12 age age in hours, days, etc
13 line a line of text (escaped)
13 line a line of text (escaped)
14 desc a description (escaped, with breaks)
14 desc a description (escaped, with breaks)
15 shortdesc a short description (escaped)
15 shortdesc a short description (escaped)
16 author a name or email addressv(obfuscated)
16 author a name or email addressv(obfuscated)
17 parent a list of the parent
17 parent a list of the parent
18 child a list of the children
18 child a list of the children
19 tags a list of tag
19 tags a list of tag
20
20
21 header the global page header
21 header the global page header
22 footer the global page footer
22 footer the global page footer
23
23
24 files a list of file links
24 files a list of file links
25 file_copies a list of pairs of name, source filenames
25 file_copies a list of pairs of name, source filenames
26 dirs a set of directory links
26 dirs a set of directory links
27 diff a diff of one or more files
27 diff a diff of one or more files
28 annotate an annotated file
28 annotate an annotated file
29 entries the entries relevant to the page
29 entries the entries relevant to the page
30
30
31 url base url of hgweb interface
31 url base url of hgweb interface
32 logourl base url of logo
32 staticurl base url for static resources
33 staticurl base url for static resources
33
34
34
35
35 Templates and commands:
36 Templates and commands:
36 changelog(rev) - a page for browsing changesets
37 changelog(rev) - a page for browsing changesets
37 naventry - a link for jumping to a changeset number
38 naventry - a link for jumping to a changeset number
38 filenodelink - jump to file diff
39 filenodelink - jump to file diff
39 fileellipses - printed after maxfiles
40 fileellipses - printed after maxfiles
40 changelogentry - an entry in the log
41 changelogentry - an entry in the log
41 manifest - browse a manifest as a directory tree
42 manifest - browse a manifest as a directory tree
General Comments 0
You need to be logged in to leave comments. Login now