annotate mercurial/hgweb/webcommands.py @ 48365:67064c238ae7

errors: use detailed exit code for non-integer number of diff context lines Differential Revision: https://phab.mercurial-scm.org/D11826
author Martin von Zweigbergk <martinvonz@google.com>
date Fri, 19 Nov 2021 15:38:36 -0800
parents d4ba4d51f85f
children ea13dabbe168
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5591
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff changeset
1 #
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff changeset
2 # Copyright 21 May 2005 - (c) 2005 Jake Edge <jake@edge2.net>
46819
d4ba4d51f85f contributor: change mentions of mpm to olivia
Raphaël Gomès <rgomes@octobus.net>
parents: 46789
diff changeset
3 # Copyright 2005-2007 Olivia Mackall <olivia@selenic.com>
5591
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff changeset
4 #
8225
46293a0c7e9f updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents: 8209
diff changeset
5 # This software may be used and distributed according to the terms of the
10263
25e572394f5c Update license to GPLv2+
Matt Mackall <mpm@selenic.com>
parents: 9404
diff changeset
6 # GNU General Public License version 2 or any later version.
5591
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff changeset
7
27046
37fcfe52c68c hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents: 27009
diff changeset
8 from __future__ import absolute_import
37fcfe52c68c hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents: 27009
diff changeset
9
37fcfe52c68c hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents: 27009
diff changeset
10 import copy
37fcfe52c68c hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents: 27009
diff changeset
11 import mimetypes
37fcfe52c68c hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents: 27009
diff changeset
12 import os
37fcfe52c68c hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents: 27009
diff changeset
13 import re
37fcfe52c68c hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents: 27009
diff changeset
14
37fcfe52c68c hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents: 27009
diff changeset
15 from ..i18n import _
37909
7fae76c2c564 hgweb: reuse graph node-related functions from templates
Anton Shestakov <av6@dwimlabs.net>
parents: 37902
diff changeset
16 from ..node import hex, short
43089
c59eb1560c44 py3: manually import getattr where it is needed
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43077
diff changeset
17 from ..pycompat import getattr
27046
37fcfe52c68c hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents: 27009
diff changeset
18
37fcfe52c68c hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents: 27009
diff changeset
19 from .common import (
37fcfe52c68c hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents: 27009
diff changeset
20 ErrorResponse,
37fcfe52c68c hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents: 27009
diff changeset
21 HTTP_FORBIDDEN,
37fcfe52c68c hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents: 27009
diff changeset
22 HTTP_NOT_FOUND,
37fcfe52c68c hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents: 27009
diff changeset
23 get_contact,
37fcfe52c68c hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents: 27009
diff changeset
24 paritygen,
37fcfe52c68c hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents: 27009
diff changeset
25 staticfile,
37fcfe52c68c hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents: 27009
diff changeset
26 )
37fcfe52c68c hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents: 27009
diff changeset
27
37fcfe52c68c hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents: 27009
diff changeset
28 from .. import (
37fcfe52c68c hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents: 27009
diff changeset
29 archival,
32904
582080a4a812 dagop: move blockancestors() and blockdescendants() from context
Yuya Nishihara <yuya@tcha.org>
parents: 32566
diff changeset
30 dagop,
27046
37fcfe52c68c hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents: 27009
diff changeset
31 encoding,
37fcfe52c68c hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents: 27009
diff changeset
32 error,
37fcfe52c68c hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents: 27009
diff changeset
33 graphmod,
34809
3a65012be661 webcommands: replace str(ctx) etc with pycompat.bytestr(ctx) etc
Augie Fackler <augie@google.com>
parents: 34695
diff changeset
34 pycompat,
27046
37fcfe52c68c hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents: 27009
diff changeset
35 revset,
31024
0b8356705de6 revset: split language services to revsetlang module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 31023
diff changeset
36 revsetlang,
27046
37fcfe52c68c hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents: 27009
diff changeset
37 scmutil,
31023
aea06029919e revset: import set classes directly from smartset module
Yuya Nishihara <yuya@tcha.org>
parents: 30826
diff changeset
38 smartset,
37400
47aea60d114d hgweb: fix search {entries} to not return results of template expansion
Yuya Nishihara <yuya@tcha.org>
parents: 37387
diff changeset
39 templateutil,
37084
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 37066
diff changeset
40 )
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 37066
diff changeset
41
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
42 from ..utils import stringutil
27046
37fcfe52c68c hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents: 27009
diff changeset
43
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
44 from . import webutil
5591
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff changeset
45
24076
b53d2afd11fb webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23992
diff changeset
46 __all__ = []
24077
e8046ca0405d webcommands: define a dict of available commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24076
diff changeset
47 commands = {}
24076
b53d2afd11fb webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23992
diff changeset
48
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
49
24076
b53d2afd11fb webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23992
diff changeset
50 class webcommand(object):
b53d2afd11fb webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23992
diff changeset
51 """Decorator used to register a web command handler.
b53d2afd11fb webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23992
diff changeset
52
b53d2afd11fb webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23992
diff changeset
53 The decorator takes as its positional arguments the name/path the
b53d2afd11fb webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23992
diff changeset
54 command should be accessible under.
b53d2afd11fb webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23992
diff changeset
55
36870
1f42d621f090 hgweb: support using new response object for web commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36865
diff changeset
56 When called, functions receive as arguments a ``requestcontext``,
1f42d621f090 hgweb: support using new response object for web commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36865
diff changeset
57 ``wsgirequest``, and a templater instance for generatoring output.
1f42d621f090 hgweb: support using new response object for web commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36865
diff changeset
58 The functions should populate the ``rctx.res`` object with details
1f42d621f090 hgweb: support using new response object for web commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36865
diff changeset
59 about the HTTP response.
1f42d621f090 hgweb: support using new response object for web commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36865
diff changeset
60
36880
67fb0dca29bc hgweb: always return iterable from @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36876
diff changeset
61 The function returns a generator to be consumed by the WSGI application.
67fb0dca29bc hgweb: always return iterable from @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36876
diff changeset
62 For most commands, this should be the result from
36883
061635d4221c hgweb: add a sendtemplate() helper function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36882
diff changeset
63 ``web.res.sendresponse()``. Many commands will call ``web.sendtemplate()``
061635d4221c hgweb: add a sendtemplate() helper function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36882
diff changeset
64 to render a template.
36870
1f42d621f090 hgweb: support using new response object for web commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36865
diff changeset
65
24076
b53d2afd11fb webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23992
diff changeset
66 Usage:
5963
5be210afe1b8 hgweb: explicitly check if requested command exists
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5960
diff changeset
67
24076
b53d2afd11fb webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23992
diff changeset
68 @webcommand('mycommand')
36887
4daa22071d5d hgweb: stop passing req and tmpl into @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36886
diff changeset
69 def mycommand(web):
24076
b53d2afd11fb webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23992
diff changeset
70 pass
b53d2afd11fb webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23992
diff changeset
71 """
5963
5be210afe1b8 hgweb: explicitly check if requested command exists
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5960
diff changeset
72
24076
b53d2afd11fb webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23992
diff changeset
73 def __init__(self, name):
b53d2afd11fb webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23992
diff changeset
74 self.name = name
b53d2afd11fb webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23992
diff changeset
75
b53d2afd11fb webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23992
diff changeset
76 def __call__(self, func):
b53d2afd11fb webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23992
diff changeset
77 __all__.append(self.name)
24077
e8046ca0405d webcommands: define a dict of available commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24076
diff changeset
78 commands[self.name] = func
24076
b53d2afd11fb webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23992
diff changeset
79 return func
b53d2afd11fb webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23992
diff changeset
80
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
81
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
82 @webcommand(b'log')
36887
4daa22071d5d hgweb: stop passing req and tmpl into @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36886
diff changeset
83 def log(web):
24087
6f5b4393590c webcommands: document "log" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24086
diff changeset
84 """
6f5b4393590c webcommands: document "log" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24086
diff changeset
85 /log[/{revision}[/{path}]]
6f5b4393590c webcommands: document "log" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24086
diff changeset
86 --------------------------
6f5b4393590c webcommands: document "log" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24086
diff changeset
87
6f5b4393590c webcommands: document "log" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24086
diff changeset
88 Show repository or file history.
6f5b4393590c webcommands: document "log" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24086
diff changeset
89
6f5b4393590c webcommands: document "log" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24086
diff changeset
90 For URLs of the form ``/log/{revision}``, a list of changesets starting at
6f5b4393590c webcommands: document "log" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24086
diff changeset
91 the specified changeset identifier is shown. If ``{revision}`` is not
6f5b4393590c webcommands: document "log" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24086
diff changeset
92 defined, the default is ``tip``. This form is equivalent to the
6f5b4393590c webcommands: document "log" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24086
diff changeset
93 ``changelog`` handler.
6f5b4393590c webcommands: document "log" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24086
diff changeset
94
6f5b4393590c webcommands: document "log" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24086
diff changeset
95 For URLs of the form ``/log/{revision}/{file}``, the history for a specific
6f5b4393590c webcommands: document "log" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24086
diff changeset
96 file will be shown. This form is equivalent to the ``filelog`` handler.
6f5b4393590c webcommands: document "log" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24086
diff changeset
97 """
6f5b4393590c webcommands: document "log" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24086
diff changeset
98
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
99 if web.req.qsparams.get(b'file'):
36887
4daa22071d5d hgweb: stop passing req and tmpl into @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36886
diff changeset
100 return filelog(web)
5591
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff changeset
101 else:
36887
4daa22071d5d hgweb: stop passing req and tmpl into @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36886
diff changeset
102 return changelog(web)
5591
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff changeset
103
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
104
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
105 @webcommand(b'rawfile')
36887
4daa22071d5d hgweb: stop passing req and tmpl into @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36886
diff changeset
106 def rawfile(web):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
107 guessmime = web.configbool(b'web', b'guessmime')
15004
d06b9c55ddab hgweb: raw file mimetype guessing configurable, off by default (BC) (issue2923)
Matt Mackall <mpm@selenic.com>
parents: 14771
diff changeset
108
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
109 path = webutil.cleanpath(web.repo, web.req.qsparams.get(b'file', b''))
5890
a0e20a5eba3c hgweb: fast path for sending raw files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5600
diff changeset
110 if not path:
36887
4daa22071d5d hgweb: stop passing req and tmpl into @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36886
diff changeset
111 return manifest(web)
5890
a0e20a5eba3c hgweb: fast path for sending raw files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5600
diff changeset
112
a0e20a5eba3c hgweb: fast path for sending raw files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5600
diff changeset
113 try:
36886
563fd95a6efb hgweb: pass modern request type into various webutil functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36885
diff changeset
114 fctx = webutil.filectx(web.repo, web.req)
25660
328739ea70c3 global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25602
diff changeset
115 except error.LookupError as inst:
6368
2c370f08c486 hgweb: better error messages
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6217
diff changeset
116 try:
36887
4daa22071d5d hgweb: stop passing req and tmpl into @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36886
diff changeset
117 return manifest(web)
6368
2c370f08c486 hgweb: better error messages
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6217
diff changeset
118 except ErrorResponse:
2c370f08c486 hgweb: better error messages
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6217
diff changeset
119 raise inst
5890
a0e20a5eba3c hgweb: fast path for sending raw files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5600
diff changeset
120
a0e20a5eba3c hgweb: fast path for sending raw files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5600
diff changeset
121 path = fctx.path()
a0e20a5eba3c hgweb: fast path for sending raw files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5600
diff changeset
122 text = fctx.data()
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
123 mt = b'application/binary'
15004
d06b9c55ddab hgweb: raw file mimetype guessing configurable, off by default (BC) (issue2923)
Matt Mackall <mpm@selenic.com>
parents: 14771
diff changeset
124 if guessmime:
40158
9310037f0636 py3: pass str and return bytes from mimetypes.guess_type()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39794
diff changeset
125 mt = mimetypes.guess_type(pycompat.fsdecode(path))[0]
15004
d06b9c55ddab hgweb: raw file mimetype guessing configurable, off by default (BC) (issue2923)
Matt Mackall <mpm@selenic.com>
parents: 14771
diff changeset
126 if mt is None:
37084
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 37066
diff changeset
127 if stringutil.binary(text):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
128 mt = b'application/binary'
24306
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 24177
diff changeset
129 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
130 mt = b'text/plain'
40158
9310037f0636 py3: pass str and return bytes from mimetypes.guess_type()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39794
diff changeset
131 else:
9310037f0636 py3: pass str and return bytes from mimetypes.guess_type()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39794
diff changeset
132 mt = pycompat.sysbytes(mt)
9310037f0636 py3: pass str and return bytes from mimetypes.guess_type()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39794
diff changeset
133
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
134 if mt.startswith(b'text/'):
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
135 mt += b'; charset="%s"' % encoding.encoding
5890
a0e20a5eba3c hgweb: fast path for sending raw files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5600
diff changeset
136
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
137 web.res.headers[b'Content-Type'] = mt
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
138 filename = (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
139 path.rpartition(b'/')[-1].replace(b'\\', b'\\\\').replace(b'"', b'\\"')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
140 )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
141 web.res.headers[b'Content-Disposition'] = (
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
142 b'inline; filename="%s"' % filename
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
143 )
36871
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
144 web.res.setbodybytes(text)
36880
67fb0dca29bc hgweb: always return iterable from @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36876
diff changeset
145 return web.res.sendresponse()
5890
a0e20a5eba3c hgweb: fast path for sending raw files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5600
diff changeset
146
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
147
36887
4daa22071d5d hgweb: stop passing req and tmpl into @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36886
diff changeset
148 def _filerevision(web, fctx):
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
149 f = fctx.path()
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
150 text = fctx.data()
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
151 parity = paritygen(web.stripecount)
39784
be0f32ca2671 hgweb: use heads() instead of headrevs()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39419
diff changeset
152 ishead = fctx.filenode() in fctx.filelog().heads()
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
153
37084
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 37066
diff changeset
154 if stringutil.binary(text):
40158
9310037f0636 py3: pass str and return bytes from mimetypes.guess_type()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39794
diff changeset
155 mt = pycompat.sysbytes(
9310037f0636 py3: pass str and return bytes from mimetypes.guess_type()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39794
diff changeset
156 mimetypes.guess_type(pycompat.fsdecode(f))[0]
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
157 or r'application/octet-stream'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
158 )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
159 text = b'(binary:%s)' % mt
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
160
38060
aeccb08af311 hgweb: wrap {lines} of filerevision with mappinggenerator
Yuya Nishihara <yuya@tcha.org>
parents: 38043
diff changeset
161 def lines(context):
9136
31177742f54a for calls expecting bool args, pass bool instead of int
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 8842
diff changeset
162 for lineno, t in enumerate(text.splitlines(True)):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
163 yield {
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
164 b"line": t,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
165 b"lineid": b"l%d" % (lineno + 1),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
166 b"linenumber": b"% 6d" % (lineno + 1),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
167 b"parity": next(parity),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
168 }
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
169
36883
061635d4221c hgweb: add a sendtemplate() helper function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36882
diff changeset
170 return web.sendtemplate(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
171 b'filerevision',
36871
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
172 file=f,
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
173 path=webutil.up(f),
38060
aeccb08af311 hgweb: wrap {lines} of filerevision with mappinggenerator
Yuya Nishihara <yuya@tcha.org>
parents: 38043
diff changeset
174 text=templateutil.mappinggenerator(lines),
36886
563fd95a6efb hgweb: pass modern request type into various webutil functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36885
diff changeset
175 symrev=webutil.symrevorshortnode(web.req, fctx),
36871
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
176 rename=webutil.renamelink(fctx),
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
177 permissions=fctx.manifest().flags(f),
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
178 ishead=int(ishead),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
179 **pycompat.strkwargs(webutil.commonentry(web.repo, fctx))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
180 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
181
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
182
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
183 @webcommand(b'file')
36887
4daa22071d5d hgweb: stop passing req and tmpl into @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36886
diff changeset
184 def file(web):
24088
fe3ee31b039f webcommands: document "file" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24087
diff changeset
185 """
fe3ee31b039f webcommands: document "file" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24087
diff changeset
186 /file/{revision}[/{path}]
fe3ee31b039f webcommands: document "file" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24087
diff changeset
187 -------------------------
fe3ee31b039f webcommands: document "file" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24087
diff changeset
188
fe3ee31b039f webcommands: document "file" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24087
diff changeset
189 Show information about a directory or file in the repository.
fe3ee31b039f webcommands: document "file" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24087
diff changeset
190
fe3ee31b039f webcommands: document "file" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24087
diff changeset
191 Info about the ``path`` given as a URL parameter will be rendered.
fe3ee31b039f webcommands: document "file" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24087
diff changeset
192
fe3ee31b039f webcommands: document "file" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24087
diff changeset
193 If ``path`` is a directory, information about the entries in that
fe3ee31b039f webcommands: document "file" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24087
diff changeset
194 directory will be rendered. This form is equivalent to the ``manifest``
fe3ee31b039f webcommands: document "file" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24087
diff changeset
195 handler.
fe3ee31b039f webcommands: document "file" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24087
diff changeset
196
fe3ee31b039f webcommands: document "file" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24087
diff changeset
197 If ``path`` is a file, information about that file will be shown via
fe3ee31b039f webcommands: document "file" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24087
diff changeset
198 the ``filerevision`` template.
fe3ee31b039f webcommands: document "file" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24087
diff changeset
199
fe3ee31b039f webcommands: document "file" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24087
diff changeset
200 If ``path`` is not defined, information about the root directory will
fe3ee31b039f webcommands: document "file" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24087
diff changeset
201 be rendered.
fe3ee31b039f webcommands: document "file" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24087
diff changeset
202 """
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
203 if web.req.qsparams.get(b'style') == b'raw':
36887
4daa22071d5d hgweb: stop passing req and tmpl into @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36886
diff changeset
204 return rawfile(web)
36872
89002d07a114 hgweb: remove one-off routing for file?style=raw
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36871
diff changeset
205
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
206 path = webutil.cleanpath(web.repo, web.req.qsparams.get(b'file', b''))
6853
2ff0829bdae5 hgweb: do not use unassigned variables in exception handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 6669
diff changeset
207 if not path:
36887
4daa22071d5d hgweb: stop passing req and tmpl into @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36886
diff changeset
208 return manifest(web)
6853
2ff0829bdae5 hgweb: do not use unassigned variables in exception handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 6669
diff changeset
209 try:
36887
4daa22071d5d hgweb: stop passing req and tmpl into @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36886
diff changeset
210 return _filerevision(web, webutil.filectx(web.repo, web.req))
25660
328739ea70c3 global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25602
diff changeset
211 except error.LookupError as inst:
5591
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff changeset
212 try:
36887
4daa22071d5d hgweb: stop passing req and tmpl into @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36886
diff changeset
213 return manifest(web)
6853
2ff0829bdae5 hgweb: do not use unassigned variables in exception handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 6669
diff changeset
214 except ErrorResponse:
2ff0829bdae5 hgweb: do not use unassigned variables in exception handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 6669
diff changeset
215 raise inst
5591
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff changeset
216
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
217
36884
ece242db5000 hgweb: use templater on requestcontext instance
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36883
diff changeset
218 def _search(web):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
219 MODE_REVISION = b'rev'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
220 MODE_KEYWORD = b'keyword'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
221 MODE_REVSET = b'revset'
10247
e8c7410371e0 hgweb: add less/more links for search logs (issue1972)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 10246
diff changeset
222
19633
217f2b9acee0 hgweb: search() function supports direct pointing to revision
Alexander Plavin <alexander@plav.in>
parents: 19632
diff changeset
223 def revsearch(ctx):
217f2b9acee0 hgweb: search() function supports direct pointing to revision
Alexander Plavin <alexander@plav.in>
parents: 19632
diff changeset
224 yield ctx
217f2b9acee0 hgweb: search() function supports direct pointing to revision
Alexander Plavin <alexander@plav.in>
parents: 19632
diff changeset
225
19632
299511aabf85 hgweb: pass arguments which a function depends on explicitly in search
Alexander Plavin <alexander@plav.in>
parents: 19631
diff changeset
226 def keywordsearch(query):
15727
917f263eeb26 i18n: use "encoding.lower()" to normalize string in hgweb search query
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 15528
diff changeset
227 lower = encoding.lower
917f263eeb26 i18n: use "encoding.lower()" to normalize string in hgweb search query
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 15528
diff changeset
228 qw = lower(query).split()
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
229
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
230 def revgen():
18497
a58d8936647a hgweb: prevent traceback during search when filtered (issue3783)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18478
diff changeset
231 cl = web.repo.changelog
38783
e7aa113b14f7 global: use pycompat.xrange()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38482
diff changeset
232 for i in pycompat.xrange(len(web.repo) - 1, 0, -100):
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
233 l = []
19491
e111d5e6bbbd hgweb: fix duplication for some search queries
Alexander Plavin <me@aplavin.ru>
parents: 19487
diff changeset
234 for j in cl.revs(max(0, i - 99), i):
6747
f6c00b17387c use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents: 6720
diff changeset
235 ctx = web.repo[j]
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
236 l.append(ctx)
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
237 l.reverse()
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
238 for e in l:
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
239 yield e
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
240
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
241 for ctx in revgen():
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
242 miss = 0
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
243 for q in qw:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
244 if not (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
245 q in lower(ctx.user())
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
246 or q in lower(ctx.description())
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
247 or q in lower(b" ".join(ctx.files()))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
248 ):
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
249 miss = 1
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
250 break
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
251 if miss:
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
252 continue
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
253
19533
9a020b354d93 hgweb: separate search itself and template generation
Alexander Plavin <alexander@plav.in>
parents: 19499
diff changeset
254 yield ctx
9a020b354d93 hgweb: separate search itself and template generation
Alexander Plavin <alexander@plav.in>
parents: 19499
diff changeset
255
19722
bf15935b68a3 hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents: 19657
diff changeset
256 def revsetsearch(revs):
bf15935b68a3 hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents: 19657
diff changeset
257 for r in revs:
bf15935b68a3 hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents: 19657
diff changeset
258 yield web.repo[r]
bf15935b68a3 hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents: 19657
diff changeset
259
19631
cf9e5e45c1d3 hgweb: add dynamic search function selection, depending on the query
Alexander Plavin <alexander@plav.in>
parents: 19534
diff changeset
260 searchfuncs = {
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
261 MODE_REVISION: (revsearch, b'exact revision search'),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
262 MODE_KEYWORD: (keywordsearch, b'literal keyword search'),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
263 MODE_REVSET: (revsetsearch, b'revset expression search'),
19631
cf9e5e45c1d3 hgweb: add dynamic search function selection, depending on the query
Alexander Plavin <alexander@plav.in>
parents: 19534
diff changeset
264 }
cf9e5e45c1d3 hgweb: add dynamic search function selection, depending on the query
Alexander Plavin <alexander@plav.in>
parents: 19534
diff changeset
265
19632
299511aabf85 hgweb: pass arguments which a function depends on explicitly in search
Alexander Plavin <alexander@plav.in>
parents: 19631
diff changeset
266 def getsearchmode(query):
19633
217f2b9acee0 hgweb: search() function supports direct pointing to revision
Alexander Plavin <alexander@plav.in>
parents: 19632
diff changeset
267 try:
37387
83d537162894 hgweb: use revsymbol() to determine if query is a revision
Martin von Zweigbergk <martinvonz@google.com>
parents: 37363
diff changeset
268 ctx = scmutil.revsymbol(web.repo, query)
19633
217f2b9acee0 hgweb: search() function supports direct pointing to revision
Alexander Plavin <alexander@plav.in>
parents: 19632
diff changeset
269 except (error.RepoError, error.LookupError):
19722
bf15935b68a3 hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents: 19657
diff changeset
270 # query is not an exact revision pointer, need to
19951
d51c4d85ec23 spelling: random spell checker fixes
Mads Kiilerich <madski@unity3d.com>
parents: 19886
diff changeset
271 # decide if it's a revset expression or keywords
19722
bf15935b68a3 hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents: 19657
diff changeset
272 pass
19633
217f2b9acee0 hgweb: search() function supports direct pointing to revision
Alexander Plavin <alexander@plav.in>
parents: 19632
diff changeset
273 else:
19656
60ce14e41faf hgweb: add string constants for search mode names
Alexander Plavin <alexander@plav.in>
parents: 19634
diff changeset
274 return MODE_REVISION, ctx
19631
cf9e5e45c1d3 hgweb: add dynamic search function selection, depending on the query
Alexander Plavin <alexander@plav.in>
parents: 19534
diff changeset
275
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
276 revdef = b'reverse(%s)' % query
19722
bf15935b68a3 hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents: 19657
diff changeset
277 try:
31024
0b8356705de6 revset: split language services to revsetlang module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 31023
diff changeset
278 tree = revsetlang.parse(revdef)
27009
f5faef7e9119 hgweb: unify import style of error classes
Yuya Nishihara <yuya@tcha.org>
parents: 26894
diff changeset
279 except error.ParseError:
19722
bf15935b68a3 hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents: 19657
diff changeset
280 # can't parse to a revset tree
bf15935b68a3 hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents: 19657
diff changeset
281 return MODE_KEYWORD, query
bf15935b68a3 hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents: 19657
diff changeset
282
31024
0b8356705de6 revset: split language services to revsetlang module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 31023
diff changeset
283 if revsetlang.depth(tree) <= 2:
19722
bf15935b68a3 hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents: 19657
diff changeset
284 # no revset syntax used
bf15935b68a3 hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents: 19657
diff changeset
285 return MODE_KEYWORD, query
bf15935b68a3 hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents: 19657
diff changeset
286
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
287 if any(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
288 (token, (value or b'')[:3]) == (b'string', b're:')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
289 for token, value, pos in revsetlang.tokenize(revdef)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
290 ):
19722
bf15935b68a3 hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents: 19657
diff changeset
291 return MODE_KEYWORD, query
bf15935b68a3 hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents: 19657
diff changeset
292
31024
0b8356705de6 revset: split language services to revsetlang module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 31023
diff changeset
293 funcsused = revsetlang.funcsused(tree)
19722
bf15935b68a3 hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents: 19657
diff changeset
294 if not funcsused.issubset(revset.safesymbols):
bf15935b68a3 hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents: 19657
diff changeset
295 return MODE_KEYWORD, query
bf15935b68a3 hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents: 19657
diff changeset
296
bf15935b68a3 hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents: 19657
diff changeset
297 try:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
298 mfunc = revset.match(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
299 web.repo.ui, revdef, lookup=revset.lookupfn(web.repo)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
300 )
24114
fafd9a1284cf revset: make match function initiate query from full set by default
Yuya Nishihara <yuya@tcha.org>
parents: 24097
diff changeset
301 revs = mfunc(web.repo)
19722
bf15935b68a3 hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents: 19657
diff changeset
302 return MODE_REVSET, revs
bf15935b68a3 hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents: 19657
diff changeset
303 # ParseError: wrongly placed tokens, wrongs arguments, etc
bf15935b68a3 hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents: 19657
diff changeset
304 # RepoLookupError: no such revision, e.g. in 'revision:'
bf15935b68a3 hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents: 19657
diff changeset
305 # Abort: bookmark/tag not exists
bf15935b68a3 hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents: 19657
diff changeset
306 # LookupError: ambiguous identifier, e.g. in '(bc)' on a large repo
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
307 except (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
308 error.ParseError,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
309 error.RepoLookupError,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
310 error.Abort,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
311 LookupError,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
312 ):
19722
bf15935b68a3 hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents: 19657
diff changeset
313 return MODE_KEYWORD, query
bf15935b68a3 hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents: 19657
diff changeset
314
37400
47aea60d114d hgweb: fix search {entries} to not return results of template expansion
Yuya Nishihara <yuya@tcha.org>
parents: 37387
diff changeset
315 def changelist(context):
19533
9a020b354d93 hgweb: separate search itself and template generation
Alexander Plavin <alexander@plav.in>
parents: 19499
diff changeset
316 count = 0
9a020b354d93 hgweb: separate search itself and template generation
Alexander Plavin <alexander@plav.in>
parents: 19499
diff changeset
317
19765
521c373ff134 hgweb: pass variable with current search mode name to the search template
Alexander Plavin <alexander@plav.in>
parents: 19738
diff changeset
318 for ctx in searchfunc[0](funcarg):
6659
bc553c6d1ef9 webcommands: fix increments lost by 894875eae49b
Andrew Beekhof <beekhof@gmail.com>
parents: 6657
diff changeset
319 count += 1
39794
4f44f747f094 hgweb: use scmutil.binnode() to translate None to wdir hash (issue5988)
Yuya Nishihara <yuya@tcha.org>
parents: 39793
diff changeset
320 n = scmutil.binnode(ctx)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
321 showtags = webutil.showtag(web.repo, b'changelogtag', n)
37954
9482498b96b0 hgweb: remove unused argument 'tmpl' from listfilediffs()
Yuya Nishihara <yuya@tcha.org>
parents: 37912
diff changeset
322 files = webutil.listfilediffs(ctx.files(), n, web.maxfiles)
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
323
37019
c97b936d8bb5 templater: use named function to expand template against mapping dict (API)
Yuya Nishihara <yuya@tcha.org>
parents: 36977
diff changeset
324 lm = webutil.commonentry(web.repo, ctx)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
325 lm.update(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
326 {
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
327 b'parity': next(parity),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
328 b'changelogtag': showtags,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
329 b'files': files,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
330 }
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
331 )
37400
47aea60d114d hgweb: fix search {entries} to not return results of template expansion
Yuya Nishihara <yuya@tcha.org>
parents: 37387
diff changeset
332 yield lm
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
333
10247
e8c7410371e0 hgweb: add less/more links for search logs (issue1972)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 10246
diff changeset
334 if count >= revcount:
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
335 break
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
336
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
337 query = web.req.qsparams[b'rev']
19418
55b9d98a1ef4 hgweb: move local changelist function to the beginning of the parent one
Alexander Plavin <me@aplavin.ru>
parents: 19396
diff changeset
338 revcount = web.maxchanges
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
339 if b'revcount' in web.req.qsparams:
20092
77acd8ce01ce hgweb: ignore non numeric "revcount" parameter values (issue4091)
Isaac Jurado <diptongo@gmail.com>
parents: 20004
diff changeset
340 try:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
341 revcount = int(web.req.qsparams.get(b'revcount', revcount))
20092
77acd8ce01ce hgweb: ignore non numeric "revcount" parameter values (issue4091)
Isaac Jurado <diptongo@gmail.com>
parents: 20004
diff changeset
342 revcount = max(revcount, 1)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
343 web.tmpl.defaults[b'sessionvars'][b'revcount'] = revcount
20092
77acd8ce01ce hgweb: ignore non numeric "revcount" parameter values (issue4091)
Isaac Jurado <diptongo@gmail.com>
parents: 20004
diff changeset
344 except ValueError:
77acd8ce01ce hgweb: ignore non numeric "revcount" parameter values (issue4091)
Isaac Jurado <diptongo@gmail.com>
parents: 20004
diff changeset
345 pass
19418
55b9d98a1ef4 hgweb: move local changelist function to the beginning of the parent one
Alexander Plavin <me@aplavin.ru>
parents: 19396
diff changeset
346
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
347 lessvars = copy.copy(web.tmpl.defaults[b'sessionvars'])
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
348 lessvars[b'revcount'] = max(revcount // 2, 1)
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
349 lessvars[b'rev'] = query
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
350 morevars = copy.copy(web.tmpl.defaults[b'sessionvars'])
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
351 morevars[b'revcount'] = revcount * 2
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
352 morevars[b'rev'] = query
19418
55b9d98a1ef4 hgweb: move local changelist function to the beginning of the parent one
Alexander Plavin <me@aplavin.ru>
parents: 19396
diff changeset
353
19632
299511aabf85 hgweb: pass arguments which a function depends on explicitly in search
Alexander Plavin <alexander@plav.in>
parents: 19631
diff changeset
354 mode, funcarg = getsearchmode(query)
19768
186f54d40fdd hgweb: add link to force literal keyword search
Alexander Plavin <alexander@plav.in>
parents: 19765
diff changeset
355
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
356 if b'forcekw' in web.req.qsparams:
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
357 showforcekw = b''
19768
186f54d40fdd hgweb: add link to force literal keyword search
Alexander Plavin <alexander@plav.in>
parents: 19765
diff changeset
358 showunforcekw = searchfuncs[mode][1]
186f54d40fdd hgweb: add link to force literal keyword search
Alexander Plavin <alexander@plav.in>
parents: 19765
diff changeset
359 mode = MODE_KEYWORD
186f54d40fdd hgweb: add link to force literal keyword search
Alexander Plavin <alexander@plav.in>
parents: 19765
diff changeset
360 funcarg = query
186f54d40fdd hgweb: add link to force literal keyword search
Alexander Plavin <alexander@plav.in>
parents: 19765
diff changeset
361 else:
186f54d40fdd hgweb: add link to force literal keyword search
Alexander Plavin <alexander@plav.in>
parents: 19765
diff changeset
362 if mode != MODE_KEYWORD:
186f54d40fdd hgweb: add link to force literal keyword search
Alexander Plavin <alexander@plav.in>
parents: 19765
diff changeset
363 showforcekw = searchfuncs[MODE_KEYWORD][1]
186f54d40fdd hgweb: add link to force literal keyword search
Alexander Plavin <alexander@plav.in>
parents: 19765
diff changeset
364 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
365 showforcekw = b''
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
366 showunforcekw = b''
19768
186f54d40fdd hgweb: add link to force literal keyword search
Alexander Plavin <alexander@plav.in>
parents: 19765
diff changeset
367
19631
cf9e5e45c1d3 hgweb: add dynamic search function selection, depending on the query
Alexander Plavin <alexander@plav.in>
parents: 19534
diff changeset
368 searchfunc = searchfuncs[mode]
cf9e5e45c1d3 hgweb: add dynamic search function selection, depending on the query
Alexander Plavin <alexander@plav.in>
parents: 19534
diff changeset
369
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
370 tip = web.repo[b'tip']
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
371 parity = paritygen(web.stripecount)
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
372
36883
061635d4221c hgweb: add a sendtemplate() helper function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36882
diff changeset
373 return web.sendtemplate(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
374 b'search',
36871
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
375 query=query,
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
376 node=tip.hex(),
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
377 symrev=b'tip',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
378 entries=templateutil.mappinggenerator(changelist, name=b'searchentry'),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
379 archives=web.archivelist(b'tip'),
36871
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
380 morevars=morevars,
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
381 lessvars=lessvars,
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
382 modedesc=searchfunc[1],
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
383 showforcekw=showforcekw,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
384 showunforcekw=showunforcekw,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
385 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
386
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
387
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
388 @webcommand(b'changelog')
36887
4daa22071d5d hgweb: stop passing req and tmpl into @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36886
diff changeset
389 def changelog(web, shortlog=False):
24089
f17773432782 webcommands: document "changelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24088
diff changeset
390 """
f17773432782 webcommands: document "changelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24088
diff changeset
391 /changelog[/{revision}]
f17773432782 webcommands: document "changelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24088
diff changeset
392 -----------------------
f17773432782 webcommands: document "changelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24088
diff changeset
393
f17773432782 webcommands: document "changelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24088
diff changeset
394 Show information about multiple changesets.
f17773432782 webcommands: document "changelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24088
diff changeset
395
f17773432782 webcommands: document "changelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24088
diff changeset
396 If the optional ``revision`` URL argument is absent, information about
f17773432782 webcommands: document "changelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24088
diff changeset
397 all changesets starting at ``tip`` will be rendered. If the ``revision``
f17773432782 webcommands: document "changelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24088
diff changeset
398 argument is present, changesets will be shown starting from the specified
f17773432782 webcommands: document "changelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24088
diff changeset
399 revision.
f17773432782 webcommands: document "changelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24088
diff changeset
400
f17773432782 webcommands: document "changelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24088
diff changeset
401 If ``revision`` is absent, the ``rev`` query string argument may be
f17773432782 webcommands: document "changelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24088
diff changeset
402 defined. This will perform a search for changesets.
f17773432782 webcommands: document "changelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24088
diff changeset
403
f17773432782 webcommands: document "changelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24088
diff changeset
404 The argument for ``rev`` can be a single revision, a revision set,
f17773432782 webcommands: document "changelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24088
diff changeset
405 or a literal keyword to search for in changeset data (equivalent to
24867
6d97ca3f05ba webcommands: fix typo in changelog documentation
Wagner Bruna <wbruna@softwareexpress.com.br>
parents: 24859
diff changeset
406 :hg:`log -k`).
24089
f17773432782 webcommands: document "changelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24088
diff changeset
407
f17773432782 webcommands: document "changelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24088
diff changeset
408 The ``revcount`` query string argument defines the maximum numbers of
f17773432782 webcommands: document "changelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24088
diff changeset
409 changesets to render.
f17773432782 webcommands: document "changelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24088
diff changeset
410
f17773432782 webcommands: document "changelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24088
diff changeset
411 For non-searches, the ``changelog`` template will be rendered.
f17773432782 webcommands: document "changelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24088
diff changeset
412 """
10247
e8c7410371e0 hgweb: add less/more links for search logs (issue1972)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 10246
diff changeset
413
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
414 query = b''
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
415 if b'node' in web.req.qsparams:
36886
563fd95a6efb hgweb: pass modern request type into various webutil functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36885
diff changeset
416 ctx = webutil.changectx(web.repo, web.req)
563fd95a6efb hgweb: pass modern request type into various webutil functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36885
diff changeset
417 symrev = webutil.symrevorshortnode(web.req, ctx)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
418 elif b'rev' in web.req.qsparams:
36884
ece242db5000 hgweb: use templater on requestcontext instance
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36883
diff changeset
419 return _search(web)
5591
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff changeset
420 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
421 ctx = web.repo[b'tip']
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
422 symrev = b'tip'
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
423
39416
ede3bf31fe63 hgweb: load revcount + 1 entries to fill nextentry in log page (issue5972)
Yuya Nishihara <yuya@tcha.org>
parents: 38931
diff changeset
424 def changelist(maxcount):
18427
56ca4443a343 hgweb: use changelog for iteration
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 18409
diff changeset
425 revs = []
19486
002b711a3e8a hgweb: fix incorrect way to count revisions in log (issue3977)
Alexander Plavin <me@aplavin.ru>
parents: 19485
diff changeset
426 if pos != -1:
002b711a3e8a hgweb: fix incorrect way to count revisions in log (issue3977)
Alexander Plavin <me@aplavin.ru>
parents: 19485
diff changeset
427 revs = web.repo.changelog.revs(pos, 0)
23745
513d47905114 hgweb: extract changelist entry generation into own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23740
diff changeset
428
39416
ede3bf31fe63 hgweb: load revcount + 1 entries to fill nextentry in log page (issue5972)
Yuya Nishihara <yuya@tcha.org>
parents: 38931
diff changeset
429 for entry in webutil.changelistentries(web, revs, maxcount, parity):
23745
513d47905114 hgweb: extract changelist entry generation into own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23740
diff changeset
430 yield entry
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
431
24306
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 24177
diff changeset
432 if shortlog:
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 24177
diff changeset
433 revcount = web.maxshortchanges
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 24177
diff changeset
434 else:
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 24177
diff changeset
435 revcount = web.maxchanges
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 24177
diff changeset
436
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
437 if b'revcount' in web.req.qsparams:
20092
77acd8ce01ce hgweb: ignore non numeric "revcount" parameter values (issue4091)
Isaac Jurado <diptongo@gmail.com>
parents: 20004
diff changeset
438 try:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
439 revcount = int(web.req.qsparams.get(b'revcount', revcount))
20092
77acd8ce01ce hgweb: ignore non numeric "revcount" parameter values (issue4091)
Isaac Jurado <diptongo@gmail.com>
parents: 20004
diff changeset
440 revcount = max(revcount, 1)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
441 web.tmpl.defaults[b'sessionvars'][b'revcount'] = revcount
20092
77acd8ce01ce hgweb: ignore non numeric "revcount" parameter values (issue4091)
Isaac Jurado <diptongo@gmail.com>
parents: 20004
diff changeset
442 except ValueError:
77acd8ce01ce hgweb: ignore non numeric "revcount" parameter values (issue4091)
Isaac Jurado <diptongo@gmail.com>
parents: 20004
diff changeset
443 pass
10246
b9d02695bde4 hgweb: add less/more links to shortlog/filelog nav
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 10245
diff changeset
444
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
445 lessvars = copy.copy(web.tmpl.defaults[b'sessionvars'])
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
446 lessvars[b'revcount'] = max(revcount // 2, 1)
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
447 morevars = copy.copy(web.tmpl.defaults[b'sessionvars'])
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
448 morevars[b'revcount'] = revcount * 2
10246
b9d02695bde4 hgweb: add less/more links to shortlog/filelog nav
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 10245
diff changeset
449
12059
0de6cfdcaad8 webcommands: remove unncessary access to repo.changelog
Patrick Mezard <pmezard@gmail.com>
parents: 11332
diff changeset
450 count = len(web.repo)
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
451 pos = ctx.rev()
19486
002b711a3e8a hgweb: fix incorrect way to count revisions in log (issue3977)
Alexander Plavin <me@aplavin.ru>
parents: 19485
diff changeset
452 parity = paritygen(web.stripecount)
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
453
18409
e3f5cef11d6a hgweb: pass repo object to revnav construction
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18408
diff changeset
454 changenav = webutil.revnav(web.repo).gen(pos, revcount, count)
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
455
39416
ede3bf31fe63 hgweb: load revcount + 1 entries to fill nextentry in log page (issue5972)
Yuya Nishihara <yuya@tcha.org>
parents: 38931
diff changeset
456 entries = list(changelist(revcount + 1))
19737
ab5442f45441 hgweb: always compute all entries and latestentry in changelog
Alexander Plavin <alexander@plav.in>
parents: 19735
diff changeset
457 latestentry = entries[:1]
19738
93b8544c4482 hgweb: add nextentry variable for easy pagination in changelog
Alexander Plavin <alexander@plav.in>
parents: 19737
diff changeset
458 if len(entries) > revcount:
93b8544c4482 hgweb: add nextentry variable for easy pagination in changelog
Alexander Plavin <alexander@plav.in>
parents: 19737
diff changeset
459 nextentry = entries[-1:]
93b8544c4482 hgweb: add nextentry variable for easy pagination in changelog
Alexander Plavin <alexander@plav.in>
parents: 19737
diff changeset
460 entries = entries[:-1]
93b8544c4482 hgweb: add nextentry variable for easy pagination in changelog
Alexander Plavin <alexander@plav.in>
parents: 19737
diff changeset
461 else:
93b8544c4482 hgweb: add nextentry variable for easy pagination in changelog
Alexander Plavin <alexander@plav.in>
parents: 19737
diff changeset
462 nextentry = []
19737
ab5442f45441 hgweb: always compute all entries and latestentry in changelog
Alexander Plavin <alexander@plav.in>
parents: 19735
diff changeset
463
36883
061635d4221c hgweb: add a sendtemplate() helper function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36882
diff changeset
464 return web.sendtemplate(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
465 b'shortlog' if shortlog else b'changelog',
36871
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
466 changenav=changenav,
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
467 node=ctx.hex(),
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
468 rev=pos,
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
469 symrev=symrev,
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
470 changesets=count,
38061
d3b4c4769b5c hgweb: wrap {entries}* of changelog with mappinglist
Yuya Nishihara <yuya@tcha.org>
parents: 38060
diff changeset
471 entries=templateutil.mappinglist(entries),
d3b4c4769b5c hgweb: wrap {entries}* of changelog with mappinglist
Yuya Nishihara <yuya@tcha.org>
parents: 38060
diff changeset
472 latestentry=templateutil.mappinglist(latestentry),
d3b4c4769b5c hgweb: wrap {entries}* of changelog with mappinglist
Yuya Nishihara <yuya@tcha.org>
parents: 38060
diff changeset
473 nextentry=templateutil.mappinglist(nextentry),
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
474 archives=web.archivelist(b'tip'),
36871
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
475 revcount=revcount,
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
476 morevars=morevars,
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
477 lessvars=lessvars,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
478 query=query,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
479 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
480
5591
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff changeset
481
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
482 @webcommand(b'shortlog')
36887
4daa22071d5d hgweb: stop passing req and tmpl into @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36886
diff changeset
483 def shortlog(web):
24086
2d8e93554822 webcommands: document "shortlog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24085
diff changeset
484 """
2d8e93554822 webcommands: document "shortlog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24085
diff changeset
485 /shortlog
2d8e93554822 webcommands: document "shortlog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24085
diff changeset
486 ---------
2d8e93554822 webcommands: document "shortlog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24085
diff changeset
487
2d8e93554822 webcommands: document "shortlog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24085
diff changeset
488 Show basic information about a set of changesets.
2d8e93554822 webcommands: document "shortlog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24085
diff changeset
489
2d8e93554822 webcommands: document "shortlog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24085
diff changeset
490 This accepts the same parameters as the ``changelog`` handler. The only
2d8e93554822 webcommands: document "shortlog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24085
diff changeset
491 difference is the ``shortlog`` template will be rendered instead of the
2d8e93554822 webcommands: document "shortlog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24085
diff changeset
492 ``changelog`` template.
2d8e93554822 webcommands: document "shortlog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24085
diff changeset
493 """
36887
4daa22071d5d hgweb: stop passing req and tmpl into @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36886
diff changeset
494 return changelog(web, shortlog=True)
5591
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff changeset
495
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
496
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
497 @webcommand(b'changeset')
36887
4daa22071d5d hgweb: stop passing req and tmpl into @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36886
diff changeset
498 def changeset(web):
24085
0bf61eae67ab webcommands: document "changeset" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24084
diff changeset
499 """
0bf61eae67ab webcommands: document "changeset" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24084
diff changeset
500 /changeset[/{revision}]
0bf61eae67ab webcommands: document "changeset" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24084
diff changeset
501 -----------------------
0bf61eae67ab webcommands: document "changeset" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24084
diff changeset
502
0bf61eae67ab webcommands: document "changeset" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24084
diff changeset
503 Show information about a single changeset.
0bf61eae67ab webcommands: document "changeset" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24084
diff changeset
504
0bf61eae67ab webcommands: document "changeset" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24084
diff changeset
505 A URL path argument is the changeset identifier to show. See ``hg help
0bf61eae67ab webcommands: document "changeset" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24084
diff changeset
506 revisions`` for possible values. If not defined, the ``tip`` changeset
0bf61eae67ab webcommands: document "changeset" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24084
diff changeset
507 will be shown.
0bf61eae67ab webcommands: document "changeset" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24084
diff changeset
508
0bf61eae67ab webcommands: document "changeset" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24084
diff changeset
509 The ``changeset`` template is rendered. Contents of the ``changesettag``,
0bf61eae67ab webcommands: document "changeset" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24084
diff changeset
510 ``changesetbookmark``, ``filenodelink``, ``filenolink``, and the many
0bf61eae67ab webcommands: document "changeset" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24084
diff changeset
511 templates related to diffs may all be used to produce the output.
0bf61eae67ab webcommands: document "changeset" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24084
diff changeset
512 """
36886
563fd95a6efb hgweb: pass modern request type into various webutil functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36885
diff changeset
513 ctx = webutil.changectx(web.repo, web.req)
36883
061635d4221c hgweb: add a sendtemplate() helper function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36882
diff changeset
514
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
515 return web.sendtemplate(b'changeset', **webutil.changesetentry(web, ctx))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
516
5591
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff changeset
517
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
518 rev = webcommand(b'rev')(changeset)
5591
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff changeset
519
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
520
16448
e6b45e9a75dc hgweb: add hook for remapping repository path into virtual paths
Martin Geisler <mg@lazybytes.net>
parents: 16308
diff changeset
521 def decodepath(path):
e6b45e9a75dc hgweb: add hook for remapping repository path into virtual paths
Martin Geisler <mg@lazybytes.net>
parents: 16308
diff changeset
522 """Hook for mapping a path in the repository to a path in the
e6b45e9a75dc hgweb: add hook for remapping repository path into virtual paths
Martin Geisler <mg@lazybytes.net>
parents: 16308
diff changeset
523 working copy.
e6b45e9a75dc hgweb: add hook for remapping repository path into virtual paths
Martin Geisler <mg@lazybytes.net>
parents: 16308
diff changeset
524
e6b45e9a75dc hgweb: add hook for remapping repository path into virtual paths
Martin Geisler <mg@lazybytes.net>
parents: 16308
diff changeset
525 Extensions (e.g., largefiles) can override this to remap files in
e6b45e9a75dc hgweb: add hook for remapping repository path into virtual paths
Martin Geisler <mg@lazybytes.net>
parents: 16308
diff changeset
526 the virtual file system presented by the manifest command below."""
e6b45e9a75dc hgweb: add hook for remapping repository path into virtual paths
Martin Geisler <mg@lazybytes.net>
parents: 16308
diff changeset
527 return path
e6b45e9a75dc hgweb: add hook for remapping repository path into virtual paths
Martin Geisler <mg@lazybytes.net>
parents: 16308
diff changeset
528
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
529
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
530 @webcommand(b'manifest')
36887
4daa22071d5d hgweb: stop passing req and tmpl into @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36886
diff changeset
531 def manifest(web):
24090
a86b2922ea30 webcommands: document "manifest" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24089
diff changeset
532 """
a86b2922ea30 webcommands: document "manifest" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24089
diff changeset
533 /manifest[/{revision}[/{path}]]
a86b2922ea30 webcommands: document "manifest" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24089
diff changeset
534 -------------------------------
a86b2922ea30 webcommands: document "manifest" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24089
diff changeset
535
a86b2922ea30 webcommands: document "manifest" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24089
diff changeset
536 Show information about a directory.
a86b2922ea30 webcommands: document "manifest" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24089
diff changeset
537
24868
9668c653eb9d webcommands: fix description of manifest default behavior
Wagner Bruna <wbruna@softwareexpress.com.br>
parents: 24867
diff changeset
538 If the URL path arguments are omitted, information about the root
24090
a86b2922ea30 webcommands: document "manifest" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24089
diff changeset
539 directory for the ``tip`` changeset will be shown.
a86b2922ea30 webcommands: document "manifest" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24089
diff changeset
540
a86b2922ea30 webcommands: document "manifest" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24089
diff changeset
541 Because this handler can only show information for directories, it
a86b2922ea30 webcommands: document "manifest" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24089
diff changeset
542 is recommended to use the ``file`` handler instead, as it can handle both
a86b2922ea30 webcommands: document "manifest" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24089
diff changeset
543 directories and files.
a86b2922ea30 webcommands: document "manifest" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24089
diff changeset
544
a86b2922ea30 webcommands: document "manifest" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24089
diff changeset
545 The ``manifest`` template will be rendered for this handler.
a86b2922ea30 webcommands: document "manifest" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24089
diff changeset
546 """
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
547 if b'node' in web.req.qsparams:
36886
563fd95a6efb hgweb: pass modern request type into various webutil functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36885
diff changeset
548 ctx = webutil.changectx(web.repo, web.req)
563fd95a6efb hgweb: pass modern request type into various webutil functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36885
diff changeset
549 symrev = webutil.symrevorshortnode(web.req, ctx)
25602
85fb416f2fa7 hgweb: provide symrev (symbolic revision) property to the templates
Anton Shestakov <av6@dwimlabs.net>
parents: 25251
diff changeset
550 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
551 ctx = web.repo[b'tip']
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
552 symrev = b'tip'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
553 path = webutil.cleanpath(web.repo, web.req.qsparams.get(b'file', b''))
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
554 mf = ctx.manifest()
39794
4f44f747f094 hgweb: use scmutil.binnode() to translate None to wdir hash (issue5988)
Yuya Nishihara <yuya@tcha.org>
parents: 39793
diff changeset
555 node = scmutil.binnode(ctx)
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
556
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
557 files = {}
7305
c21d236ca897 hgweb: descend empty directories in web view
Ry4an Brase <ry4an-hg@ry4an.org>
parents: 7300
diff changeset
558 dirs = {}
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
559 parity = paritygen(web.stripecount)
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
560
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
561 if path and path[-1:] != b"/":
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
562 path += b"/"
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
563 l = len(path)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
564 abspath = b"/" + path
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
565
43106
d783f945a701 py3: finish porting iteritems() to pycompat and remove source transformer
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43089
diff changeset
566 for full, n in pycompat.iteritems(mf):
16448
e6b45e9a75dc hgweb: add hook for remapping repository path into virtual paths
Martin Geisler <mg@lazybytes.net>
parents: 16308
diff changeset
567 # the virtual path (working copy path) used for the full
e6b45e9a75dc hgweb: add hook for remapping repository path into virtual paths
Martin Geisler <mg@lazybytes.net>
parents: 16308
diff changeset
568 # (repository) path
e6b45e9a75dc hgweb: add hook for remapping repository path into virtual paths
Martin Geisler <mg@lazybytes.net>
parents: 16308
diff changeset
569 f = decodepath(full)
e6b45e9a75dc hgweb: add hook for remapping repository path into virtual paths
Martin Geisler <mg@lazybytes.net>
parents: 16308
diff changeset
570
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
571 if f[:l] != path:
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
572 continue
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
573 remain = f[l:]
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
574 elements = remain.split(b'/')
7305
c21d236ca897 hgweb: descend empty directories in web view
Ry4an Brase <ry4an-hg@ry4an.org>
parents: 7300
diff changeset
575 if len(elements) == 1:
16448
e6b45e9a75dc hgweb: add hook for remapping repository path into virtual paths
Martin Geisler <mg@lazybytes.net>
parents: 16308
diff changeset
576 files[remain] = full
7305
c21d236ca897 hgweb: descend empty directories in web view
Ry4an Brase <ry4an-hg@ry4an.org>
parents: 7300
diff changeset
577 else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
578 h = dirs # need to retain ref to dirs (root)
7305
c21d236ca897 hgweb: descend empty directories in web view
Ry4an Brase <ry4an-hg@ry4an.org>
parents: 7300
diff changeset
579 for elem in elements[0:-1]:
c21d236ca897 hgweb: descend empty directories in web view
Ry4an Brase <ry4an-hg@ry4an.org>
parents: 7300
diff changeset
580 if elem not in h:
c21d236ca897 hgweb: descend empty directories in web view
Ry4an Brase <ry4an-hg@ry4an.org>
parents: 7300
diff changeset
581 h[elem] = {}
c21d236ca897 hgweb: descend empty directories in web view
Ry4an Brase <ry4an-hg@ry4an.org>
parents: 7300
diff changeset
582 h = h[elem]
c21d236ca897 hgweb: descend empty directories in web view
Ry4an Brase <ry4an-hg@ry4an.org>
parents: 7300
diff changeset
583 if len(h) > 1:
c21d236ca897 hgweb: descend empty directories in web view
Ry4an Brase <ry4an-hg@ry4an.org>
parents: 7300
diff changeset
584 break
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
585 h[None] = None # denotes files present
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
586
7565
5f162f61e479 hgweb: fix problems with empty repositories
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7434
diff changeset
587 if mf and not files and not dirs:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
588 raise ErrorResponse(HTTP_NOT_FOUND, b'path not found: ' + path)
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
589
38062
17f7b44367bb hgweb: wrap {fentries} and {dentries} of manifest with mappinggenerator
Yuya Nishihara <yuya@tcha.org>
parents: 38061
diff changeset
590 def filelist(context):
8209
a1a5a57efe90 replace util.sort with sorted built-in
Matt Mackall <mpm@selenic.com>
parents: 7966
diff changeset
591 for f in sorted(files):
7305
c21d236ca897 hgweb: descend empty directories in web view
Ry4an Brase <ry4an-hg@ry4an.org>
parents: 7300
diff changeset
592 full = files[f]
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
593
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
594 fctx = ctx.filectx(full)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
595 yield {
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
596 b"file": full,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
597 b"parity": next(parity),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
598 b"basename": f,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
599 b"date": fctx.date(),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
600 b"size": fctx.size(),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
601 b"permissions": mf.flags(full),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
602 }
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
603
38062
17f7b44367bb hgweb: wrap {fentries} and {dentries} of manifest with mappinggenerator
Yuya Nishihara <yuya@tcha.org>
parents: 38061
diff changeset
604 def dirlist(context):
8209
a1a5a57efe90 replace util.sort with sorted built-in
Matt Mackall <mpm@selenic.com>
parents: 7966
diff changeset
605 for d in sorted(dirs):
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
606
7305
c21d236ca897 hgweb: descend empty directories in web view
Ry4an Brase <ry4an-hg@ry4an.org>
parents: 7300
diff changeset
607 emptydirs = []
c21d236ca897 hgweb: descend empty directories in web view
Ry4an Brase <ry4an-hg@ry4an.org>
parents: 7300
diff changeset
608 h = dirs[d]
c21d236ca897 hgweb: descend empty directories in web view
Ry4an Brase <ry4an-hg@ry4an.org>
parents: 7300
diff changeset
609 while isinstance(h, dict) and len(h) == 1:
36274
a748a5d1d7c3 webcommands: unpack contents of length-1 dict portably
Augie Fackler <augie@google.com>
parents: 36248
diff changeset
610 k, v = next(iter(h.items()))
7305
c21d236ca897 hgweb: descend empty directories in web view
Ry4an Brase <ry4an-hg@ry4an.org>
parents: 7300
diff changeset
611 if v:
c21d236ca897 hgweb: descend empty directories in web view
Ry4an Brase <ry4an-hg@ry4an.org>
parents: 7300
diff changeset
612 emptydirs.append(k)
c21d236ca897 hgweb: descend empty directories in web view
Ry4an Brase <ry4an-hg@ry4an.org>
parents: 7300
diff changeset
613 h = v
c21d236ca897 hgweb: descend empty directories in web view
Ry4an Brase <ry4an-hg@ry4an.org>
parents: 7300
diff changeset
614
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
615 path = b"%s%s" % (abspath, d)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
616 yield {
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
617 b"parity": next(parity),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
618 b"path": path,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
619 b"emptydirs": b"/".join(emptydirs),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
620 b"basename": d,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
621 }
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
622
36883
061635d4221c hgweb: add a sendtemplate() helper function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36882
diff changeset
623 return web.sendtemplate(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
624 b'manifest',
36871
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
625 symrev=symrev,
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
626 path=abspath,
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
627 up=webutil.up(abspath),
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
628 upparity=next(parity),
38062
17f7b44367bb hgweb: wrap {fentries} and {dentries} of manifest with mappinggenerator
Yuya Nishihara <yuya@tcha.org>
parents: 38061
diff changeset
629 fentries=templateutil.mappinggenerator(filelist),
17f7b44367bb hgweb: wrap {fentries} and {dentries} of manifest with mappinggenerator
Yuya Nishihara <yuya@tcha.org>
parents: 38061
diff changeset
630 dentries=templateutil.mappinggenerator(dirlist),
36871
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
631 archives=web.archivelist(hex(node)),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
632 **pycompat.strkwargs(webutil.commonentry(web.repo, ctx))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
633 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
634
5591
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff changeset
635
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
636 @webcommand(b'tags')
36887
4daa22071d5d hgweb: stop passing req and tmpl into @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36886
diff changeset
637 def tags(web):
24084
ef06e2b1a3d1 webcommands: document "tags" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24083
diff changeset
638 """
ef06e2b1a3d1 webcommands: document "tags" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24083
diff changeset
639 /tags
ef06e2b1a3d1 webcommands: document "tags" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24083
diff changeset
640 -----
ef06e2b1a3d1 webcommands: document "tags" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24083
diff changeset
641
ef06e2b1a3d1 webcommands: document "tags" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24083
diff changeset
642 Show information about tags.
ef06e2b1a3d1 webcommands: document "tags" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24083
diff changeset
643
ef06e2b1a3d1 webcommands: document "tags" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24083
diff changeset
644 No arguments are accepted.
ef06e2b1a3d1 webcommands: document "tags" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24083
diff changeset
645
ef06e2b1a3d1 webcommands: document "tags" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24083
diff changeset
646 The ``tags`` template is rendered.
ef06e2b1a3d1 webcommands: document "tags" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24083
diff changeset
647 """
18029
109a6a9dcca8 hgweb: fix iterator reuse in atom feed generation
Matt Mackall <mpm@selenic.com>
parents: 17322
diff changeset
648 i = list(reversed(web.repo.tagslist()))
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
649 parity = paritygen(web.stripecount)
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
650
38063
3c995af3066e hgweb: wrap {entries}* of tags with mappinggenerator
Yuya Nishihara <yuya@tcha.org>
parents: 38062
diff changeset
651 def entries(context, notip, latestonly):
18402
bfba6d954108 hgweb: `limit` argument is actually `latestonly` renames and enforce
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18352
diff changeset
652 t = i
bfba6d954108 hgweb: `limit` argument is actually `latestonly` renames and enforce
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18352
diff changeset
653 if notip:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
654 t = [(k, n) for k, n in i if k != b"tip"]
18402
bfba6d954108 hgweb: `limit` argument is actually `latestonly` renames and enforce
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18352
diff changeset
655 if latestonly:
bfba6d954108 hgweb: `limit` argument is actually `latestonly` renames and enforce
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18352
diff changeset
656 t = t[:1]
bfba6d954108 hgweb: `limit` argument is actually `latestonly` renames and enforce
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18352
diff changeset
657 for k, n in t:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
658 yield {
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
659 b"parity": next(parity),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
660 b"tag": k,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
661 b"date": web.repo[n].date(),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
662 b"node": hex(n),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
663 }
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
664
36883
061635d4221c hgweb: add a sendtemplate() helper function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36882
diff changeset
665 return web.sendtemplate(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
666 b'tags',
36871
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
667 node=hex(web.repo.changelog.tip()),
38063
3c995af3066e hgweb: wrap {entries}* of tags with mappinggenerator
Yuya Nishihara <yuya@tcha.org>
parents: 38062
diff changeset
668 entries=templateutil.mappinggenerator(entries, args=(False, False)),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
669 entriesnotip=templateutil.mappinggenerator(entries, args=(True, False)),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
670 latestentry=templateutil.mappinggenerator(entries, args=(True, True)),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
671 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
672
5591
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff changeset
673
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
674 @webcommand(b'bookmarks')
36887
4daa22071d5d hgweb: stop passing req and tmpl into @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36886
diff changeset
675 def bookmarks(web):
24083
5fbb5217a6c8 webcommands: document "bookmarks" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24082
diff changeset
676 """
5fbb5217a6c8 webcommands: document "bookmarks" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24082
diff changeset
677 /bookmarks
5fbb5217a6c8 webcommands: document "bookmarks" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24082
diff changeset
678 ----------
5fbb5217a6c8 webcommands: document "bookmarks" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24082
diff changeset
679
5fbb5217a6c8 webcommands: document "bookmarks" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24082
diff changeset
680 Show information about bookmarks.
5fbb5217a6c8 webcommands: document "bookmarks" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24082
diff changeset
681
5fbb5217a6c8 webcommands: document "bookmarks" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24082
diff changeset
682 No arguments are accepted.
5fbb5217a6c8 webcommands: document "bookmarks" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24082
diff changeset
683
5fbb5217a6c8 webcommands: document "bookmarks" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24082
diff changeset
684 The ``bookmarks`` template is rendered.
5fbb5217a6c8 webcommands: document "bookmarks" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24082
diff changeset
685 """
18478
886936ecc21b hgweb: don't attempt to show hidden bookmarks (issue3774)
Kevin Bullock <kbullock@ringworld.org>
parents: 18477
diff changeset
686 i = [b for b in web.repo._bookmarks.items() if b[1] in web.repo]
28711
06ae7a6daad0 hgweb: sort bookmarks in revlog order of their nodes
Anton Shestakov <av6@dwimlabs.net>
parents: 28710
diff changeset
687 sortkey = lambda b: (web.repo[b[1]].rev(), b[0])
06ae7a6daad0 hgweb: sort bookmarks in revlog order of their nodes
Anton Shestakov <av6@dwimlabs.net>
parents: 28710
diff changeset
688 i = sorted(i, key=sortkey, reverse=True)
13597
38c9837b1f75 hgweb: add separate page with bookmarks listing
Alexander Solovyov <alexander@solovyov.net>
parents: 13596
diff changeset
689 parity = paritygen(web.stripecount)
38c9837b1f75 hgweb: add separate page with bookmarks listing
Alexander Solovyov <alexander@solovyov.net>
parents: 13596
diff changeset
690
38134
edacd831afab hgweb: wrap {entries}* of bookmarks with mappinggenerator
Yuya Nishihara <yuya@tcha.org>
parents: 38063
diff changeset
691 def entries(context, latestonly):
28710
ca0c0ca30c62 hgweb: sort bookmarks early
Anton Shestakov <av6@dwimlabs.net>
parents: 28212
diff changeset
692 t = i
18402
bfba6d954108 hgweb: `limit` argument is actually `latestonly` renames and enforce
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18352
diff changeset
693 if latestonly:
28710
ca0c0ca30c62 hgweb: sort bookmarks early
Anton Shestakov <av6@dwimlabs.net>
parents: 28212
diff changeset
694 t = i[:1]
18402
bfba6d954108 hgweb: `limit` argument is actually `latestonly` renames and enforce
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18352
diff changeset
695 for k, n in t:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
696 yield {
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
697 b"parity": next(parity),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
698 b"bookmark": k,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
699 b"date": web.repo[n].date(),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
700 b"node": hex(n),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
701 }
13597
38c9837b1f75 hgweb: add separate page with bookmarks listing
Alexander Solovyov <alexander@solovyov.net>
parents: 13596
diff changeset
702
28712
80e922479891 hgweb: generate last change date for an empty atom-bookmarks feed (issue5022)
Anton Shestakov <av6@dwimlabs.net>
parents: 28711
diff changeset
703 if i:
80e922479891 hgweb: generate last change date for an empty atom-bookmarks feed (issue5022)
Anton Shestakov <av6@dwimlabs.net>
parents: 28711
diff changeset
704 latestrev = i[0][1]
80e922479891 hgweb: generate last change date for an empty atom-bookmarks feed (issue5022)
Anton Shestakov <av6@dwimlabs.net>
parents: 28711
diff changeset
705 else:
80e922479891 hgweb: generate last change date for an empty atom-bookmarks feed (issue5022)
Anton Shestakov <av6@dwimlabs.net>
parents: 28711
diff changeset
706 latestrev = -1
38135
5e94d07b290a hgweb: wrap {lastchange} of bookmarks with mappinglist
Yuya Nishihara <yuya@tcha.org>
parents: 38134
diff changeset
707 lastdate = web.repo[latestrev].date()
28712
80e922479891 hgweb: generate last change date for an empty atom-bookmarks feed (issue5022)
Anton Shestakov <av6@dwimlabs.net>
parents: 28711
diff changeset
708
36883
061635d4221c hgweb: add a sendtemplate() helper function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36882
diff changeset
709 return web.sendtemplate(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
710 b'bookmarks',
36871
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
711 node=hex(web.repo.changelog.tip()),
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
712 lastchange=templateutil.mappinglist([{b'date': lastdate}]),
38134
edacd831afab hgweb: wrap {entries}* of bookmarks with mappinggenerator
Yuya Nishihara <yuya@tcha.org>
parents: 38063
diff changeset
713 entries=templateutil.mappinggenerator(entries, args=(False,)),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
714 latestentry=templateutil.mappinggenerator(entries, args=(True,)),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
715 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
716
13597
38c9837b1f75 hgweb: add separate page with bookmarks listing
Alexander Solovyov <alexander@solovyov.net>
parents: 13596
diff changeset
717
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
718 @webcommand(b'branches')
36887
4daa22071d5d hgweb: stop passing req and tmpl into @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36886
diff changeset
719 def branches(web):
24082
32dabf811b39 webcommands: document "branches" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24081
diff changeset
720 """
32dabf811b39 webcommands: document "branches" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24081
diff changeset
721 /branches
32dabf811b39 webcommands: document "branches" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24081
diff changeset
722 ---------
32dabf811b39 webcommands: document "branches" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24081
diff changeset
723
32dabf811b39 webcommands: document "branches" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24081
diff changeset
724 Show information about branches.
32dabf811b39 webcommands: document "branches" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24081
diff changeset
725
32dabf811b39 webcommands: document "branches" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24081
diff changeset
726 All known branches are contained in the output, even closed branches.
32dabf811b39 webcommands: document "branches" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24081
diff changeset
727
32dabf811b39 webcommands: document "branches" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24081
diff changeset
728 No arguments are accepted.
32dabf811b39 webcommands: document "branches" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24081
diff changeset
729
32dabf811b39 webcommands: document "branches" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24081
diff changeset
730 The ``branches`` template is rendered.
32dabf811b39 webcommands: document "branches" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24081
diff changeset
731 """
26129
a103ecb8a04a hgweb: move branchentries code from webcommands to webutil
Anton Shestakov <av6@dwimlabs.net>
parents: 25660
diff changeset
732 entries = webutil.branchentries(web.repo, web.stripecount)
a103ecb8a04a hgweb: move branchentries code from webcommands to webutil
Anton Shestakov <av6@dwimlabs.net>
parents: 25660
diff changeset
733 latestentry = webutil.branchentries(web.repo, web.stripecount, 1)
36871
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
734
36883
061635d4221c hgweb: add a sendtemplate() helper function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36882
diff changeset
735 return web.sendtemplate(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
736 b'branches',
36871
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
737 node=hex(web.repo.changelog.tip()),
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
738 entries=entries,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
739 latestentry=latestentry,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
740 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
741
8352
eefcb59d44d6 webcommands: add 'branches' command, similar to 'tags'
Sune Foldager <cryo@cyanite.org>
parents: 8236
diff changeset
742
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
743 @webcommand(b'summary')
36887
4daa22071d5d hgweb: stop passing req and tmpl into @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36886
diff changeset
744 def summary(web):
24091
6b6ec887c79b webcommands: document "summary" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24090
diff changeset
745 """
6b6ec887c79b webcommands: document "summary" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24090
diff changeset
746 /summary
6b6ec887c79b webcommands: document "summary" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24090
diff changeset
747 --------
6b6ec887c79b webcommands: document "summary" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24090
diff changeset
748
6b6ec887c79b webcommands: document "summary" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24090
diff changeset
749 Show a summary of repository state.
6b6ec887c79b webcommands: document "summary" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24090
diff changeset
750
6b6ec887c79b webcommands: document "summary" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24090
diff changeset
751 Information about the latest changesets, bookmarks, tags, and branches
6b6ec887c79b webcommands: document "summary" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24090
diff changeset
752 is captured by this handler.
6b6ec887c79b webcommands: document "summary" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24090
diff changeset
753
6b6ec887c79b webcommands: document "summary" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24090
diff changeset
754 The ``summary`` template is rendered.
6b6ec887c79b webcommands: document "summary" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24090
diff changeset
755 """
17261
c0068b058fcd webcommands: do not modify repo.tagslist()
Patrick Mezard <patrick@mezard.eu>
parents: 17202
diff changeset
756 i = reversed(web.repo.tagslist())
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
757
37401
7d94fe3ea0ac hgweb: fix summary {tags} and {shortlog} to not forcibly expand template
Yuya Nishihara <yuya@tcha.org>
parents: 37400
diff changeset
758 def tagentries(context):
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
759 parity = paritygen(web.stripecount)
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
760 count = 0
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
761 for k, n in i:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
762 if k == b"tip": # skip tip
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
763 continue
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
764
6659
bc553c6d1ef9 webcommands: fix increments lost by 894875eae49b
Andrew Beekhof <beekhof@gmail.com>
parents: 6657
diff changeset
765 count += 1
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
766 if count > 10: # limit to 10 tags
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
767 break
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
768
37401
7d94fe3ea0ac hgweb: fix summary {tags} and {shortlog} to not forcibly expand template
Yuya Nishihara <yuya@tcha.org>
parents: 37400
diff changeset
769 yield {
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
770 b'parity': next(parity),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
771 b'tag': k,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
772 b'node': hex(n),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
773 b'date': web.repo[n].date(),
37401
7d94fe3ea0ac hgweb: fix summary {tags} and {shortlog} to not forcibly expand template
Yuya Nishihara <yuya@tcha.org>
parents: 37400
diff changeset
774 }
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
775
38136
e4a43d261715 hgweb: wrap {bookmarks} of summary with mappinggenerator
Yuya Nishihara <yuya@tcha.org>
parents: 38135
diff changeset
776 def bookmarks(context):
13924
ea726c97c1b6 hgweb: add bookmarks listing to summary page of gitweb/monoblue styles
Yuya Nishihara <yuya@tcha.org>
parents: 13923
diff changeset
777 parity = paritygen(web.stripecount)
18563
6d098adc5a46 hgweb: make 'summary' work with hidden changesets (issue3810)
Kevin Bullock <kbullock@ringworld.org>
parents: 18524
diff changeset
778 marks = [b for b in web.repo._bookmarks.items() if b[1] in web.repo]
28711
06ae7a6daad0 hgweb: sort bookmarks in revlog order of their nodes
Anton Shestakov <av6@dwimlabs.net>
parents: 28710
diff changeset
779 sortkey = lambda b: (web.repo[b[1]].rev(), b[0])
06ae7a6daad0 hgweb: sort bookmarks in revlog order of their nodes
Anton Shestakov <av6@dwimlabs.net>
parents: 28710
diff changeset
780 marks = sorted(marks, key=sortkey, reverse=True)
06ae7a6daad0 hgweb: sort bookmarks in revlog order of their nodes
Anton Shestakov <av6@dwimlabs.net>
parents: 28710
diff changeset
781 for k, n in marks[:10]: # limit to 10 bookmarks
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
782 yield {
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
783 b'parity': next(parity),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
784 b'bookmark': k,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
785 b'date': web.repo[n].date(),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
786 b'node': hex(n),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
787 }
13924
ea726c97c1b6 hgweb: add bookmarks listing to summary page of gitweb/monoblue styles
Yuya Nishihara <yuya@tcha.org>
parents: 13923
diff changeset
788
37401
7d94fe3ea0ac hgweb: fix summary {tags} and {shortlog} to not forcibly expand template
Yuya Nishihara <yuya@tcha.org>
parents: 37400
diff changeset
789 def changelist(context):
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
790 parity = paritygen(web.stripecount, offset=start - end)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
791 l = [] # build a list in forward order for efficiency
18563
6d098adc5a46 hgweb: make 'summary' work with hidden changesets (issue3810)
Kevin Bullock <kbullock@ringworld.org>
parents: 18524
diff changeset
792 revs = []
6d098adc5a46 hgweb: make 'summary' work with hidden changesets (issue3810)
Kevin Bullock <kbullock@ringworld.org>
parents: 18524
diff changeset
793 if start < end:
6d098adc5a46 hgweb: make 'summary' work with hidden changesets (issue3810)
Kevin Bullock <kbullock@ringworld.org>
parents: 18524
diff changeset
794 revs = web.repo.changelog.revs(start, end - 1)
6d098adc5a46 hgweb: make 'summary' work with hidden changesets (issue3810)
Kevin Bullock <kbullock@ringworld.org>
parents: 18524
diff changeset
795 for i in revs:
6747
f6c00b17387c use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents: 6720
diff changeset
796 ctx = web.repo[i]
37019
c97b936d8bb5 templater: use named function to expand template against mapping dict (API)
Yuya Nishihara <yuya@tcha.org>
parents: 36977
diff changeset
797 lm = webutil.commonentry(web.repo, ctx)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
798 lm[b'parity'] = next(parity)
37401
7d94fe3ea0ac hgweb: fix summary {tags} and {shortlog} to not forcibly expand template
Yuya Nishihara <yuya@tcha.org>
parents: 37400
diff changeset
799 l.append(lm)
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
800
29382
e4b777fe1576 templates: add support for summary webcommand in json style
Laura Médioni <laura.medioni@logilab.fr>
parents: 29325
diff changeset
801 for entry in reversed(l):
e4b777fe1576 templates: add support for summary webcommand in json style
Laura Médioni <laura.medioni@logilab.fr>
parents: 29325
diff changeset
802 yield entry
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
803
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
804 tip = web.repo[b'tip']
12059
0de6cfdcaad8 webcommands: remove unncessary access to repo.changelog
Patrick Mezard <pmezard@gmail.com>
parents: 11332
diff changeset
805 count = len(web.repo)
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
806 start = max(0, count - web.maxchanges)
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
807 end = min(count, start + web.maxchanges)
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
808
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
809 desc = web.config(b"web", b"description")
34238
a6c18628dff1 configitems: register the 'web.description' config
Boris Feld <boris.feld@octobus.net>
parents: 34083
diff changeset
810 if not desc:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
811 desc = b'unknown'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
812 labels = web.configlist(b'web', b'labels')
36871
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
813
36883
061635d4221c hgweb: add a sendtemplate() helper function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36882
diff changeset
814 return web.sendtemplate(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
815 b'summary',
36871
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
816 desc=desc,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
817 owner=get_contact(web.config) or b'unknown',
36871
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
818 lastchange=tip.date(),
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
819 tags=templateutil.mappinggenerator(tagentries, name=b'tagentry'),
38136
e4a43d261715 hgweb: wrap {bookmarks} of summary with mappinggenerator
Yuya Nishihara <yuya@tcha.org>
parents: 38135
diff changeset
820 bookmarks=templateutil.mappinggenerator(bookmarks),
36871
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
821 branches=webutil.branchentries(web.repo, web.stripecount, 10),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
822 shortlog=templateutil.mappinggenerator(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
823 changelist, name=b'shortlogentry'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
824 ),
36871
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
825 node=tip.hex(),
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
826 symrev=b'tip',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
827 archives=web.archivelist(b'tip'),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
828 labels=templateutil.hybridlist(labels, name=b'label'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
829 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
830
5591
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff changeset
831
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
832 @webcommand(b'filediff')
36887
4daa22071d5d hgweb: stop passing req and tmpl into @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36886
diff changeset
833 def filediff(web):
24092
55dfea651b7f webcommands: document "filediff" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24091
diff changeset
834 """
55dfea651b7f webcommands: document "filediff" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24091
diff changeset
835 /diff/{revision}/{path}
55dfea651b7f webcommands: document "filediff" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24091
diff changeset
836 -----------------------
55dfea651b7f webcommands: document "filediff" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24091
diff changeset
837
55dfea651b7f webcommands: document "filediff" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24091
diff changeset
838 Show how a file changed in a particular commit.
55dfea651b7f webcommands: document "filediff" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24091
diff changeset
839
55dfea651b7f webcommands: document "filediff" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24091
diff changeset
840 The ``filediff`` template is rendered.
55dfea651b7f webcommands: document "filediff" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24091
diff changeset
841
26781
1aee2ab0f902 spelling: trivial spell checking
Mads Kiilerich <madski@unity3d.com>
parents: 26136
diff changeset
842 This handler is registered under both the ``/diff`` and ``/filediff``
24092
55dfea651b7f webcommands: document "filediff" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24091
diff changeset
843 paths. ``/diff`` is used in modern code.
55dfea651b7f webcommands: document "filediff" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24091
diff changeset
844 """
7183
099b4f9be5ab hgweb: working diff for removed files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7182
diff changeset
845 fctx, ctx = None, None
099b4f9be5ab hgweb: working diff for removed files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7182
diff changeset
846 try:
36886
563fd95a6efb hgweb: pass modern request type into various webutil functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36885
diff changeset
847 fctx = webutil.filectx(web.repo, web.req)
7280
810ca383da9c remove unused variables
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 7183
diff changeset
848 except LookupError:
36886
563fd95a6efb hgweb: pass modern request type into various webutil functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36885
diff changeset
849 ctx = webutil.changectx(web.repo, web.req)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
850 path = webutil.cleanpath(web.repo, web.req.qsparams[b'file'])
7183
099b4f9be5ab hgweb: working diff for removed files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7182
diff changeset
851 if path not in ctx.files():
099b4f9be5ab hgweb: working diff for removed files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7182
diff changeset
852 raise
099b4f9be5ab hgweb: working diff for removed files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7182
diff changeset
853
099b4f9be5ab hgweb: working diff for removed files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7182
diff changeset
854 if fctx is not None:
099b4f9be5ab hgweb: working diff for removed files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7182
diff changeset
855 path = fctx.path()
16722
7bf48bc7de23 hgweb: fix filediff base calculation
Matt Mackall <mpm@selenic.com>
parents: 16469
diff changeset
856 ctx = fctx.changectx()
31082
abb92b3d370e hgweb: explictly pass basectx in webutil.diffs
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31024
diff changeset
857 basectx = ctx.p1()
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
858
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
859 style = web.config(b'web', b'style')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
860 if b'style' in web.req.qsparams:
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
861 style = web.req.qsparams[b'style']
9402
5d49fdef6fd0 hgweb: show diff header line in raw diffs
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8842
diff changeset
862
36885
c68e79dcf21c hgweb: don't redundantly pass templater with requestcontext (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36884
diff changeset
863 diffs = webutil.diffs(web, ctx, basectx, [path], style)
27160
c533435cbc37 webcommands: test that fctx is not None in filediff()
Anton Shestakov <av6@dwimlabs.net>
parents: 27159
diff changeset
864 if fctx is not None:
24306
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 24177
diff changeset
865 rename = webutil.renamelink(fctx)
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 24177
diff changeset
866 ctx = fctx
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 24177
diff changeset
867 else:
37902
2095331ff926 hgweb: wrap {rename} with mappinglist
Yuya Nishihara <yuya@tcha.org>
parents: 37698
diff changeset
868 rename = templateutil.mappinglist([])
24306
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 24177
diff changeset
869 ctx = ctx
36871
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
870
36883
061635d4221c hgweb: add a sendtemplate() helper function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36882
diff changeset
871 return web.sendtemplate(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
872 b'filediff',
36871
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
873 file=path,
36886
563fd95a6efb hgweb: pass modern request type into various webutil functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36885
diff changeset
874 symrev=webutil.symrevorshortnode(web.req, ctx),
36871
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
875 rename=rename,
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
876 diff=diffs,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
877 **pycompat.strkwargs(webutil.commonentry(web.repo, ctx))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
878 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
879
5591
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff changeset
880
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
881 diff = webcommand(b'diff')(filediff)
5591
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff changeset
882
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
883
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
884 @webcommand(b'comparison')
36887
4daa22071d5d hgweb: stop passing req and tmpl into @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36886
diff changeset
885 def comparison(web):
24093
c8639f90a715 webcommands: document "comparison" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24092
diff changeset
886 """
c8639f90a715 webcommands: document "comparison" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24092
diff changeset
887 /comparison/{revision}/{path}
c8639f90a715 webcommands: document "comparison" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24092
diff changeset
888 -----------------------------
c8639f90a715 webcommands: document "comparison" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24092
diff changeset
889
c8639f90a715 webcommands: document "comparison" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24092
diff changeset
890 Show a comparison between the old and new versions of a file from changes
c8639f90a715 webcommands: document "comparison" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24092
diff changeset
891 made on a particular revision.
c8639f90a715 webcommands: document "comparison" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24092
diff changeset
892
c8639f90a715 webcommands: document "comparison" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24092
diff changeset
893 This is similar to the ``diff`` handler. However, this form features
c8639f90a715 webcommands: document "comparison" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24092
diff changeset
894 a split or side-by-side diff rather than a unified diff.
c8639f90a715 webcommands: document "comparison" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24092
diff changeset
895
c8639f90a715 webcommands: document "comparison" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24092
diff changeset
896 The ``context`` query string argument can be used to control the lines of
c8639f90a715 webcommands: document "comparison" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24092
diff changeset
897 context in the diff.
c8639f90a715 webcommands: document "comparison" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24092
diff changeset
898
c8639f90a715 webcommands: document "comparison" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24092
diff changeset
899 The ``filecomparison`` template is rendered.
c8639f90a715 webcommands: document "comparison" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24092
diff changeset
900 """
36886
563fd95a6efb hgweb: pass modern request type into various webutil functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36885
diff changeset
901 ctx = webutil.changectx(web.repo, web.req)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
902 if b'file' not in web.req.qsparams:
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
903 raise ErrorResponse(HTTP_NOT_FOUND, b'file not given')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
904 path = webutil.cleanpath(web.repo, web.req.qsparams[b'file'])
17202
1ae119269ddc hgweb: side-by-side comparison functionality
wujek srujek
parents: 17146
diff changeset
905
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
906 parsecontext = lambda v: v == b'full' and -1 or int(v)
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
907 if b'context' in web.req.qsparams:
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
908 context = parsecontext(web.req.qsparams[b'context'])
17202
1ae119269ddc hgweb: side-by-side comparison functionality
wujek srujek
parents: 17146
diff changeset
909 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
910 context = parsecontext(web.config(b'web', b'comparisoncontext'))
17202
1ae119269ddc hgweb: side-by-side comparison functionality
wujek srujek
parents: 17146
diff changeset
911
17302
5c64ce6168da hgweb: fixes traceback for invalid files by removing top-level template
wujek srujek <wujek.srujek@googlemail.com>
parents: 17289
diff changeset
912 def filelines(f):
32136
f238a483a1fd webcommands: use fctx.isbinary
Jun Wu <quark@fb.com>
parents: 32070
diff changeset
913 if f.isbinary():
40158
9310037f0636 py3: pass str and return bytes from mimetypes.guess_type()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39794
diff changeset
914 mt = pycompat.sysbytes(
9310037f0636 py3: pass str and return bytes from mimetypes.guess_type()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39794
diff changeset
915 mimetypes.guess_type(pycompat.fsdecode(f.path()))[0]
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
916 or r'application/octet-stream'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
917 )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
918 return [_(b'(binary file %s, hash: %s)') % (mt, hex(f.filenode()))]
17302
5c64ce6168da hgweb: fixes traceback for invalid files by removing top-level template
wujek srujek <wujek.srujek@googlemail.com>
parents: 17289
diff changeset
919 return f.data().splitlines()
5c64ce6168da hgweb: fixes traceback for invalid files by removing top-level template
wujek srujek <wujek.srujek@googlemail.com>
parents: 17289
diff changeset
920
27158
522ffc189671 webcommands: get correct parents when comparing a removed file (issue4962)
Anton Shestakov <av6@dwimlabs.net>
parents: 27081
diff changeset
921 fctx = None
21123
92fab48dfec1 hgweb: show revisions and hashes gotten from changelog in "comparison" page
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21121
diff changeset
922 parent = ctx.p1()
92fab48dfec1 hgweb: show revisions and hashes gotten from changelog in "comparison" page
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21121
diff changeset
923 leftrev = parent.rev()
92fab48dfec1 hgweb: show revisions and hashes gotten from changelog in "comparison" page
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21121
diff changeset
924 leftnode = parent.node()
92fab48dfec1 hgweb: show revisions and hashes gotten from changelog in "comparison" page
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21121
diff changeset
925 rightrev = ctx.rev()
39794
4f44f747f094 hgweb: use scmutil.binnode() to translate None to wdir hash (issue5988)
Yuya Nishihara <yuya@tcha.org>
parents: 39793
diff changeset
926 rightnode = scmutil.binnode(ctx)
17302
5c64ce6168da hgweb: fixes traceback for invalid files by removing top-level template
wujek srujek <wujek.srujek@googlemail.com>
parents: 17289
diff changeset
927 if path in ctx:
5c64ce6168da hgweb: fixes traceback for invalid files by removing top-level template
wujek srujek <wujek.srujek@googlemail.com>
parents: 17289
diff changeset
928 fctx = ctx[path]
5c64ce6168da hgweb: fixes traceback for invalid files by removing top-level template
wujek srujek <wujek.srujek@googlemail.com>
parents: 17289
diff changeset
929 rightlines = filelines(fctx)
21121
8c9e84b44221 hgweb: make "comparison" get parent from not filelog but changelog
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 20761
diff changeset
930 if path not in parent:
17302
5c64ce6168da hgweb: fixes traceback for invalid files by removing top-level template
wujek srujek <wujek.srujek@googlemail.com>
parents: 17289
diff changeset
931 leftlines = ()
5c64ce6168da hgweb: fixes traceback for invalid files by removing top-level template
wujek srujek <wujek.srujek@googlemail.com>
parents: 17289
diff changeset
932 else:
21121
8c9e84b44221 hgweb: make "comparison" get parent from not filelog but changelog
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 20761
diff changeset
933 pfctx = parent[path]
17302
5c64ce6168da hgweb: fixes traceback for invalid files by removing top-level template
wujek srujek <wujek.srujek@googlemail.com>
parents: 17289
diff changeset
934 leftlines = filelines(pfctx)
5c64ce6168da hgweb: fixes traceback for invalid files by removing top-level template
wujek srujek <wujek.srujek@googlemail.com>
parents: 17289
diff changeset
935 else:
5c64ce6168da hgweb: fixes traceback for invalid files by removing top-level template
wujek srujek <wujek.srujek@googlemail.com>
parents: 17289
diff changeset
936 rightlines = ()
41397
0bd56c291359 cleanup: use p1() and p2() instead of parents()[0] and parents()[1]
Martin von Zweigbergk <martinvonz@google.com>
parents: 40936
diff changeset
937 pfctx = ctx.p1()[path]
27158
522ffc189671 webcommands: get correct parents when comparing a removed file (issue4962)
Anton Shestakov <av6@dwimlabs.net>
parents: 27081
diff changeset
938 leftlines = filelines(pfctx)
17302
5c64ce6168da hgweb: fixes traceback for invalid files by removing top-level template
wujek srujek <wujek.srujek@googlemail.com>
parents: 17289
diff changeset
939
37993
623dc2651d26 hgweb: drop unused argument 'tmpl' from webutil.compare()
Yuya Nishihara <yuya@tcha.org>
parents: 37954
diff changeset
940 comparison = webutil.compare(context, leftlines, rightlines)
27158
522ffc189671 webcommands: get correct parents when comparing a removed file (issue4962)
Anton Shestakov <av6@dwimlabs.net>
parents: 27081
diff changeset
941 if fctx is not None:
27159
7e10b860c174 webcommands: stop using ersatz if-else ternary operator for rename variable
Anton Shestakov <av6@dwimlabs.net>
parents: 27158
diff changeset
942 rename = webutil.renamelink(fctx)
27158
522ffc189671 webcommands: get correct parents when comparing a removed file (issue4962)
Anton Shestakov <av6@dwimlabs.net>
parents: 27081
diff changeset
943 ctx = fctx
522ffc189671 webcommands: get correct parents when comparing a removed file (issue4962)
Anton Shestakov <av6@dwimlabs.net>
parents: 27081
diff changeset
944 else:
37902
2095331ff926 hgweb: wrap {rename} with mappinglist
Yuya Nishihara <yuya@tcha.org>
parents: 37698
diff changeset
945 rename = templateutil.mappinglist([])
27158
522ffc189671 webcommands: get correct parents when comparing a removed file (issue4962)
Anton Shestakov <av6@dwimlabs.net>
parents: 27081
diff changeset
946 ctx = ctx
36871
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
947
36883
061635d4221c hgweb: add a sendtemplate() helper function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36882
diff changeset
948 return web.sendtemplate(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
949 b'filecomparison',
36871
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
950 file=path,
36886
563fd95a6efb hgweb: pass modern request type into various webutil functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36885
diff changeset
951 symrev=webutil.symrevorshortnode(web.req, ctx),
36871
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
952 rename=rename,
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
953 leftrev=leftrev,
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
954 leftnode=hex(leftnode),
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
955 rightrev=rightrev,
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
956 rightnode=hex(rightnode),
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
957 comparison=comparison,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
958 **pycompat.strkwargs(webutil.commonentry(web.repo, ctx))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
959 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
960
17202
1ae119269ddc hgweb: side-by-side comparison functionality
wujek srujek
parents: 17146
diff changeset
961
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
962 @webcommand(b'annotate')
36887
4daa22071d5d hgweb: stop passing req and tmpl into @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36886
diff changeset
963 def annotate(web):
24094
9c810d46a093 webcommands: document "annotate" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24093
diff changeset
964 """
9c810d46a093 webcommands: document "annotate" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24093
diff changeset
965 /annotate/{revision}/{path}
9c810d46a093 webcommands: document "annotate" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24093
diff changeset
966 ---------------------------
9c810d46a093 webcommands: document "annotate" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24093
diff changeset
967
9c810d46a093 webcommands: document "annotate" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24093
diff changeset
968 Show changeset information for each line in a file.
9c810d46a093 webcommands: document "annotate" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24093
diff changeset
969
34390
f6492f482c60 hgweb: query string arguments to control whitespace for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 34246
diff changeset
970 The ``ignorews``, ``ignorewsamount``, ``ignorewseol``, and
f6492f482c60 hgweb: query string arguments to control whitespace for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 34246
diff changeset
971 ``ignoreblanklines`` query string arguments have the same meaning as
34403
407ebe7a9b93 hgweb: use parsebool for parsing diff query string options
Gregory Szorc <gregory.szorc@gmail.com>
parents: 34391
diff changeset
972 their ``[annotate]`` config equivalents. It uses the hgrc boolean
407ebe7a9b93 hgweb: use parsebool for parsing diff query string options
Gregory Szorc <gregory.szorc@gmail.com>
parents: 34391
diff changeset
973 parsing logic to interpret the value. e.g. ``0`` and ``false`` are
407ebe7a9b93 hgweb: use parsebool for parsing diff query string options
Gregory Szorc <gregory.szorc@gmail.com>
parents: 34391
diff changeset
974 false and ``1`` and ``true`` are true. If not defined, the server
407ebe7a9b93 hgweb: use parsebool for parsing diff query string options
Gregory Szorc <gregory.szorc@gmail.com>
parents: 34391
diff changeset
975 default settings are used.
34390
f6492f482c60 hgweb: query string arguments to control whitespace for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 34246
diff changeset
976
24094
9c810d46a093 webcommands: document "annotate" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24093
diff changeset
977 The ``fileannotate`` template is rendered.
9c810d46a093 webcommands: document "annotate" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24093
diff changeset
978 """
36886
563fd95a6efb hgweb: pass modern request type into various webutil functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36885
diff changeset
979 fctx = webutil.filectx(web.repo, web.req)
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
980 f = fctx.path()
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
981 parity = paritygen(web.stripecount)
39784
be0f32ca2671 hgweb: use heads() instead of headrevs()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39419
diff changeset
982 ishead = fctx.filenode() in fctx.filelog().heads()
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
983
30298
4ed8bb8a153f hgweb: cache fctx.parents() in annotate command (issue5414)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30081
diff changeset
984 # parents() is called once per line and several lines likely belong to
4ed8bb8a153f hgweb: cache fctx.parents() in annotate command (issue5414)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30081
diff changeset
985 # same revision. So it is worth caching.
4ed8bb8a153f hgweb: cache fctx.parents() in annotate command (issue5414)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30081
diff changeset
986 # TODO there are still redundant operations within basefilectx.parents()
4ed8bb8a153f hgweb: cache fctx.parents() in annotate command (issue5414)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30081
diff changeset
987 # and from the fctx.annotate() call itself that could be cached.
4ed8bb8a153f hgweb: cache fctx.parents() in annotate command (issue5414)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30081
diff changeset
988 parentscache = {}
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
989
38138
8e9ce73ceb15 hgweb: wrap {parents} of {annotate} with mappinggenerator
Yuya Nishihara <yuya@tcha.org>
parents: 38137
diff changeset
990 def parents(context, f):
30298
4ed8bb8a153f hgweb: cache fctx.parents() in annotate command (issue5414)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30081
diff changeset
991 rev = f.rev()
4ed8bb8a153f hgweb: cache fctx.parents() in annotate command (issue5414)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30081
diff changeset
992 if rev not in parentscache:
4ed8bb8a153f hgweb: cache fctx.parents() in annotate command (issue5414)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30081
diff changeset
993 parentscache[rev] = []
4ed8bb8a153f hgweb: cache fctx.parents() in annotate command (issue5414)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30081
diff changeset
994 for p in f.parents():
4ed8bb8a153f hgweb: cache fctx.parents() in annotate command (issue5414)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30081
diff changeset
995 entry = {
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
996 b'node': p.hex(),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
997 b'rev': p.rev(),
30298
4ed8bb8a153f hgweb: cache fctx.parents() in annotate command (issue5414)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30081
diff changeset
998 }
4ed8bb8a153f hgweb: cache fctx.parents() in annotate command (issue5414)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30081
diff changeset
999 parentscache[rev].append(entry)
4ed8bb8a153f hgweb: cache fctx.parents() in annotate command (issue5414)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30081
diff changeset
1000
4ed8bb8a153f hgweb: cache fctx.parents() in annotate command (issue5414)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30081
diff changeset
1001 for p in parentscache[rev]:
4ed8bb8a153f hgweb: cache fctx.parents() in annotate command (issue5414)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30081
diff changeset
1002 yield p
29522
9c37df347485 hgweb: add link to parents of annotated revision in annotate view
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 29471
diff changeset
1003
38137
3e6253438bf9 hgweb: wrap {annotate} with mappinggenerator
Yuya Nishihara <yuya@tcha.org>
parents: 38136
diff changeset
1004 def annotate(context):
32136
f238a483a1fd webcommands: use fctx.isbinary
Jun Wu <quark@fb.com>
parents: 32070
diff changeset
1005 if fctx.isbinary():
40158
9310037f0636 py3: pass str and return bytes from mimetypes.guess_type()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39794
diff changeset
1006 mt = pycompat.sysbytes(
9310037f0636 py3: pass str and return bytes from mimetypes.guess_type()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39794
diff changeset
1007 mimetypes.guess_type(pycompat.fsdecode(fctx.path()))[0]
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1008 or r'application/octet-stream'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1009 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1010 lines = [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1011 dagop.annotateline(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1012 fctx=fctx.filectx(fctx.filerev()),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1013 lineno=1,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1014 text=b'(binary:%s)' % mt,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1015 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1016 ]
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
1017 else:
36886
563fd95a6efb hgweb: pass modern request type into various webutil functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36885
diff changeset
1018 lines = webutil.annotate(web.req, fctx, web.repo.ui)
30081
dd0ff715a82c hgweb: make fctx.annotate a separated function so it could be wrapped
Jun Wu <quark@fb.com>
parents: 29572
diff changeset
1019
29388
f694e20193f2 hgweb: display blamed revision once per block in annotate view
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 29382
diff changeset
1020 previousrev = None
29572
d86b54d9bb0c paper: make different blocks of annotated lines have different colors
Anton Shestakov <av6@dwimlabs.net>
parents: 29538
diff changeset
1021 blockparitygen = paritygen(1)
37066
b33b91ca2ec2 annotate: pack line content into annotateline object (API)
Yuya Nishihara <yuya@tcha.org>
parents: 37019
diff changeset
1022 for lineno, aline in enumerate(lines):
34432
2e32c6a31cc7 annotate: introduce attr for storing per-line annotate data
Siddharth Agarwal <sid0@fb.com>
parents: 34403
diff changeset
1023 f = aline.fctx
29388
f694e20193f2 hgweb: display blamed revision once per block in annotate view
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 29382
diff changeset
1024 rev = f.rev()
29572
d86b54d9bb0c paper: make different blocks of annotated lines have different colors
Anton Shestakov <av6@dwimlabs.net>
parents: 29538
diff changeset
1025 if rev != previousrev:
d86b54d9bb0c paper: make different blocks of annotated lines have different colors
Anton Shestakov <av6@dwimlabs.net>
parents: 29538
diff changeset
1026 blockhead = True
d86b54d9bb0c paper: make different blocks of annotated lines have different colors
Anton Shestakov <av6@dwimlabs.net>
parents: 29538
diff changeset
1027 blockparity = next(blockparitygen)
d86b54d9bb0c paper: make different blocks of annotated lines have different colors
Anton Shestakov <av6@dwimlabs.net>
parents: 29538
diff changeset
1028 else:
d86b54d9bb0c paper: make different blocks of annotated lines have different colors
Anton Shestakov <av6@dwimlabs.net>
parents: 29538
diff changeset
1029 blockhead = None
29388
f694e20193f2 hgweb: display blamed revision once per block in annotate view
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 29382
diff changeset
1030 previousrev = rev
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1031 yield {
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1032 b"parity": next(parity),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1033 b"node": f.hex(),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1034 b"rev": rev,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1035 b"author": f.user(),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1036 b"parents": templateutil.mappinggenerator(parents, args=(f,)),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1037 b"desc": f.description(),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1038 b"extra": f.extra(),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1039 b"file": f.path(),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1040 b"blockhead": blockhead,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1041 b"blockparity": blockparity,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1042 b"targetline": aline.lineno,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1043 b"line": aline.text,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1044 b"lineno": lineno + 1,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1045 b"lineid": b"l%d" % (lineno + 1),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1046 b"linenumber": b"% 6d" % (lineno + 1),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1047 b"revdate": f.date(),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1048 }
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
1049
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1050 diffopts = webutil.difffeatureopts(web.req, web.repo.ui, b'annotate')
34391
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 34390
diff changeset
1051 diffopts = {k: getattr(diffopts, k) for k in diffopts.defaults}
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 34390
diff changeset
1052
36883
061635d4221c hgweb: add a sendtemplate() helper function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36882
diff changeset
1053 return web.sendtemplate(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1054 b'fileannotate',
36871
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
1055 file=f,
38137
3e6253438bf9 hgweb: wrap {annotate} with mappinggenerator
Yuya Nishihara <yuya@tcha.org>
parents: 38136
diff changeset
1056 annotate=templateutil.mappinggenerator(annotate),
36871
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
1057 path=webutil.up(f),
36886
563fd95a6efb hgweb: pass modern request type into various webutil functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36885
diff changeset
1058 symrev=webutil.symrevorshortnode(web.req, fctx),
36871
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
1059 rename=webutil.renamelink(fctx),
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
1060 permissions=fctx.manifest().flags(f),
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
1061 ishead=int(ishead),
38139
d32f07069dd1 hgweb: wrap {diffopts} of annotate by hybriddict()
Yuya Nishihara <yuya@tcha.org>
parents: 38138
diff changeset
1062 diffopts=templateutil.hybriddict(diffopts),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1063 **pycompat.strkwargs(webutil.commonentry(web.repo, fctx))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1064 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1065
5591
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff changeset
1066
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1067 @webcommand(b'filelog')
36887
4daa22071d5d hgweb: stop passing req and tmpl into @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36886
diff changeset
1068 def filelog(web):
24095
1f48b157dccf webcommands: document "filelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24094
diff changeset
1069 """
1f48b157dccf webcommands: document "filelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24094
diff changeset
1070 /filelog/{revision}/{path}
1f48b157dccf webcommands: document "filelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24094
diff changeset
1071 --------------------------
1f48b157dccf webcommands: document "filelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24094
diff changeset
1072
1f48b157dccf webcommands: document "filelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24094
diff changeset
1073 Show information about the history of a file in the repository.
1f48b157dccf webcommands: document "filelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24094
diff changeset
1074
1f48b157dccf webcommands: document "filelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24094
diff changeset
1075 The ``revcount`` query string argument can be defined to control the
1f48b157dccf webcommands: document "filelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24094
diff changeset
1076 maximum number of entries to show.
1f48b157dccf webcommands: document "filelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24094
diff changeset
1077
1f48b157dccf webcommands: document "filelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24094
diff changeset
1078 The ``filelog`` template will be rendered.
1f48b157dccf webcommands: document "filelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24094
diff changeset
1079 """
7300
591767e6ea7a hgweb: conditionally show file logs for deleted files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7288
diff changeset
1080
591767e6ea7a hgweb: conditionally show file logs for deleted files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7288
diff changeset
1081 try:
36886
563fd95a6efb hgweb: pass modern request type into various webutil functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36885
diff changeset
1082 fctx = webutil.filectx(web.repo, web.req)
7300
591767e6ea7a hgweb: conditionally show file logs for deleted files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7288
diff changeset
1083 f = fctx.path()
591767e6ea7a hgweb: conditionally show file logs for deleted files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7288
diff changeset
1084 fl = fctx.filelog()
7633
08cabecfa8a8 errors: move revlog errors
Matt Mackall <mpm@selenic.com>
parents: 7622
diff changeset
1085 except error.LookupError:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1086 f = webutil.cleanpath(web.repo, web.req.qsparams[b'file'])
7300
591767e6ea7a hgweb: conditionally show file logs for deleted files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7288
diff changeset
1087 fl = web.repo.file(f)
591767e6ea7a hgweb: conditionally show file logs for deleted files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7288
diff changeset
1088 numrevs = len(fl)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1089 if not numrevs: # file doesn't exist at all
7300
591767e6ea7a hgweb: conditionally show file logs for deleted files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7288
diff changeset
1090 raise
36886
563fd95a6efb hgweb: pass modern request type into various webutil functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36885
diff changeset
1091 rev = webutil.changectx(web.repo, web.req).rev()
7361
9fe97eea5510 linkrev: take a revision number rather than a hash
Matt Mackall <mpm@selenic.com>
parents: 7345
diff changeset
1092 first = fl.linkrev(0)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1093 if rev < first: # current rev is from before file existed
7300
591767e6ea7a hgweb: conditionally show file logs for deleted files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7288
diff changeset
1094 raise
591767e6ea7a hgweb: conditionally show file logs for deleted files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7288
diff changeset
1095 frev = numrevs - 1
7361
9fe97eea5510 linkrev: take a revision number rather than a hash
Matt Mackall <mpm@selenic.com>
parents: 7345
diff changeset
1096 while fl.linkrev(frev) > rev:
7300
591767e6ea7a hgweb: conditionally show file logs for deleted files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7288
diff changeset
1097 frev -= 1
7361
9fe97eea5510 linkrev: take a revision number rather than a hash
Matt Mackall <mpm@selenic.com>
parents: 7345
diff changeset
1098 fctx = web.repo.filectx(f, fl.linkrev(frev))
7300
591767e6ea7a hgweb: conditionally show file logs for deleted files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7288
diff changeset
1099
10246
b9d02695bde4 hgweb: add less/more links to shortlog/filelog nav
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 10245
diff changeset
1100 revcount = web.maxshortchanges
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1101 if b'revcount' in web.req.qsparams:
20092
77acd8ce01ce hgweb: ignore non numeric "revcount" parameter values (issue4091)
Isaac Jurado <diptongo@gmail.com>
parents: 20004
diff changeset
1102 try:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1103 revcount = int(web.req.qsparams.get(b'revcount', revcount))
20092
77acd8ce01ce hgweb: ignore non numeric "revcount" parameter values (issue4091)
Isaac Jurado <diptongo@gmail.com>
parents: 20004
diff changeset
1104 revcount = max(revcount, 1)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1105 web.tmpl.defaults[b'sessionvars'][b'revcount'] = revcount
20092
77acd8ce01ce hgweb: ignore non numeric "revcount" parameter values (issue4091)
Isaac Jurado <diptongo@gmail.com>
parents: 20004
diff changeset
1106 except ValueError:
77acd8ce01ce hgweb: ignore non numeric "revcount" parameter values (issue4091)
Isaac Jurado <diptongo@gmail.com>
parents: 20004
diff changeset
1107 pass
10246
b9d02695bde4 hgweb: add less/more links to shortlog/filelog nav
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 10245
diff changeset
1108
36886
563fd95a6efb hgweb: pass modern request type into various webutil functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36885
diff changeset
1109 lrange = webutil.linerange(web.req)
31665
5e6d44511317 hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31661
diff changeset
1110
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1111 lessvars = copy.copy(web.tmpl.defaults[b'sessionvars'])
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1112 lessvars[b'revcount'] = max(revcount // 2, 1)
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1113 morevars = copy.copy(web.tmpl.defaults[b'sessionvars'])
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1114 morevars[b'revcount'] = revcount * 2
10246
b9d02695bde4 hgweb: add less/more links to shortlog/filelog nav
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 10245
diff changeset
1115
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1116 patch = b'patch' in web.req.qsparams
31661
f36dc643ffdc hgweb: add a "patch" query parameter to filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31660
diff changeset
1117 if patch:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1118 lessvars[b'patch'] = morevars[b'patch'] = web.req.qsparams[b'patch']
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1119 descend = b'descend' in web.req.qsparams
31939
604d31507f86 hgweb: handle a "descend" query parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31727
diff changeset
1120 if descend:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1121 lessvars[b'descend'] = morevars[b'descend'] = web.req.qsparams[
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1122 b'descend'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1123 ]
31661
f36dc643ffdc hgweb: add a "patch" query parameter to filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31660
diff changeset
1124
7300
591767e6ea7a hgweb: conditionally show file logs for deleted files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7288
diff changeset
1125 count = fctx.filerev() + 1
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1126 start = max(0, count - revcount) # first rev on this page
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1127 end = min(count, start + revcount) # last rev on this page
30825
4deb7c1a07ab hgweb: restore ascending iteration on revs in filelog web command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 30816
diff changeset
1128 parity = paritygen(web.stripecount, offset=start - end)
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
1129
30816
96f811bceb85 hgweb: build the "entries" list directly in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 30734
diff changeset
1130 repo = web.repo
37363
d3a2344446e6 hgweb: don't include hidden revisions in /filelog/ view
Martin von Zweigbergk <martinvonz@google.com>
parents: 37084
diff changeset
1131 filelog = fctx.filelog()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1132 revs = [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1133 filerev
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1134 for filerev in filelog.revs(start, end - 1)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1135 if filelog.linkrev(filerev) in repo
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1136 ]
30816
96f811bceb85 hgweb: build the "entries" list directly in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 30734
diff changeset
1137 entries = []
31661
f36dc643ffdc hgweb: add a "patch" query parameter to filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31660
diff changeset
1138
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1139 diffstyle = web.config(b'web', b'style')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1140 if b'style' in web.req.qsparams:
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1141 diffstyle = web.req.qsparams[b'style']
31661
f36dc643ffdc hgweb: add a "patch" query parameter to filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31660
diff changeset
1142
31667
e540846c67e0 hgweb: filter diff hunks when 'linerange' and 'patch' are specified in filelog
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31665
diff changeset
1143 def diff(fctx, linerange=None):
31661
f36dc643ffdc hgweb: add a "patch" query parameter to filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31660
diff changeset
1144 ctx = fctx.changectx()
f36dc643ffdc hgweb: add a "patch" query parameter to filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31660
diff changeset
1145 basectx = ctx.p1()
f36dc643ffdc hgweb: add a "patch" query parameter to filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31660
diff changeset
1146 path = fctx.path()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1147 return webutil.diffs(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1148 web,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1149 ctx,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1150 basectx,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1151 [path],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1152 diffstyle,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1153 linerange=linerange,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1154 lineidprefix=b'%s-' % ctx.hex()[:12],
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1155 )
31661
f36dc643ffdc hgweb: add a "patch" query parameter to filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31660
diff changeset
1156
31665
5e6d44511317 hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31661
diff changeset
1157 linerange = None
5e6d44511317 hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31661
diff changeset
1158 if lrange is not None:
46789
914ca0a98518 typing: add an assertion to mercurial/hgweb/webcommands.py to help pytype
Matt Harbison <matt_harbison@yahoo.com>
parents: 45378
diff changeset
1159 assert lrange is not None # help pytype (!?)
31665
5e6d44511317 hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31661
diff changeset
1160 linerange = webutil.formatlinerange(*lrange)
5e6d44511317 hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31661
diff changeset
1161 # deactivate numeric nav links when linerange is specified as this
5e6d44511317 hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31661
diff changeset
1162 # would required a dedicated "revnav" class
37698
7738ae638b62 hgweb: wrap {changenav} and {nav} with mappinglist
Yuya Nishihara <yuya@tcha.org>
parents: 37674
diff changeset
1163 nav = templateutil.mappinglist([])
31939
604d31507f86 hgweb: handle a "descend" query parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31727
diff changeset
1164 if descend:
32904
582080a4a812 dagop: move blockancestors() and blockdescendants() from context
Yuya Nishihara <yuya@tcha.org>
parents: 32566
diff changeset
1165 it = dagop.blockdescendants(fctx, *lrange)
31939
604d31507f86 hgweb: handle a "descend" query parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31727
diff changeset
1166 else:
32904
582080a4a812 dagop: move blockancestors() and blockdescendants() from context
Yuya Nishihara <yuya@tcha.org>
parents: 32566
diff changeset
1167 it = dagop.blockancestors(fctx, *lrange)
31939
604d31507f86 hgweb: handle a "descend" query parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31727
diff changeset
1168 for i, (c, lr) in enumerate(it, 1):
31665
5e6d44511317 hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31661
diff changeset
1169 diffs = None
5e6d44511317 hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31661
diff changeset
1170 if patch:
31667
e540846c67e0 hgweb: filter diff hunks when 'linerange' and 'patch' are specified in filelog
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31665
diff changeset
1171 diffs = diff(c, linerange=lr)
31665
5e6d44511317 hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31661
diff changeset
1172 # follow renames accross filtered (not in range) revisions
5e6d44511317 hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31661
diff changeset
1173 path = c.path()
38140
220058198be6 hgweb: don't use dict(key=value) to build a mapping dict in filelog
Yuya Nishihara <yuya@tcha.org>
parents: 38139
diff changeset
1174 lm = webutil.commonentry(repo, c)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1175 lm.update(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1176 {
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1177 b'parity': next(parity),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1178 b'filerev': c.rev(),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1179 b'file': path,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1180 b'diff': diffs,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1181 b'linerange': webutil.formatlinerange(*lr),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1182 b'rename': templateutil.mappinglist([]),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1183 }
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1184 )
38140
220058198be6 hgweb: don't use dict(key=value) to build a mapping dict in filelog
Yuya Nishihara <yuya@tcha.org>
parents: 38139
diff changeset
1185 entries.append(lm)
31665
5e6d44511317 hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31661
diff changeset
1186 if i == revcount:
5e6d44511317 hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31661
diff changeset
1187 break
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1188 lessvars[b'linerange'] = webutil.formatlinerange(*lrange)
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1189 morevars[b'linerange'] = lessvars[b'linerange']
31665
5e6d44511317 hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31661
diff changeset
1190 else:
5e6d44511317 hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31661
diff changeset
1191 for i in revs:
5e6d44511317 hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31661
diff changeset
1192 iterfctx = fctx.filectx(i)
5e6d44511317 hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31661
diff changeset
1193 diffs = None
5e6d44511317 hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31661
diff changeset
1194 if patch:
5e6d44511317 hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31661
diff changeset
1195 diffs = diff(iterfctx)
38140
220058198be6 hgweb: don't use dict(key=value) to build a mapping dict in filelog
Yuya Nishihara <yuya@tcha.org>
parents: 38139
diff changeset
1196 lm = webutil.commonentry(repo, iterfctx)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1197 lm.update(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1198 {
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1199 b'parity': next(parity),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1200 b'filerev': i,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1201 b'file': f,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1202 b'diff': diffs,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1203 b'rename': webutil.renamelink(iterfctx),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1204 }
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1205 )
38140
220058198be6 hgweb: don't use dict(key=value) to build a mapping dict in filelog
Yuya Nishihara <yuya@tcha.org>
parents: 38139
diff changeset
1206 entries.append(lm)
31665
5e6d44511317 hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31661
diff changeset
1207 entries.reverse()
5e6d44511317 hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31661
diff changeset
1208 revnav = webutil.filerevnav(web.repo, fctx.path())
5e6d44511317 hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31661
diff changeset
1209 nav = revnav.gen(end - 1, revcount, count)
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
1210
20022
d85dfe211c71 hgweb: always compute all entries and latestentry in filelog
Alexander Plavin <alexander@plav.in>
parents: 20021
diff changeset
1211 latestentry = entries[:1]
d85dfe211c71 hgweb: always compute all entries and latestentry in filelog
Alexander Plavin <alexander@plav.in>
parents: 20021
diff changeset
1212
36883
061635d4221c hgweb: add a sendtemplate() helper function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36882
diff changeset
1213 return web.sendtemplate(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1214 b'filelog',
36870
1f42d621f090 hgweb: support using new response object for web commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36865
diff changeset
1215 file=f,
1f42d621f090 hgweb: support using new response object for web commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36865
diff changeset
1216 nav=nav,
36886
563fd95a6efb hgweb: pass modern request type into various webutil functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36885
diff changeset
1217 symrev=webutil.symrevorshortnode(web.req, fctx),
38141
53cc81a8caf6 hgweb: wrap {entries}* of filelog with mappinglist
Yuya Nishihara <yuya@tcha.org>
parents: 38140
diff changeset
1218 entries=templateutil.mappinglist(entries),
36870
1f42d621f090 hgweb: support using new response object for web commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36865
diff changeset
1219 descend=descend,
1f42d621f090 hgweb: support using new response object for web commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36865
diff changeset
1220 patch=patch,
38141
53cc81a8caf6 hgweb: wrap {entries}* of filelog with mappinglist
Yuya Nishihara <yuya@tcha.org>
parents: 38140
diff changeset
1221 latestentry=templateutil.mappinglist(latestentry),
36870
1f42d621f090 hgweb: support using new response object for web commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36865
diff changeset
1222 linerange=linerange,
1f42d621f090 hgweb: support using new response object for web commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36865
diff changeset
1223 revcount=revcount,
1f42d621f090 hgweb: support using new response object for web commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36865
diff changeset
1224 morevars=morevars,
1f42d621f090 hgweb: support using new response object for web commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36865
diff changeset
1225 lessvars=lessvars,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1226 **pycompat.strkwargs(webutil.commonentry(web.repo, fctx))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1227 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1228
5591
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff changeset
1229
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1230 @webcommand(b'archive')
36887
4daa22071d5d hgweb: stop passing req and tmpl into @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36886
diff changeset
1231 def archive(web):
24096
bb8b6d44fe1d webcommands: document "archive" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24095
diff changeset
1232 """
bb8b6d44fe1d webcommands: document "archive" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24095
diff changeset
1233 /archive/{revision}.{format}[/{path}]
bb8b6d44fe1d webcommands: document "archive" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24095
diff changeset
1234 -------------------------------------
bb8b6d44fe1d webcommands: document "archive" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24095
diff changeset
1235
bb8b6d44fe1d webcommands: document "archive" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24095
diff changeset
1236 Obtain an archive of repository content.
bb8b6d44fe1d webcommands: document "archive" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24095
diff changeset
1237
bb8b6d44fe1d webcommands: document "archive" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24095
diff changeset
1238 The content and type of the archive is defined by a URL path parameter.
bb8b6d44fe1d webcommands: document "archive" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24095
diff changeset
1239 ``format`` is the file extension of the archive type to be generated. e.g.
bb8b6d44fe1d webcommands: document "archive" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24095
diff changeset
1240 ``zip`` or ``tar.bz2``. Not all archive types may be allowed by your
bb8b6d44fe1d webcommands: document "archive" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24095
diff changeset
1241 server configuration.
bb8b6d44fe1d webcommands: document "archive" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24095
diff changeset
1242
bb8b6d44fe1d webcommands: document "archive" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24095
diff changeset
1243 The optional ``path`` URL parameter controls content to include in the
bb8b6d44fe1d webcommands: document "archive" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24095
diff changeset
1244 archive. If omitted, every file in the specified revision is present in the
bb8b6d44fe1d webcommands: document "archive" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24095
diff changeset
1245 archive. If included, only the specified file or contents of the specified
bb8b6d44fe1d webcommands: document "archive" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24095
diff changeset
1246 directory will be included in the archive.
bb8b6d44fe1d webcommands: document "archive" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24095
diff changeset
1247
bb8b6d44fe1d webcommands: document "archive" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24095
diff changeset
1248 No template is used for this handler. Raw, binary content is generated.
bb8b6d44fe1d webcommands: document "archive" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24095
diff changeset
1249 """
bb8b6d44fe1d webcommands: document "archive" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24095
diff changeset
1250
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1251 type_ = web.req.qsparams.get(b'type')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1252 allowed = web.configlist(b"web", b"allow-archive")
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1253 key = web.req.qsparams[b'node']
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
1254
37512
aac97d043e6d hgweb: drop archivespecs from requestcontext
Yuya Nishihara <yuya@tcha.org>
parents: 37510
diff changeset
1255 if type_ not in webutil.archivespecs:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1256 msg = b'Unsupported archive type: %s' % stringutil.pprint(type_)
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
1257 raise ErrorResponse(HTTP_NOT_FOUND, msg)
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
1258
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1259 if not ((type_ in allowed or web.configbool(b"web", b"allow" + type_))):
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1260 msg = b'Archive type not allowed: %s' % type_
7029
b84d27386285 hgweb: Respond with HTTP 403 for disabled archive types instead of 404
Rocco Rutte <pdmef@gmx.net>
parents: 6981
diff changeset
1261 raise ErrorResponse(HTTP_FORBIDDEN, msg)
b84d27386285 hgweb: Respond with HTTP 403 for disabled archive types instead of 404
Rocco Rutte <pdmef@gmx.net>
parents: 6981
diff changeset
1262
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1263 reponame = re.sub(br"\W+", b"-", os.path.basename(web.reponame))
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
1264 cnode = web.repo.lookup(key)
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
1265 arch_version = key
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1266 if cnode == key or key == b'tip':
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
1267 arch_version = short(cnode)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1268 name = b"%s-%s" % (reponame, arch_version)
18771
bb38f4f78104 hgweb: teach archive how to download a specific directory or file
Angel Ezquerra <angel.ezquerra@gmail.com>
parents: 18747
diff changeset
1269
36886
563fd95a6efb hgweb: pass modern request type into various webutil functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36885
diff changeset
1270 ctx = webutil.changectx(web.repo, web.req)
34083
08346a8fa65f cleanup: rename "matchfn" to "match" where obviously a matcher
Martin von Zweigbergk <martinvonz@google.com>
parents: 33554
diff changeset
1271 match = scmutil.match(ctx, [])
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1272 file = web.req.qsparams.get(b'file')
18771
bb38f4f78104 hgweb: teach archive how to download a specific directory or file
Angel Ezquerra <angel.ezquerra@gmail.com>
parents: 18747
diff changeset
1273 if file:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1274 pats = [b'path:' + file]
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1275 match = scmutil.match(ctx, pats, default=b'path')
18968
7d2a7f8e9da4 hgweb: respond HTTP_NOT_FOUND when an archive request does not match any files
Angel Ezquerra <angel.ezquerra@gmail.com>
parents: 18771
diff changeset
1276 if pats:
34083
08346a8fa65f cleanup: rename "matchfn" to "match" where obviously a matcher
Martin von Zweigbergk <martinvonz@google.com>
parents: 33554
diff changeset
1277 files = [f for f in ctx.manifest().keys() if match(f)]
18968
7d2a7f8e9da4 hgweb: respond HTTP_NOT_FOUND when an archive request does not match any files
Angel Ezquerra <angel.ezquerra@gmail.com>
parents: 18771
diff changeset
1278 if not files:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1279 raise ErrorResponse(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1280 HTTP_NOT_FOUND, b'file(s) not found: %s' % file
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1281 )
18771
bb38f4f78104 hgweb: teach archive how to download a specific directory or file
Angel Ezquerra <angel.ezquerra@gmail.com>
parents: 18747
diff changeset
1282
37512
aac97d043e6d hgweb: drop archivespecs from requestcontext
Yuya Nishihara <yuya@tcha.org>
parents: 37510
diff changeset
1283 mimetype, artype, extension, encoding = webutil.archivespecs[type_]
36876
97f44b0720e2 hgweb: port archive command to modern response API
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36875
diff changeset
1284
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1285 web.res.headers[b'Content-Type'] = mimetype
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1286 web.res.headers[b'Content-Disposition'] = b'attachment; filename=%s%s' % (
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1287 name,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1288 extension,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1289 )
36876
97f44b0720e2 hgweb: port archive command to modern response API
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36875
diff changeset
1290
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
1291 if encoding:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1292 web.res.headers[b'Content-Encoding'] = encoding
17933
8243dd66e0e3 webcommands: allow hgweb's archive to recurse into subrepos
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 17322
diff changeset
1293
36876
97f44b0720e2 hgweb: port archive command to modern response API
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36875
diff changeset
1294 web.res.setbodywillwrite()
36977
a82fc3922446 hgweb: convert an assert to a ProgrammingError
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36887
diff changeset
1295 if list(web.res.sendresponse()):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1296 raise error.ProgrammingError(
43117
8ff1ecfadcd1 cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents: 43106
diff changeset
1297 b'sendresponse() should not emit data if writing later'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1298 )
36876
97f44b0720e2 hgweb: port archive command to modern response API
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36875
diff changeset
1299
97f44b0720e2 hgweb: port archive command to modern response API
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36875
diff changeset
1300 bodyfh = web.res.getbodyfile()
36875
16499427f6de hgweb: refactor fake file object proxy for archiving
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36873
diff changeset
1301
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1302 archival.archive(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1303 web.repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1304 bodyfh,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1305 cnode,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1306 artype,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1307 prefix=name,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1308 match=match,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1309 subrepos=web.configbool(b"web", b"archivesubrepos"),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1310 )
6393
894875eae49b hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6392
diff changeset
1311
36880
67fb0dca29bc hgweb: always return iterable from @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36876
diff changeset
1312 return []
5591
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff changeset
1313
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1314
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1315 @webcommand(b'static')
36887
4daa22071d5d hgweb: stop passing req and tmpl into @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36886
diff changeset
1316 def static(web):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1317 fname = web.req.qsparams[b'file']
5591
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff changeset
1318 # a repo owner may set web.static in .hg/hgrc to get any file
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff changeset
1319 # readable by the user running the CGI script
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1320 static = web.config(b"web", b"static", untrusted=False)
45378
dc9fe90bdbd5 hgweb: let staticfile() look up path from default location unless provided
Martin von Zweigbergk <martinvonz@google.com>
parents: 45377
diff changeset
1321 staticfile(web.templatepath, static, fname, web.res)
36880
67fb0dca29bc hgweb: always return iterable from @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36876
diff changeset
1322 return web.res.sendresponse()
6691
0dba955c2636 add graph page to hgweb
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6670
diff changeset
1323
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1324
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1325 @webcommand(b'graph')
36887
4daa22071d5d hgweb: stop passing req and tmpl into @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36886
diff changeset
1326 def graph(web):
24097
8e04a73b5502 webcommands: document "graph" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24096
diff changeset
1327 """
8e04a73b5502 webcommands: document "graph" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24096
diff changeset
1328 /graph[/{revision}]
8e04a73b5502 webcommands: document "graph" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24096
diff changeset
1329 -------------------
8e04a73b5502 webcommands: document "graph" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24096
diff changeset
1330
8e04a73b5502 webcommands: document "graph" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24096
diff changeset
1331 Show information about the graphical topology of the repository.
8e04a73b5502 webcommands: document "graph" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24096
diff changeset
1332
8e04a73b5502 webcommands: document "graph" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24096
diff changeset
1333 Information rendered by this handler can be used to create visual
8e04a73b5502 webcommands: document "graph" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24096
diff changeset
1334 representations of repository topology.
8e04a73b5502 webcommands: document "graph" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24096
diff changeset
1335
35411
0fe5d99804bb hgweb: update graph function docstring
Anton Shestakov <av6@dwimlabs.net>
parents: 35409
diff changeset
1336 The ``revision`` URL parameter controls the starting changeset. If it's
0fe5d99804bb hgweb: update graph function docstring
Anton Shestakov <av6@dwimlabs.net>
parents: 35409
diff changeset
1337 absent, the default is ``tip``.
24097
8e04a73b5502 webcommands: document "graph" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24096
diff changeset
1338
8e04a73b5502 webcommands: document "graph" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24096
diff changeset
1339 The ``revcount`` query string argument can define the number of changesets
8e04a73b5502 webcommands: document "graph" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24096
diff changeset
1340 to show information for.
8e04a73b5502 webcommands: document "graph" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24096
diff changeset
1341
35411
0fe5d99804bb hgweb: update graph function docstring
Anton Shestakov <av6@dwimlabs.net>
parents: 35409
diff changeset
1342 The ``graphtop`` query string argument can specify the starting changeset
0fe5d99804bb hgweb: update graph function docstring
Anton Shestakov <av6@dwimlabs.net>
parents: 35409
diff changeset
1343 for producing ``jsdata`` variable that is used for rendering graph in
0fe5d99804bb hgweb: update graph function docstring
Anton Shestakov <av6@dwimlabs.net>
parents: 35409
diff changeset
1344 JavaScript. By default it has the same value as ``revision``.
0fe5d99804bb hgweb: update graph function docstring
Anton Shestakov <av6@dwimlabs.net>
parents: 35409
diff changeset
1345
24097
8e04a73b5502 webcommands: document "graph" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24096
diff changeset
1346 This handler will render the ``graph`` template.
8e04a73b5502 webcommands: document "graph" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24096
diff changeset
1347 """
10245
207b94f6b65d hgweb: make graph page size equal to shortlog
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9404
diff changeset
1348
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1349 if b'node' in web.req.qsparams:
36886
563fd95a6efb hgweb: pass modern request type into various webutil functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36885
diff changeset
1350 ctx = webutil.changectx(web.repo, web.req)
563fd95a6efb hgweb: pass modern request type into various webutil functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36885
diff changeset
1351 symrev = webutil.symrevorshortnode(web.req, ctx)
25602
85fb416f2fa7 hgweb: provide symrev (symbolic revision) property to the templates
Anton Shestakov <av6@dwimlabs.net>
parents: 25251
diff changeset
1352 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1353 ctx = web.repo[b'tip']
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1354 symrev = b'tip'
17318
7ac5800dbc8f hgweb: fix graph view paging
Patrick Mezard <patrick@mezard.eu>
parents: 17303
diff changeset
1355 rev = ctx.rev()
7ac5800dbc8f hgweb: fix graph view paging
Patrick Mezard <patrick@mezard.eu>
parents: 17303
diff changeset
1356
6691
0dba955c2636 add graph page to hgweb
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6670
diff changeset
1357 bg_height = 39
10245
207b94f6b65d hgweb: make graph page size equal to shortlog
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9404
diff changeset
1358 revcount = web.maxshortchanges
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1359 if b'revcount' in web.req.qsparams:
20092
77acd8ce01ce hgweb: ignore non numeric "revcount" parameter values (issue4091)
Isaac Jurado <diptongo@gmail.com>
parents: 20004
diff changeset
1360 try:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1361 revcount = int(web.req.qsparams.get(b'revcount', revcount))
20092
77acd8ce01ce hgweb: ignore non numeric "revcount" parameter values (issue4091)
Isaac Jurado <diptongo@gmail.com>
parents: 20004
diff changeset
1362 revcount = max(revcount, 1)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1363 web.tmpl.defaults[b'sessionvars'][b'revcount'] = revcount
20092
77acd8ce01ce hgweb: ignore non numeric "revcount" parameter values (issue4091)
Isaac Jurado <diptongo@gmail.com>
parents: 20004
diff changeset
1364 except ValueError:
77acd8ce01ce hgweb: ignore non numeric "revcount" parameter values (issue4091)
Isaac Jurado <diptongo@gmail.com>
parents: 20004
diff changeset
1365 pass
7345
55651328dfcc hgweb: fix up the less/more links on the graph page
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7332
diff changeset
1366
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1367 lessvars = copy.copy(web.tmpl.defaults[b'sessionvars'])
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1368 lessvars[b'revcount'] = max(revcount // 2, 1)
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1369 morevars = copy.copy(web.tmpl.defaults[b'sessionvars'])
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1370 morevars[b'revcount'] = revcount * 2
7345
55651328dfcc hgweb: fix up the less/more links on the graph page
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7332
diff changeset
1371
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1372 graphtop = web.req.qsparams.get(b'graphtop', ctx.hex())
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1373 graphvars = copy.copy(web.tmpl.defaults[b'sessionvars'])
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1374 graphvars[b'graphtop'] = graphtop
35409
f84b01257e06 hgweb: render next pages on /graph incrementally
Anton Shestakov <av6@dwimlabs.net>
parents: 35408
diff changeset
1375
17318
7ac5800dbc8f hgweb: fix graph view paging
Patrick Mezard <patrick@mezard.eu>
parents: 17303
diff changeset
1376 count = len(web.repo)
7ac5800dbc8f hgweb: fix graph view paging
Patrick Mezard <patrick@mezard.eu>
parents: 17303
diff changeset
1377 pos = rev
7ac5800dbc8f hgweb: fix graph view paging
Patrick Mezard <patrick@mezard.eu>
parents: 17303
diff changeset
1378
7ac5800dbc8f hgweb: fix graph view paging
Patrick Mezard <patrick@mezard.eu>
parents: 17303
diff changeset
1379 uprev = min(max(0, count - 1), rev + revcount)
6691
0dba955c2636 add graph page to hgweb
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6670
diff changeset
1380 downrev = max(0, rev - revcount)
18409
e3f5cef11d6a hgweb: pass repo object to revnav construction
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18408
diff changeset
1381 changenav = webutil.revnav(web.repo).gen(pos, revcount, count)
6691
0dba955c2636 add graph page to hgweb
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6670
diff changeset
1382
18428
8c10f760ca34 hgweb: walk the graph through the changelog
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 18427
diff changeset
1383 tree = []
35409
f84b01257e06 hgweb: render next pages on /graph incrementally
Anton Shestakov <av6@dwimlabs.net>
parents: 35408
diff changeset
1384 nextentry = []
f84b01257e06 hgweb: render next pages on /graph incrementally
Anton Shestakov <av6@dwimlabs.net>
parents: 35408
diff changeset
1385 lastrev = 0
19487
8cfa3a3664a5 hgweb: fix incorrect revisions count in graph (issue3977)
Alexander Plavin <me@aplavin.ru>
parents: 19486
diff changeset
1386 if pos != -1:
8cfa3a3664a5 hgweb: fix incorrect revisions count in graph (issue3977)
Alexander Plavin <me@aplavin.ru>
parents: 19486
diff changeset
1387 allrevs = web.repo.changelog.revs(pos, 0)
8cfa3a3664a5 hgweb: fix incorrect revisions count in graph (issue3977)
Alexander Plavin <me@aplavin.ru>
parents: 19486
diff changeset
1388 revs = []
8cfa3a3664a5 hgweb: fix incorrect revisions count in graph (issue3977)
Alexander Plavin <me@aplavin.ru>
parents: 19486
diff changeset
1389 for i in allrevs:
8cfa3a3664a5 hgweb: fix incorrect revisions count in graph (issue3977)
Alexander Plavin <me@aplavin.ru>
parents: 19486
diff changeset
1390 revs.append(i)
35409
f84b01257e06 hgweb: render next pages on /graph incrementally
Anton Shestakov <av6@dwimlabs.net>
parents: 35408
diff changeset
1391 if len(revs) >= revcount + 1:
19487
8cfa3a3664a5 hgweb: fix incorrect revisions count in graph (issue3977)
Alexander Plavin <me@aplavin.ru>
parents: 19486
diff changeset
1392 break
8cfa3a3664a5 hgweb: fix incorrect revisions count in graph (issue3977)
Alexander Plavin <me@aplavin.ru>
parents: 19486
diff changeset
1393
35409
f84b01257e06 hgweb: render next pages on /graph incrementally
Anton Shestakov <av6@dwimlabs.net>
parents: 35408
diff changeset
1394 if len(revs) > revcount:
f84b01257e06 hgweb: render next pages on /graph incrementally
Anton Shestakov <av6@dwimlabs.net>
parents: 35408
diff changeset
1395 nextentry = [webutil.commonentry(web.repo, web.repo[revs[-1]])]
f84b01257e06 hgweb: render next pages on /graph incrementally
Anton Shestakov <av6@dwimlabs.net>
parents: 35408
diff changeset
1396 revs = revs[:-1]
f84b01257e06 hgweb: render next pages on /graph incrementally
Anton Shestakov <av6@dwimlabs.net>
parents: 35408
diff changeset
1397
f84b01257e06 hgweb: render next pages on /graph incrementally
Anton Shestakov <av6@dwimlabs.net>
parents: 35408
diff changeset
1398 lastrev = revs[-1]
f84b01257e06 hgweb: render next pages on /graph incrementally
Anton Shestakov <av6@dwimlabs.net>
parents: 35408
diff changeset
1399
20761
46f93b7660b6 webcommands: changed code to use lazy classes when calling dagwalker
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 20678
diff changeset
1400 # We have to feed a baseset to dagwalker as it is expecting smartset
46f93b7660b6 webcommands: changed code to use lazy classes when calling dagwalker
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 20678
diff changeset
1401 # object. This does not have a big impact on hgweb performance itself
46f93b7660b6 webcommands: changed code to use lazy classes when calling dagwalker
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 20678
diff changeset
1402 # since hgweb graphing code is not itself lazy yet.
31023
aea06029919e revset: import set classes directly from smartset module
Yuya Nishihara <yuya@tcha.org>
parents: 30826
diff changeset
1403 dag = graphmod.dagwalker(web.repo, smartset.baseset(revs))
20761
46f93b7660b6 webcommands: changed code to use lazy classes when calling dagwalker
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 20678
diff changeset
1404 # As we said one line above... not lazy.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1405 tree = list(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1406 item
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1407 for item in graphmod.colored(dag, web.repo)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1408 if item[1] == graphmod.CHANGESET
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1409 )
16773
d490edc71146 hgweb: make graph data suitable for template usage
Paul Boddie <paul@boddie.org.uk>
parents: 16727
diff changeset
1410
35409
f84b01257e06 hgweb: render next pages on /graph incrementally
Anton Shestakov <av6@dwimlabs.net>
parents: 35408
diff changeset
1411 def fulltree():
f84b01257e06 hgweb: render next pages on /graph incrementally
Anton Shestakov <av6@dwimlabs.net>
parents: 35408
diff changeset
1412 pos = web.repo[graphtop].rev()
f84b01257e06 hgweb: render next pages on /graph incrementally
Anton Shestakov <av6@dwimlabs.net>
parents: 35408
diff changeset
1413 tree = []
f84b01257e06 hgweb: render next pages on /graph incrementally
Anton Shestakov <av6@dwimlabs.net>
parents: 35408
diff changeset
1414 if pos != -1:
f84b01257e06 hgweb: render next pages on /graph incrementally
Anton Shestakov <av6@dwimlabs.net>
parents: 35408
diff changeset
1415 revs = web.repo.changelog.revs(pos, lastrev)
f84b01257e06 hgweb: render next pages on /graph incrementally
Anton Shestakov <av6@dwimlabs.net>
parents: 35408
diff changeset
1416 dag = graphmod.dagwalker(web.repo, smartset.baseset(revs))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1417 tree = list(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1418 item
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1419 for item in graphmod.colored(dag, web.repo)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1420 if item[1] == graphmod.CHANGESET
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1421 )
35409
f84b01257e06 hgweb: render next pages on /graph incrementally
Anton Shestakov <av6@dwimlabs.net>
parents: 35408
diff changeset
1422 return tree
f84b01257e06 hgweb: render next pages on /graph incrementally
Anton Shestakov <av6@dwimlabs.net>
parents: 35408
diff changeset
1423
38209
215021e506e2 hgweb: adapt {jsdata} of graph to mappinggenerator
Yuya Nishihara <yuya@tcha.org>
parents: 38208
diff changeset
1424 def jsdata(context):
215021e506e2 hgweb: adapt {jsdata} of graph to mappinggenerator
Yuya Nishihara <yuya@tcha.org>
parents: 38208
diff changeset
1425 for (id, type, ctx, vtx, edges) in fulltree():
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1426 yield {
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1427 b'node': pycompat.bytestr(ctx),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1428 b'graphnode': webutil.getgraphnode(web.repo, ctx),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1429 b'vertex': vtx,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1430 b'edges': edges,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1431 }
16773
d490edc71146 hgweb: make graph data suitable for template usage
Paul Boddie <paul@boddie.org.uk>
parents: 16727
diff changeset
1432
38210
fb5803f4fb87 hgweb: wrap {nodes} of graph with mappinggenerator
Yuya Nishihara <yuya@tcha.org>
parents: 38209
diff changeset
1433 def nodes(context):
35530
acd8a2454b47 monoblue: make actual changeset entries have backgrounds on /graph
Anton Shestakov <av6@dwimlabs.net>
parents: 35411
diff changeset
1434 parity = paritygen(web.stripecount)
35408
a48af4993aa0 hgweb: split graphdata() into jsdata() and nodes()
Anton Shestakov <av6@dwimlabs.net>
parents: 35407
diff changeset
1435 for row, (id, type, ctx, vtx, edges) in enumerate(tree):
a48af4993aa0 hgweb: split graphdata() into jsdata() and nodes()
Anton Shestakov <av6@dwimlabs.net>
parents: 35407
diff changeset
1436 entry = webutil.commonentry(web.repo, ctx)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1437 edgedata = [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1438 {
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1439 b'col': edge[0],
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1440 b'nextcol': edge[1],
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1441 b'color': (edge[2] - 1) % 6 + 1,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1442 b'width': edge[3],
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1443 b'bcolor': edge[4],
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1444 }
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1445 for edge in edges
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1446 ]
16773
d490edc71146 hgweb: make graph data suitable for template usage
Paul Boddie <paul@boddie.org.uk>
parents: 16727
diff changeset
1447
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1448 entry.update(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1449 {
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1450 b'col': vtx[0],
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1451 b'color': (vtx[1] - 1) % 6 + 1,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1452 b'parity': next(parity),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1453 b'edges': templateutil.mappinglist(edgedata),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1454 b'row': row,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1455 b'nextrow': row + 1,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1456 }
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1457 )
35096
23bba755cf80 hgweb: use webutil.commonentry() for nodes (but not for jsdata yet) in /graph
Anton Shestakov <av6@dwimlabs.net>
parents: 35095
diff changeset
1458
35408
a48af4993aa0 hgweb: split graphdata() into jsdata() and nodes()
Anton Shestakov <av6@dwimlabs.net>
parents: 35407
diff changeset
1459 yield entry
16773
d490edc71146 hgweb: make graph data suitable for template usage
Paul Boddie <paul@boddie.org.uk>
parents: 16727
diff changeset
1460
d490edc71146 hgweb: make graph data suitable for template usage
Paul Boddie <paul@boddie.org.uk>
parents: 16727
diff changeset
1461 rows = len(tree)
6691
0dba955c2636 add graph page to hgweb
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6670
diff changeset
1462
36883
061635d4221c hgweb: add a sendtemplate() helper function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36882
diff changeset
1463 return web.sendtemplate(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1464 b'graph',
36871
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
1465 rev=rev,
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
1466 symrev=symrev,
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
1467 revcount=revcount,
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
1468 uprev=uprev,
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
1469 lessvars=lessvars,
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
1470 morevars=morevars,
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
1471 downrev=downrev,
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
1472 graphvars=graphvars,
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
1473 rows=rows,
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
1474 bg_height=bg_height,
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
1475 changesets=count,
38208
b10a9ace2738 hgweb: wrap {nextentry} of graph with mappinglist
Yuya Nishihara <yuya@tcha.org>
parents: 38141
diff changeset
1476 nextentry=templateutil.mappinglist(nextentry),
38209
215021e506e2 hgweb: adapt {jsdata} of graph to mappinggenerator
Yuya Nishihara <yuya@tcha.org>
parents: 38208
diff changeset
1477 jsdata=templateutil.mappinggenerator(jsdata),
38210
fb5803f4fb87 hgweb: wrap {nodes} of graph with mappinggenerator
Yuya Nishihara <yuya@tcha.org>
parents: 38209
diff changeset
1478 nodes=templateutil.mappinggenerator(nodes),
36871
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
1479 node=ctx.hex(),
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1480 archives=web.archivelist(b'tip'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1481 changenav=changenav,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1482 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1483
12666
ead4e21f49f1 web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents: 12063
diff changeset
1484
ead4e21f49f1 web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents: 12063
diff changeset
1485 def _getdoc(e):
ead4e21f49f1 web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents: 12063
diff changeset
1486 doc = e[0].__doc__
ead4e21f49f1 web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents: 12063
diff changeset
1487 if doc:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1488 doc = _(doc).partition(b'\n')[0]
12666
ead4e21f49f1 web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents: 12063
diff changeset
1489 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1490 doc = _(b'(no help text available)')
12666
ead4e21f49f1 web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents: 12063
diff changeset
1491 return doc
ead4e21f49f1 web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents: 12063
diff changeset
1492
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1493
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1494 @webcommand(b'help')
36887
4daa22071d5d hgweb: stop passing req and tmpl into @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36886
diff changeset
1495 def help(web):
24081
ff42de48193c webcommands: document "help" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24078
diff changeset
1496 """
ff42de48193c webcommands: document "help" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24078
diff changeset
1497 /help[/{topic}]
ff42de48193c webcommands: document "help" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24078
diff changeset
1498 ---------------
ff42de48193c webcommands: document "help" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24078
diff changeset
1499
ff42de48193c webcommands: document "help" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24078
diff changeset
1500 Render help documentation.
ff42de48193c webcommands: document "help" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24078
diff changeset
1501
ff42de48193c webcommands: document "help" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24078
diff changeset
1502 This web command is roughly equivalent to :hg:`help`. If a ``topic``
ff42de48193c webcommands: document "help" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24078
diff changeset
1503 is defined, that help topic will be rendered. If not, an index of
ff42de48193c webcommands: document "help" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24078
diff changeset
1504 available help topics will be rendered.
ff42de48193c webcommands: document "help" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24078
diff changeset
1505
ff42de48193c webcommands: document "help" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24078
diff changeset
1506 The ``help`` template will be rendered when requesting help for a topic.
ff42de48193c webcommands: document "help" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24078
diff changeset
1507 ``helptopics`` will be rendered for the index of help topics.
ff42de48193c webcommands: document "help" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24078
diff changeset
1508 """
27046
37fcfe52c68c hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents: 27009
diff changeset
1509 from .. import commands, help as helpmod # avoid cycle
12666
ead4e21f49f1 web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents: 12063
diff changeset
1510
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1511 topicname = web.req.qsparams.get(b'node')
12666
ead4e21f49f1 web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents: 12063
diff changeset
1512 if not topicname:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1513
38212
0b932b43868f hgweb: wrap {topics}es of help with mappinggenerator or mappinglist
Yuya Nishihara <yuya@tcha.org>
parents: 38211
diff changeset
1514 def topics(context):
40292
9c6473d2038b help: splitting the topics by category
Rodrigo Damazio <rdamazio@google.com>
parents: 40248
diff changeset
1515 for h in helpmod.helptable:
9c6473d2038b help: splitting the topics by category
Rodrigo Damazio <rdamazio@google.com>
parents: 40248
diff changeset
1516 entries, summary, _doc = h[0:3]
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1517 yield {b'topic': entries[0], b'summary': summary}
12666
ead4e21f49f1 web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents: 12063
diff changeset
1518
ead4e21f49f1 web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents: 12063
diff changeset
1519 early, other = [], []
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1520 primary = lambda s: s.partition(b'|')[0]
43106
d783f945a701 py3: finish porting iteritems() to pycompat and remove source transformer
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43089
diff changeset
1521 for c, e in pycompat.iteritems(commands.table):
12666
ead4e21f49f1 web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents: 12063
diff changeset
1522 doc = _getdoc(e)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1523 if b'DEPRECATED' in doc or c.startswith(b'debug'):
12666
ead4e21f49f1 web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents: 12063
diff changeset
1524 continue
ead4e21f49f1 web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents: 12063
diff changeset
1525 cmd = primary(c)
40295
fa88170c10bb help: adding a proper declaration for shortlist/basic commands (API)
Rodrigo Damazio <rdamazio@google.com>
parents: 40292
diff changeset
1526 if getattr(e[0], 'helpbasic', False):
fa88170c10bb help: adding a proper declaration for shortlist/basic commands (API)
Rodrigo Damazio <rdamazio@google.com>
parents: 40292
diff changeset
1527 early.append((cmd, doc))
12666
ead4e21f49f1 web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents: 12063
diff changeset
1528 else:
ead4e21f49f1 web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents: 12063
diff changeset
1529 other.append((cmd, doc))
ead4e21f49f1 web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents: 12063
diff changeset
1530
ead4e21f49f1 web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents: 12063
diff changeset
1531 early.sort()
ead4e21f49f1 web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents: 12063
diff changeset
1532 other.sort()
ead4e21f49f1 web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents: 12063
diff changeset
1533
38213
c3df415037cd hgweb: wrap {earlycommands} and {othercommands} of help with mappinggenerator
Yuya Nishihara <yuya@tcha.org>
parents: 38212
diff changeset
1534 def earlycommands(context):
12666
ead4e21f49f1 web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents: 12063
diff changeset
1535 for c, doc in early:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1536 yield {b'topic': c, b'summary': doc}
12666
ead4e21f49f1 web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents: 12063
diff changeset
1537
38213
c3df415037cd hgweb: wrap {earlycommands} and {othercommands} of help with mappinggenerator
Yuya Nishihara <yuya@tcha.org>
parents: 38212
diff changeset
1538 def othercommands(context):
12666
ead4e21f49f1 web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents: 12063
diff changeset
1539 for c, doc in other:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1540 yield {b'topic': c, b'summary': doc}
12666
ead4e21f49f1 web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents: 12063
diff changeset
1541
36883
061635d4221c hgweb: add a sendtemplate() helper function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36882
diff changeset
1542 return web.sendtemplate(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1543 b'helptopics',
38212
0b932b43868f hgweb: wrap {topics}es of help with mappinggenerator or mappinglist
Yuya Nishihara <yuya@tcha.org>
parents: 38211
diff changeset
1544 topics=templateutil.mappinggenerator(topics),
38213
c3df415037cd hgweb: wrap {earlycommands} and {othercommands} of help with mappinggenerator
Yuya Nishihara <yuya@tcha.org>
parents: 38212
diff changeset
1545 earlycommands=templateutil.mappinggenerator(earlycommands),
c3df415037cd hgweb: wrap {earlycommands} and {othercommands} of help with mappinggenerator
Yuya Nishihara <yuya@tcha.org>
parents: 38212
diff changeset
1546 othercommands=templateutil.mappinggenerator(othercommands),
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1547 title=b'Index',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1548 )
12666
ead4e21f49f1 web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents: 12063
diff changeset
1549
27581
3aa6a8135557 hgweb: support rendering sub-topic indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27294
diff changeset
1550 # Render an index of sub-topics.
3aa6a8135557 hgweb: support rendering sub-topic indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27294
diff changeset
1551 if topicname in helpmod.subtopics:
3aa6a8135557 hgweb: support rendering sub-topic indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27294
diff changeset
1552 topics = []
3aa6a8135557 hgweb: support rendering sub-topic indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27294
diff changeset
1553 for entries, summary, _doc in helpmod.subtopics[topicname]:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1554 topics.append(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1555 {
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1556 b'topic': b'%s.%s' % (topicname, entries[0]),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1557 b'basename': entries[0],
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1558 b'summary': summary,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1559 }
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1560 )
27581
3aa6a8135557 hgweb: support rendering sub-topic indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27294
diff changeset
1561
36883
061635d4221c hgweb: add a sendtemplate() helper function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36882
diff changeset
1562 return web.sendtemplate(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1563 b'helptopics',
38212
0b932b43868f hgweb: wrap {topics}es of help with mappinggenerator or mappinglist
Yuya Nishihara <yuya@tcha.org>
parents: 38211
diff changeset
1564 topics=templateutil.mappinglist(topics),
36871
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
1565 title=topicname,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1566 subindex=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1567 )
27581
3aa6a8135557 hgweb: support rendering sub-topic indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27294
diff changeset
1568
30559
d83ca854fa21 ui: factor out ui.load() to create a ui without loading configs (API)
Yuya Nishihara <yuya@tcha.org>
parents: 30298
diff changeset
1569 u = webutil.wsgiui.load()
17146
6b40cc67ceb4 hgweb: show help with verbose sections included
Adrian Buehlmann <adrian@cadifra.com>
parents: 16773
diff changeset
1570 u.verbose = True
27582
8f8f3b13252d hgweb: support rendering a sub-topic
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27581
diff changeset
1571
8f8f3b13252d hgweb: support rendering a sub-topic
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27581
diff changeset
1572 # Render a page from a sub-topic.
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1573 if b'.' in topicname:
27582
8f8f3b13252d hgweb: support rendering a sub-topic
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27581
diff changeset
1574 # TODO implement support for rendering sections, like
8f8f3b13252d hgweb: support rendering a sub-topic
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27581
diff changeset
1575 # `hg help` works.
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1576 topic, subtopic = topicname.split(b'.', 1)
27582
8f8f3b13252d hgweb: support rendering a sub-topic
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27581
diff changeset
1577 if topic not in helpmod.subtopics:
8f8f3b13252d hgweb: support rendering a sub-topic
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27581
diff changeset
1578 raise ErrorResponse(HTTP_NOT_FOUND)
8f8f3b13252d hgweb: support rendering a sub-topic
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27581
diff changeset
1579 else:
8f8f3b13252d hgweb: support rendering a sub-topic
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27581
diff changeset
1580 topic = topicname
8f8f3b13252d hgweb: support rendering a sub-topic
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27581
diff changeset
1581 subtopic = None
8f8f3b13252d hgweb: support rendering a sub-topic
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27581
diff changeset
1582
12666
ead4e21f49f1 web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents: 12063
diff changeset
1583 try:
32566
1b90036f42f0 help: pass commands module by argument
Yuya Nishihara <yuya@tcha.org>
parents: 32136
diff changeset
1584 doc = helpmod.help_(u, commands, topic, subtopic=subtopic)
36248
0ef50a5e3ae1 hgweb: translate Abort in help command to 404 error
Yuya Nishihara <yuya@tcha.org>
parents: 35566
diff changeset
1585 except error.Abort:
12666
ead4e21f49f1 web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents: 12063
diff changeset
1586 raise ErrorResponse(HTTP_NOT_FOUND)
36871
9fc3d814646e hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36870
diff changeset
1587
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1588 return web.sendtemplate(b'help', topic=topicname, doc=doc)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41397
diff changeset
1589
24859
64e3f97bdf08 i18n: extract doc string of each web commands as translatable one
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24712
diff changeset
1590
64e3f97bdf08 i18n: extract doc string of each web commands as translatable one
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24712
diff changeset
1591 # tell hggettext to extract docstrings from these functions:
64e3f97bdf08 i18n: extract doc string of each web commands as translatable one
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24712
diff changeset
1592 i18nfunctions = commands.values()