Mercurial > hg-stable
annotate mercurial/hgweb/webcommands.py @ 36881:16499427f6de
hgweb: refactor fake file object proxy for archiving
Python's zip file writer operates on a file object. When doing work,
it periodically calls write(), flush(), and tell() on that object.
In WSGI contexts, the start_response function returns a write()
function. That's a function to write data, not a full file object.
So, when the archival code was first introduced in 2b03c6733efa in
2006, someone invented a proxy "tellable" type that wrapped a file
object like object and kept track of write count so it could
implement tell() and satisfy zipfile's needs.
When our archival code runs, it attempts to tell() the destination
and if that fails, converts it to a "tellable" instance. Our WSGI
application passes the "wsgirequest" instance to the archival
function. It fails the tell() test and is converted to a "tellable."
It's worth noting that "wsgirequest" implements flush(), so
"tellable" doesn't.
This hackery all seems very specific to the WSGI code. So this commit
moves the "tellable" type and the conversion of the destination file
object into the WSGI code. There's a chance some other caller may be
passing a file object like object that doesn't implement tell(). But
I doubt it.
As part of the refactor, our new type implements flush() and doesn't
implement __getattr__. Given the intended limited use of this type,
I want things to fail fast if there is an attempt to access attributes
because I think it is important to document which attributes are being
used for what purposes.
Differential Revision: https://phab.mercurial-scm.org/D2791
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Sat, 10 Mar 2018 16:17:51 -0800 |
parents | 98baf8dea553 |
children | 97f44b0720e2 |
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> |
08887121a652
split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
3 # Copyright 2005-2007 Matt Mackall <mpm@selenic.com> |
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 | 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 _ |
35566
baca93a47992
hgweb: make different kinds of commits look differently on /graph
Anton Shestakov <av6@dwimlabs.net>
parents:
35534
diff
changeset
|
16 from ..node import hex, nullid, short |
27046
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27009
diff
changeset
|
17 |
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27009
diff
changeset
|
18 from .common import ( |
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27009
diff
changeset
|
19 ErrorResponse, |
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27009
diff
changeset
|
20 HTTP_FORBIDDEN, |
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27009
diff
changeset
|
21 HTTP_NOT_FOUND, |
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27009
diff
changeset
|
22 HTTP_OK, |
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 ) |
36881
16499427f6de
hgweb: refactor fake file object proxy for archiving
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36879
diff
changeset
|
27 from . import ( |
16499427f6de
hgweb: refactor fake file object proxy for archiving
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36879
diff
changeset
|
28 request as requestmod, |
16499427f6de
hgweb: refactor fake file object proxy for archiving
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36879
diff
changeset
|
29 ) |
27046
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27009
diff
changeset
|
30 |
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27009
diff
changeset
|
31 from .. import ( |
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27009
diff
changeset
|
32 archival, |
32922
582080a4a812
dagop: move blockancestors() and blockdescendants() from context
Yuya Nishihara <yuya@tcha.org>
parents:
32599
diff
changeset
|
33 dagop, |
27046
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27009
diff
changeset
|
34 encoding, |
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27009
diff
changeset
|
35 error, |
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27009
diff
changeset
|
36 graphmod, |
34809
3a65012be661
webcommands: replace str(ctx) etc with pycompat.bytestr(ctx) etc
Augie Fackler <augie@google.com>
parents:
34695
diff
changeset
|
37 pycompat, |
27046
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27009
diff
changeset
|
38 revset, |
31044
0b8356705de6
revset: split language services to revsetlang module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
31043
diff
changeset
|
39 revsetlang, |
27046
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27009
diff
changeset
|
40 scmutil, |
31043
aea06029919e
revset: import set classes directly from smartset module
Yuya Nishihara <yuya@tcha.org>
parents:
30826
diff
changeset
|
41 smartset, |
27046
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27009
diff
changeset
|
42 templater, |
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27009
diff
changeset
|
43 util, |
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27009
diff
changeset
|
44 ) |
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27009
diff
changeset
|
45 |
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27009
diff
changeset
|
46 from . import ( |
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27009
diff
changeset
|
47 webutil, |
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27009
diff
changeset
|
48 ) |
5591
08887121a652
split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
49 |
24076
b53d2afd11fb
webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23992
diff
changeset
|
50 __all__ = [] |
24077
e8046ca0405d
webcommands: define a dict of available commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24076
diff
changeset
|
51 commands = {} |
24076
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 class webcommand(object): |
b53d2afd11fb
webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23992
diff
changeset
|
54 """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
|
55 |
b53d2afd11fb
webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23992
diff
changeset
|
56 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
|
57 command should be accessible under. |
b53d2afd11fb
webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23992
diff
changeset
|
58 |
36876
1f42d621f090
hgweb: support using new response object for web commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36871
diff
changeset
|
59 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:
36871
diff
changeset
|
60 ``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:
36871
diff
changeset
|
61 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:
36871
diff
changeset
|
62 about the HTTP response. |
1f42d621f090
hgweb: support using new response object for web commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36871
diff
changeset
|
63 |
1f42d621f090
hgweb: support using new response object for web commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36871
diff
changeset
|
64 The function can return the ``requestcontext.res`` instance to signal |
1f42d621f090
hgweb: support using new response object for web commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36871
diff
changeset
|
65 that it wants to use this object to generate the response. If an iterable |
1f42d621f090
hgweb: support using new response object for web commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36871
diff
changeset
|
66 is returned, the ``wsgirequest`` instance will be used and the returned |
1f42d621f090
hgweb: support using new response object for web commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36871
diff
changeset
|
67 content will constitute the response body. |
1f42d621f090
hgweb: support using new response object for web commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36871
diff
changeset
|
68 |
24076
b53d2afd11fb
webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23992
diff
changeset
|
69 Usage: |
5963
5be210afe1b8
hgweb: explicitly check if requested command exists
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
5960
diff
changeset
|
70 |
24076
b53d2afd11fb
webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23992
diff
changeset
|
71 @webcommand('mycommand') |
b53d2afd11fb
webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23992
diff
changeset
|
72 def mycommand(web, req, tmpl): |
b53d2afd11fb
webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23992
diff
changeset
|
73 pass |
b53d2afd11fb
webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23992
diff
changeset
|
74 """ |
5963
5be210afe1b8
hgweb: explicitly check if requested command exists
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
5960
diff
changeset
|
75 |
24076
b53d2afd11fb
webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23992
diff
changeset
|
76 def __init__(self, name): |
b53d2afd11fb
webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23992
diff
changeset
|
77 self.name = name |
b53d2afd11fb
webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23992
diff
changeset
|
78 |
b53d2afd11fb
webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23992
diff
changeset
|
79 def __call__(self, func): |
b53d2afd11fb
webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23992
diff
changeset
|
80 __all__.append(self.name) |
24077
e8046ca0405d
webcommands: define a dict of available commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24076
diff
changeset
|
81 commands[self.name] = func |
24076
b53d2afd11fb
webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23992
diff
changeset
|
82 return func |
b53d2afd11fb
webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23992
diff
changeset
|
83 |
b53d2afd11fb
webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23992
diff
changeset
|
84 @webcommand('log') |
5600
9d900f7282e6
hgweb: explicitly pass around the templater
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
5598
diff
changeset
|
85 def log(web, req, tmpl): |
24087
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 /log[/{revision}[/{path}]] |
6f5b4393590c
webcommands: document "log" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24086
diff
changeset
|
88 -------------------------- |
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 Show repository or file history. |
6f5b4393590c
webcommands: document "log" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24086
diff
changeset
|
91 |
6f5b4393590c
webcommands: document "log" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24086
diff
changeset
|
92 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
|
93 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
|
94 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
|
95 ``changelog`` handler. |
6f5b4393590c
webcommands: document "log" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24086
diff
changeset
|
96 |
6f5b4393590c
webcommands: document "log" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24086
diff
changeset
|
97 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
|
98 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
|
99 """ |
6f5b4393590c
webcommands: document "log" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24086
diff
changeset
|
100 |
36871
3d60a22e27f5
hgweb: perform all parameter lookup via qsparams
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36869
diff
changeset
|
101 if req.req.qsparams.get('file'): |
5964
1cd1582ef25f
hgweb: centralize req.write() calls
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
5963
diff
changeset
|
102 return filelog(web, req, tmpl) |
5591
08887121a652
split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
103 else: |
5964
1cd1582ef25f
hgweb: centralize req.write() calls
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
5963
diff
changeset
|
104 return changelog(web, req, tmpl) |
5591
08887121a652
split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
105 |
24076
b53d2afd11fb
webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23992
diff
changeset
|
106 @webcommand('rawfile') |
5890
a0e20a5eba3c
hgweb: fast path for sending raw files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
5600
diff
changeset
|
107 def rawfile(web, req, tmpl): |
34608
f12de15c5711
configitems: register the 'web.guessmime' config
Boris Feld <boris.feld@octobus.net>
parents:
34433
diff
changeset
|
108 guessmime = web.configbool('web', 'guessmime') |
15004
d06b9c55ddab
hgweb: raw file mimetype guessing configurable, off by default (BC) (issue2923)
Matt Mackall <mpm@selenic.com>
parents:
14771
diff
changeset
|
109 |
36871
3d60a22e27f5
hgweb: perform all parameter lookup via qsparams
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36869
diff
changeset
|
110 path = webutil.cleanpath(web.repo, req.req.qsparams.get('file', '')) |
5890
a0e20a5eba3c
hgweb: fast path for sending raw files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
5600
diff
changeset
|
111 if not path: |
36877
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
112 return manifest(web, req, tmpl) |
5890
a0e20a5eba3c
hgweb: fast path for sending raw files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
5600
diff
changeset
|
113 |
a0e20a5eba3c
hgweb: fast path for sending raw files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
5600
diff
changeset
|
114 try: |
6392
2540521dc7c1
hgweb: separate out utility functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6368
diff
changeset
|
115 fctx = webutil.filectx(web.repo, req) |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25602
diff
changeset
|
116 except error.LookupError as inst: |
6368
2c370f08c486
hgweb: better error messages
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6217
diff
changeset
|
117 try: |
36877
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
118 return manifest(web, req, tmpl) |
6368
2c370f08c486
hgweb: better error messages
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6217
diff
changeset
|
119 except ErrorResponse: |
2c370f08c486
hgweb: better error messages
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6217
diff
changeset
|
120 raise inst |
5890
a0e20a5eba3c
hgweb: fast path for sending raw files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
5600
diff
changeset
|
121 |
a0e20a5eba3c
hgweb: fast path for sending raw files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
5600
diff
changeset
|
122 path = fctx.path() |
a0e20a5eba3c
hgweb: fast path for sending raw files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
5600
diff
changeset
|
123 text = fctx.data() |
15004
d06b9c55ddab
hgweb: raw file mimetype guessing configurable, off by default (BC) (issue2923)
Matt Mackall <mpm@selenic.com>
parents:
14771
diff
changeset
|
124 mt = 'application/binary' |
d06b9c55ddab
hgweb: raw file mimetype guessing configurable, off by default (BC) (issue2923)
Matt Mackall <mpm@selenic.com>
parents:
14771
diff
changeset
|
125 if guessmime: |
d06b9c55ddab
hgweb: raw file mimetype guessing configurable, off by default (BC) (issue2923)
Matt Mackall <mpm@selenic.com>
parents:
14771
diff
changeset
|
126 mt = mimetypes.guess_type(path)[0] |
d06b9c55ddab
hgweb: raw file mimetype guessing configurable, off by default (BC) (issue2923)
Matt Mackall <mpm@selenic.com>
parents:
14771
diff
changeset
|
127 if mt is None: |
24306
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24177
diff
changeset
|
128 if util.binary(text): |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24177
diff
changeset
|
129 mt = 'application/binary' |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24177
diff
changeset
|
130 else: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24177
diff
changeset
|
131 mt = 'text/plain' |
11332
716e176a4e01
hgweb: specify a charset when sending raw text files
Julian Cowley <julian@lava.net>
parents:
10394
diff
changeset
|
132 if mt.startswith('text/'): |
716e176a4e01
hgweb: specify a charset when sending raw text files
Julian Cowley <julian@lava.net>
parents:
10394
diff
changeset
|
133 mt += '; charset="%s"' % encoding.encoding |
5890
a0e20a5eba3c
hgweb: fast path for sending raw files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
5600
diff
changeset
|
134 |
36877
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
135 web.res.headers['Content-Type'] = mt |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
136 filename = (path.rpartition('/')[-1] |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
137 .replace('\\', '\\\\').replace('"', '\\"')) |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
138 web.res.headers['Content-Disposition'] = 'inline; filename="%s"' % filename |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
139 web.res.setbodybytes(text) |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
140 return web.res |
5890
a0e20a5eba3c
hgweb: fast path for sending raw files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
5600
diff
changeset
|
141 |
25602
85fb416f2fa7
hgweb: provide symrev (symbolic revision) property to the templates
Anton Shestakov <av6@dwimlabs.net>
parents:
25251
diff
changeset
|
142 def _filerevision(web, req, tmpl, fctx): |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
143 f = fctx.path() |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
144 text = fctx.data() |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
145 parity = paritygen(web.stripecount) |
32070
a298f5c61b34
hgweb: do not show "descending" link in followlines UI for filelog heads
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31939
diff
changeset
|
146 ishead = fctx.filerev() in fctx.filelog().headrevs() |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
147 |
19657
145636d31bb4
hgweb: import the whole util module in webcommands instead of just one function
Alexander Plavin <alexander@plav.in>
parents:
19656
diff
changeset
|
148 if util.binary(text): |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
149 mt = mimetypes.guess_type(f)[0] or 'application/octet-stream' |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
150 text = '(binary:%s)' % mt |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
151 |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
152 def lines(): |
9136
31177742f54a
for calls expecting bool args, pass bool instead of int
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
8842
diff
changeset
|
153 for lineno, t in enumerate(text.splitlines(True)): |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
154 yield {"line": t, |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
155 "lineid": "l%d" % (lineno + 1), |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
156 "linenumber": "% 6d" % (lineno + 1), |
29216
ead25aa27a43
py3: convert to next() function
timeless <timeless@mozdev.org>
parents:
28712
diff
changeset
|
157 "parity": next(parity)} |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
158 |
36877
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
159 web.res.setbodygen(tmpl( |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
160 'filerevision', |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
161 file=f, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
162 path=webutil.up(f), |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
163 text=lines(), |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
164 symrev=webutil.symrevorshortnode(req, fctx), |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
165 rename=webutil.renamelink(fctx), |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
166 permissions=fctx.manifest().flags(f), |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
167 ishead=int(ishead), |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
168 **pycompat.strkwargs(webutil.commonentry(web.repo, fctx)))) |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
169 |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
170 return web.res |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
171 |
24076
b53d2afd11fb
webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23992
diff
changeset
|
172 @webcommand('file') |
5600
9d900f7282e6
hgweb: explicitly pass around the templater
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
5598
diff
changeset
|
173 def file(web, req, tmpl): |
24088
fe3ee31b039f
webcommands: document "file" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24087
diff
changeset
|
174 """ |
fe3ee31b039f
webcommands: document "file" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24087
diff
changeset
|
175 /file/{revision}[/{path}] |
fe3ee31b039f
webcommands: document "file" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24087
diff
changeset
|
176 ------------------------- |
fe3ee31b039f
webcommands: document "file" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24087
diff
changeset
|
177 |
fe3ee31b039f
webcommands: document "file" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24087
diff
changeset
|
178 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
|
179 |
fe3ee31b039f
webcommands: document "file" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24087
diff
changeset
|
180 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
|
181 |
fe3ee31b039f
webcommands: document "file" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24087
diff
changeset
|
182 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
|
183 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
|
184 handler. |
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 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
|
187 the ``filerevision`` template. |
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 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
|
190 be rendered. |
fe3ee31b039f
webcommands: document "file" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24087
diff
changeset
|
191 """ |
36878
89002d07a114
hgweb: remove one-off routing for file?style=raw
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36877
diff
changeset
|
192 if web.req.qsparams.get('style') == 'raw': |
89002d07a114
hgweb: remove one-off routing for file?style=raw
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36877
diff
changeset
|
193 return rawfile(web, req, tmpl) |
89002d07a114
hgweb: remove one-off routing for file?style=raw
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36877
diff
changeset
|
194 |
36871
3d60a22e27f5
hgweb: perform all parameter lookup via qsparams
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36869
diff
changeset
|
195 path = webutil.cleanpath(web.repo, req.req.qsparams.get('file', '')) |
6853
2ff0829bdae5
hgweb: do not use unassigned variables in exception handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
6669
diff
changeset
|
196 if not path: |
6857 | 197 return manifest(web, req, tmpl) |
6853
2ff0829bdae5
hgweb: do not use unassigned variables in exception handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
6669
diff
changeset
|
198 try: |
25602
85fb416f2fa7
hgweb: provide symrev (symbolic revision) property to the templates
Anton Shestakov <av6@dwimlabs.net>
parents:
25251
diff
changeset
|
199 return _filerevision(web, req, tmpl, webutil.filectx(web.repo, req)) |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25602
diff
changeset
|
200 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
|
201 try: |
6857 | 202 return manifest(web, req, tmpl) |
6853
2ff0829bdae5
hgweb: do not use unassigned variables in exception handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
6669
diff
changeset
|
203 except ErrorResponse: |
2ff0829bdae5
hgweb: do not use unassigned variables in exception handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
6669
diff
changeset
|
204 raise inst |
5591
08887121a652
split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
205 |
10247
e8c7410371e0
hgweb: add less/more links for search logs (issue1972)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
10246
diff
changeset
|
206 def _search(web, req, tmpl): |
19656
60ce14e41faf
hgweb: add string constants for search mode names
Alexander Plavin <alexander@plav.in>
parents:
19634
diff
changeset
|
207 MODE_REVISION = 'rev' |
60ce14e41faf
hgweb: add string constants for search mode names
Alexander Plavin <alexander@plav.in>
parents:
19634
diff
changeset
|
208 MODE_KEYWORD = 'keyword' |
19722
bf15935b68a3
hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents:
19657
diff
changeset
|
209 MODE_REVSET = 'revset' |
10247
e8c7410371e0
hgweb: add less/more links for search logs (issue1972)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
10246
diff
changeset
|
210 |
19633
217f2b9acee0
hgweb: search() function supports direct pointing to revision
Alexander Plavin <alexander@plav.in>
parents:
19632
diff
changeset
|
211 def revsearch(ctx): |
217f2b9acee0
hgweb: search() function supports direct pointing to revision
Alexander Plavin <alexander@plav.in>
parents:
19632
diff
changeset
|
212 yield ctx |
217f2b9acee0
hgweb: search() function supports direct pointing to revision
Alexander Plavin <alexander@plav.in>
parents:
19632
diff
changeset
|
213 |
19632
299511aabf85
hgweb: pass arguments which a function depends on explicitly in search
Alexander Plavin <alexander@plav.in>
parents:
19631
diff
changeset
|
214 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
|
215 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
|
216 qw = lower(query).split() |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
217 |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
218 def revgen(): |
18497
a58d8936647a
hgweb: prevent traceback during search when filtered (issue3783)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18478
diff
changeset
|
219 cl = web.repo.changelog |
12059
0de6cfdcaad8
webcommands: remove unncessary access to repo.changelog
Patrick Mezard <pmezard@gmail.com>
parents:
11332
diff
changeset
|
220 for i in xrange(len(web.repo) - 1, 0, -100): |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
221 l = [] |
19491
e111d5e6bbbd
hgweb: fix duplication for some search queries
Alexander Plavin <me@aplavin.ru>
parents:
19487
diff
changeset
|
222 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
|
223 ctx = web.repo[j] |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
224 l.append(ctx) |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
225 l.reverse() |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
226 for e in l: |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
227 yield e |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
228 |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
229 for ctx in revgen(): |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
230 miss = 0 |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
231 for q in qw: |
15727
917f263eeb26
i18n: use "encoding.lower()" to normalize string in hgweb search query
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15528
diff
changeset
|
232 if not (q in lower(ctx.user()) or |
917f263eeb26
i18n: use "encoding.lower()" to normalize string in hgweb search query
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15528
diff
changeset
|
233 q in lower(ctx.description()) or |
917f263eeb26
i18n: use "encoding.lower()" to normalize string in hgweb search query
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15528
diff
changeset
|
234 q in lower(" ".join(ctx.files()))): |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
235 miss = 1 |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
236 break |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
237 if miss: |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
238 continue |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
239 |
19533
9a020b354d93
hgweb: separate search itself and template generation
Alexander Plavin <alexander@plav.in>
parents:
19499
diff
changeset
|
240 yield ctx |
9a020b354d93
hgweb: separate search itself and template generation
Alexander Plavin <alexander@plav.in>
parents:
19499
diff
changeset
|
241 |
19722
bf15935b68a3
hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents:
19657
diff
changeset
|
242 def revsetsearch(revs): |
bf15935b68a3
hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents:
19657
diff
changeset
|
243 for r in revs: |
bf15935b68a3
hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents:
19657
diff
changeset
|
244 yield web.repo[r] |
bf15935b68a3
hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents:
19657
diff
changeset
|
245 |
19631
cf9e5e45c1d3
hgweb: add dynamic search function selection, depending on the query
Alexander Plavin <alexander@plav.in>
parents:
19534
diff
changeset
|
246 searchfuncs = { |
20004
06e118c097ff
hgweb, i18n: do not translate search mode description
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
19951
diff
changeset
|
247 MODE_REVISION: (revsearch, 'exact revision search'), |
06e118c097ff
hgweb, i18n: do not translate search mode description
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
19951
diff
changeset
|
248 MODE_KEYWORD: (keywordsearch, 'literal keyword search'), |
06e118c097ff
hgweb, i18n: do not translate search mode description
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
19951
diff
changeset
|
249 MODE_REVSET: (revsetsearch, 'revset expression search'), |
19631
cf9e5e45c1d3
hgweb: add dynamic search function selection, depending on the query
Alexander Plavin <alexander@plav.in>
parents:
19534
diff
changeset
|
250 } |
cf9e5e45c1d3
hgweb: add dynamic search function selection, depending on the query
Alexander Plavin <alexander@plav.in>
parents:
19534
diff
changeset
|
251 |
19632
299511aabf85
hgweb: pass arguments which a function depends on explicitly in search
Alexander Plavin <alexander@plav.in>
parents:
19631
diff
changeset
|
252 def getsearchmode(query): |
19633
217f2b9acee0
hgweb: search() function supports direct pointing to revision
Alexander Plavin <alexander@plav.in>
parents:
19632
diff
changeset
|
253 try: |
217f2b9acee0
hgweb: search() function supports direct pointing to revision
Alexander Plavin <alexander@plav.in>
parents:
19632
diff
changeset
|
254 ctx = web.repo[query] |
217f2b9acee0
hgweb: search() function supports direct pointing to revision
Alexander Plavin <alexander@plav.in>
parents:
19632
diff
changeset
|
255 except (error.RepoError, error.LookupError): |
19722
bf15935b68a3
hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents:
19657
diff
changeset
|
256 # 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
|
257 # 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
|
258 pass |
19633
217f2b9acee0
hgweb: search() function supports direct pointing to revision
Alexander Plavin <alexander@plav.in>
parents:
19632
diff
changeset
|
259 else: |
19656
60ce14e41faf
hgweb: add string constants for search mode names
Alexander Plavin <alexander@plav.in>
parents:
19634
diff
changeset
|
260 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
|
261 |
19722
bf15935b68a3
hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents:
19657
diff
changeset
|
262 revdef = 'reverse(%s)' % query |
bf15935b68a3
hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents:
19657
diff
changeset
|
263 try: |
31044
0b8356705de6
revset: split language services to revsetlang module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
31043
diff
changeset
|
264 tree = revsetlang.parse(revdef) |
27009
f5faef7e9119
hgweb: unify import style of error classes
Yuya Nishihara <yuya@tcha.org>
parents:
26894
diff
changeset
|
265 except error.ParseError: |
19722
bf15935b68a3
hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents:
19657
diff
changeset
|
266 # can't parse to a revset tree |
bf15935b68a3
hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents:
19657
diff
changeset
|
267 return MODE_KEYWORD, query |
bf15935b68a3
hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents:
19657
diff
changeset
|
268 |
31044
0b8356705de6
revset: split language services to revsetlang module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
31043
diff
changeset
|
269 if revsetlang.depth(tree) <= 2: |
19722
bf15935b68a3
hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents:
19657
diff
changeset
|
270 # no revset syntax used |
bf15935b68a3
hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents:
19657
diff
changeset
|
271 return MODE_KEYWORD, query |
bf15935b68a3
hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents:
19657
diff
changeset
|
272 |
25149
3f0744eeaeaf
cleanup: use __builtins__.any instead of util.any
Augie Fackler <augie@google.com>
parents:
25136
diff
changeset
|
273 if any((token, (value or '')[:3]) == ('string', 're:') |
31044
0b8356705de6
revset: split language services to revsetlang module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
31043
diff
changeset
|
274 for token, value, pos in revsetlang.tokenize(revdef)): |
19722
bf15935b68a3
hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents:
19657
diff
changeset
|
275 return MODE_KEYWORD, query |
bf15935b68a3
hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents:
19657
diff
changeset
|
276 |
31044
0b8356705de6
revset: split language services to revsetlang module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
31043
diff
changeset
|
277 funcsused = revsetlang.funcsused(tree) |
19722
bf15935b68a3
hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents:
19657
diff
changeset
|
278 if not funcsused.issubset(revset.safesymbols): |
bf15935b68a3
hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents:
19657
diff
changeset
|
279 return MODE_KEYWORD, query |
bf15935b68a3
hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents:
19657
diff
changeset
|
280 |
33554
2943141f5e07
revset: pass repo when passing ui
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33012
diff
changeset
|
281 mfunc = revset.match(web.repo.ui, revdef, repo=web.repo) |
19722
bf15935b68a3
hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents:
19657
diff
changeset
|
282 try: |
24114
fafd9a1284cf
revset: make match function initiate query from full set by default
Yuya Nishihara <yuya@tcha.org>
parents:
24097
diff
changeset
|
283 revs = mfunc(web.repo) |
19722
bf15935b68a3
hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents:
19657
diff
changeset
|
284 return MODE_REVSET, revs |
bf15935b68a3
hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents:
19657
diff
changeset
|
285 # ParseError: wrongly placed tokens, wrongs arguments, etc |
bf15935b68a3
hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents:
19657
diff
changeset
|
286 # 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
|
287 # Abort: bookmark/tag not exists |
bf15935b68a3
hgweb: add revset syntax support to search
Alexander Plavin <alexander@plav.in>
parents:
19657
diff
changeset
|
288 # LookupError: ambiguous identifier, e.g. in '(bc)' on a large repo |
27009
f5faef7e9119
hgweb: unify import style of error classes
Yuya Nishihara <yuya@tcha.org>
parents:
26894
diff
changeset
|
289 except (error.ParseError, error.RepoLookupError, error.Abort, |
f5faef7e9119
hgweb: unify import style of error classes
Yuya Nishihara <yuya@tcha.org>
parents:
26894
diff
changeset
|
290 LookupError): |
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 |
19533
9a020b354d93
hgweb: separate search itself and template generation
Alexander Plavin <alexander@plav.in>
parents:
19499
diff
changeset
|
293 def changelist(**map): |
9a020b354d93
hgweb: separate search itself and template generation
Alexander Plavin <alexander@plav.in>
parents:
19499
diff
changeset
|
294 count = 0 |
9a020b354d93
hgweb: separate search itself and template generation
Alexander Plavin <alexander@plav.in>
parents:
19499
diff
changeset
|
295 |
19765
521c373ff134
hgweb: pass variable with current search mode name to the search template
Alexander Plavin <alexander@plav.in>
parents:
19738
diff
changeset
|
296 for ctx in searchfunc[0](funcarg): |
6659
bc553c6d1ef9
webcommands: fix increments lost by 894875eae49b
Andrew Beekhof <beekhof@gmail.com>
parents:
6657
diff
changeset
|
297 count += 1 |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
298 n = ctx.node() |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
299 showtags = webutil.showtag(web.repo, tmpl, 'changelogtag', n) |
7311
de9c87fe1620
hgweb: move another utility function into the webutil module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7310
diff
changeset
|
300 files = webutil.listfilediffs(tmpl, ctx.files(), n, web.maxfiles) |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
301 |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
302 yield tmpl('searchentry', |
29216
ead25aa27a43
py3: convert to next() function
timeless <timeless@mozdev.org>
parents:
28712
diff
changeset
|
303 parity=next(parity), |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
304 changelogtag=showtags, |
7311
de9c87fe1620
hgweb: move another utility function into the webutil module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7310
diff
changeset
|
305 files=files, |
36464
1fb9e01328e4
py3: use pycompat.strkwargs to convert kwargs keys to str
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36415
diff
changeset
|
306 **pycompat.strkwargs(webutil.commonentry(web.repo, ctx))) |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
307 |
10247
e8c7410371e0
hgweb: add less/more links for search logs (issue1972)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
10246
diff
changeset
|
308 if count >= revcount: |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
309 break |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
310 |
36871
3d60a22e27f5
hgweb: perform all parameter lookup via qsparams
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36869
diff
changeset
|
311 query = req.req.qsparams['rev'] |
19418
55b9d98a1ef4
hgweb: move local changelist function to the beginning of the parent one
Alexander Plavin <me@aplavin.ru>
parents:
19396
diff
changeset
|
312 revcount = web.maxchanges |
36871
3d60a22e27f5
hgweb: perform all parameter lookup via qsparams
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36869
diff
changeset
|
313 if 'revcount' in req.req.qsparams: |
20092
77acd8ce01ce
hgweb: ignore non numeric "revcount" parameter values (issue4091)
Isaac Jurado <diptongo@gmail.com>
parents:
20004
diff
changeset
|
314 try: |
36871
3d60a22e27f5
hgweb: perform all parameter lookup via qsparams
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36869
diff
changeset
|
315 revcount = int(req.req.qsparams.get('revcount', revcount)) |
20092
77acd8ce01ce
hgweb: ignore non numeric "revcount" parameter values (issue4091)
Isaac Jurado <diptongo@gmail.com>
parents:
20004
diff
changeset
|
316 revcount = max(revcount, 1) |
77acd8ce01ce
hgweb: ignore non numeric "revcount" parameter values (issue4091)
Isaac Jurado <diptongo@gmail.com>
parents:
20004
diff
changeset
|
317 tmpl.defaults['sessionvars']['revcount'] = revcount |
77acd8ce01ce
hgweb: ignore non numeric "revcount" parameter values (issue4091)
Isaac Jurado <diptongo@gmail.com>
parents:
20004
diff
changeset
|
318 except ValueError: |
77acd8ce01ce
hgweb: ignore non numeric "revcount" parameter values (issue4091)
Isaac Jurado <diptongo@gmail.com>
parents:
20004
diff
changeset
|
319 pass |
19418
55b9d98a1ef4
hgweb: move local changelist function to the beginning of the parent one
Alexander Plavin <me@aplavin.ru>
parents:
19396
diff
changeset
|
320 |
55b9d98a1ef4
hgweb: move local changelist function to the beginning of the parent one
Alexander Plavin <me@aplavin.ru>
parents:
19396
diff
changeset
|
321 lessvars = copy.copy(tmpl.defaults['sessionvars']) |
36582
24897a9d18ac
webcommands: use explicit integer division for Python 3 compat
Augie Fackler <augie@google.com>
parents:
36464
diff
changeset
|
322 lessvars['revcount'] = max(revcount // 2, 1) |
19418
55b9d98a1ef4
hgweb: move local changelist function to the beginning of the parent one
Alexander Plavin <me@aplavin.ru>
parents:
19396
diff
changeset
|
323 lessvars['rev'] = query |
55b9d98a1ef4
hgweb: move local changelist function to the beginning of the parent one
Alexander Plavin <me@aplavin.ru>
parents:
19396
diff
changeset
|
324 morevars = copy.copy(tmpl.defaults['sessionvars']) |
55b9d98a1ef4
hgweb: move local changelist function to the beginning of the parent one
Alexander Plavin <me@aplavin.ru>
parents:
19396
diff
changeset
|
325 morevars['revcount'] = revcount * 2 |
55b9d98a1ef4
hgweb: move local changelist function to the beginning of the parent one
Alexander Plavin <me@aplavin.ru>
parents:
19396
diff
changeset
|
326 morevars['rev'] = query |
55b9d98a1ef4
hgweb: move local changelist function to the beginning of the parent one
Alexander Plavin <me@aplavin.ru>
parents:
19396
diff
changeset
|
327 |
19632
299511aabf85
hgweb: pass arguments which a function depends on explicitly in search
Alexander Plavin <alexander@plav.in>
parents:
19631
diff
changeset
|
328 mode, funcarg = getsearchmode(query) |
19768
186f54d40fdd
hgweb: add link to force literal keyword search
Alexander Plavin <alexander@plav.in>
parents:
19765
diff
changeset
|
329 |
36871
3d60a22e27f5
hgweb: perform all parameter lookup via qsparams
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36869
diff
changeset
|
330 if 'forcekw' in req.req.qsparams: |
19768
186f54d40fdd
hgweb: add link to force literal keyword search
Alexander Plavin <alexander@plav.in>
parents:
19765
diff
changeset
|
331 showforcekw = '' |
186f54d40fdd
hgweb: add link to force literal keyword search
Alexander Plavin <alexander@plav.in>
parents:
19765
diff
changeset
|
332 showunforcekw = searchfuncs[mode][1] |
186f54d40fdd
hgweb: add link to force literal keyword search
Alexander Plavin <alexander@plav.in>
parents:
19765
diff
changeset
|
333 mode = MODE_KEYWORD |
186f54d40fdd
hgweb: add link to force literal keyword search
Alexander Plavin <alexander@plav.in>
parents:
19765
diff
changeset
|
334 funcarg = query |
186f54d40fdd
hgweb: add link to force literal keyword search
Alexander Plavin <alexander@plav.in>
parents:
19765
diff
changeset
|
335 else: |
186f54d40fdd
hgweb: add link to force literal keyword search
Alexander Plavin <alexander@plav.in>
parents:
19765
diff
changeset
|
336 if mode != MODE_KEYWORD: |
186f54d40fdd
hgweb: add link to force literal keyword search
Alexander Plavin <alexander@plav.in>
parents:
19765
diff
changeset
|
337 showforcekw = searchfuncs[MODE_KEYWORD][1] |
186f54d40fdd
hgweb: add link to force literal keyword search
Alexander Plavin <alexander@plav.in>
parents:
19765
diff
changeset
|
338 else: |
186f54d40fdd
hgweb: add link to force literal keyword search
Alexander Plavin <alexander@plav.in>
parents:
19765
diff
changeset
|
339 showforcekw = '' |
186f54d40fdd
hgweb: add link to force literal keyword search
Alexander Plavin <alexander@plav.in>
parents:
19765
diff
changeset
|
340 showunforcekw = '' |
186f54d40fdd
hgweb: add link to force literal keyword search
Alexander Plavin <alexander@plav.in>
parents:
19765
diff
changeset
|
341 |
19631
cf9e5e45c1d3
hgweb: add dynamic search function selection, depending on the query
Alexander Plavin <alexander@plav.in>
parents:
19534
diff
changeset
|
342 searchfunc = searchfuncs[mode] |
cf9e5e45c1d3
hgweb: add dynamic search function selection, depending on the query
Alexander Plavin <alexander@plav.in>
parents:
19534
diff
changeset
|
343 |
12059
0de6cfdcaad8
webcommands: remove unncessary access to repo.changelog
Patrick Mezard <pmezard@gmail.com>
parents:
11332
diff
changeset
|
344 tip = web.repo['tip'] |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
345 parity = paritygen(web.stripecount) |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
346 |
36877
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
347 web.res.setbodygen(tmpl( |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
348 'search', |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
349 query=query, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
350 node=tip.hex(), |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
351 symrev='tip', |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
352 entries=changelist, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
353 archives=web.archivelist('tip'), |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
354 morevars=morevars, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
355 lessvars=lessvars, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
356 modedesc=searchfunc[1], |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
357 showforcekw=showforcekw, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
358 showunforcekw=showunforcekw)) |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
359 |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
360 return web.res |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
361 |
24076
b53d2afd11fb
webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23992
diff
changeset
|
362 @webcommand('changelog') |
10247
e8c7410371e0
hgweb: add less/more links for search logs (issue1972)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
10246
diff
changeset
|
363 def changelog(web, req, tmpl, shortlog=False): |
24089
f17773432782
webcommands: document "changelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24088
diff
changeset
|
364 """ |
f17773432782
webcommands: document "changelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24088
diff
changeset
|
365 /changelog[/{revision}] |
f17773432782
webcommands: document "changelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24088
diff
changeset
|
366 ----------------------- |
f17773432782
webcommands: document "changelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24088
diff
changeset
|
367 |
f17773432782
webcommands: document "changelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24088
diff
changeset
|
368 Show information about multiple changesets. |
f17773432782
webcommands: document "changelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24088
diff
changeset
|
369 |
f17773432782
webcommands: document "changelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24088
diff
changeset
|
370 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
|
371 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
|
372 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
|
373 revision. |
f17773432782
webcommands: document "changelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24088
diff
changeset
|
374 |
f17773432782
webcommands: document "changelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24088
diff
changeset
|
375 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
|
376 defined. This will perform a search for changesets. |
f17773432782
webcommands: document "changelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24088
diff
changeset
|
377 |
f17773432782
webcommands: document "changelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24088
diff
changeset
|
378 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
|
379 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
|
380 :hg:`log -k`). |
24089
f17773432782
webcommands: document "changelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24088
diff
changeset
|
381 |
f17773432782
webcommands: document "changelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24088
diff
changeset
|
382 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
|
383 changesets to render. |
f17773432782
webcommands: document "changelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24088
diff
changeset
|
384 |
f17773432782
webcommands: document "changelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24088
diff
changeset
|
385 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
|
386 """ |
10247
e8c7410371e0
hgweb: add less/more links for search logs (issue1972)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
10246
diff
changeset
|
387 |
19396
afc23eddc324
hgweb: show current search query in the input field
Alexander Plavin <me@aplavin.ru>
parents:
18968
diff
changeset
|
388 query = '' |
36871
3d60a22e27f5
hgweb: perform all parameter lookup via qsparams
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36869
diff
changeset
|
389 if 'node' in req.req.qsparams: |
6392
2540521dc7c1
hgweb: separate out utility functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6368
diff
changeset
|
390 ctx = webutil.changectx(web.repo, req) |
25602
85fb416f2fa7
hgweb: provide symrev (symbolic revision) property to the templates
Anton Shestakov <av6@dwimlabs.net>
parents:
25251
diff
changeset
|
391 symrev = webutil.symrevorshortnode(req, ctx) |
36871
3d60a22e27f5
hgweb: perform all parameter lookup via qsparams
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36869
diff
changeset
|
392 elif 'rev' in req.req.qsparams: |
19634
49a068b8fb0c
hgweb: always run search when a query is entered (bc)
Alexander Plavin <alexander@plav.in>
parents:
19633
diff
changeset
|
393 return _search(web, req, tmpl) |
5591
08887121a652
split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
394 else: |
19534
983bb4069004
hgweb: cleaner if conditions in changelog() function
Alexander Plavin <alexander@plav.in>
parents:
19533
diff
changeset
|
395 ctx = web.repo['tip'] |
25602
85fb416f2fa7
hgweb: provide symrev (symbolic revision) property to the templates
Anton Shestakov <av6@dwimlabs.net>
parents:
25251
diff
changeset
|
396 symrev = 'tip' |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
397 |
19737
ab5442f45441
hgweb: always compute all entries and latestentry in changelog
Alexander Plavin <alexander@plav.in>
parents:
19735
diff
changeset
|
398 def changelist(): |
18427
56ca4443a343
hgweb: use changelog for iteration
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18409
diff
changeset
|
399 revs = [] |
19486
002b711a3e8a
hgweb: fix incorrect way to count revisions in log (issue3977)
Alexander Plavin <me@aplavin.ru>
parents:
19485
diff
changeset
|
400 if pos != -1: |
002b711a3e8a
hgweb: fix incorrect way to count revisions in log (issue3977)
Alexander Plavin <me@aplavin.ru>
parents:
19485
diff
changeset
|
401 revs = web.repo.changelog.revs(pos, 0) |
002b711a3e8a
hgweb: fix incorrect way to count revisions in log (issue3977)
Alexander Plavin <me@aplavin.ru>
parents:
19485
diff
changeset
|
402 curcount = 0 |
23745
513d47905114
hgweb: extract changelist entry generation into own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23740
diff
changeset
|
403 for rev in revs: |
19486
002b711a3e8a
hgweb: fix incorrect way to count revisions in log (issue3977)
Alexander Plavin <me@aplavin.ru>
parents:
19485
diff
changeset
|
404 curcount += 1 |
19738
93b8544c4482
hgweb: add nextentry variable for easy pagination in changelog
Alexander Plavin <alexander@plav.in>
parents:
19737
diff
changeset
|
405 if curcount > revcount + 1: |
19486
002b711a3e8a
hgweb: fix incorrect way to count revisions in log (issue3977)
Alexander Plavin <me@aplavin.ru>
parents:
19485
diff
changeset
|
406 break |
23745
513d47905114
hgweb: extract changelist entry generation into own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23740
diff
changeset
|
407 |
513d47905114
hgweb: extract changelist entry generation into own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23740
diff
changeset
|
408 entry = webutil.changelistentry(web, web.repo[rev], tmpl) |
29216
ead25aa27a43
py3: convert to next() function
timeless <timeless@mozdev.org>
parents:
28712
diff
changeset
|
409 entry['parity'] = next(parity) |
23745
513d47905114
hgweb: extract changelist entry generation into own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23740
diff
changeset
|
410 yield entry |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
411 |
24306
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24177
diff
changeset
|
412 if shortlog: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24177
diff
changeset
|
413 revcount = web.maxshortchanges |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24177
diff
changeset
|
414 else: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24177
diff
changeset
|
415 revcount = web.maxchanges |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24177
diff
changeset
|
416 |
36871
3d60a22e27f5
hgweb: perform all parameter lookup via qsparams
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36869
diff
changeset
|
417 if 'revcount' in req.req.qsparams: |
20092
77acd8ce01ce
hgweb: ignore non numeric "revcount" parameter values (issue4091)
Isaac Jurado <diptongo@gmail.com>
parents:
20004
diff
changeset
|
418 try: |
36871
3d60a22e27f5
hgweb: perform all parameter lookup via qsparams
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36869
diff
changeset
|
419 revcount = int(req.req.qsparams.get('revcount', revcount)) |
20092
77acd8ce01ce
hgweb: ignore non numeric "revcount" parameter values (issue4091)
Isaac Jurado <diptongo@gmail.com>
parents:
20004
diff
changeset
|
420 revcount = max(revcount, 1) |
77acd8ce01ce
hgweb: ignore non numeric "revcount" parameter values (issue4091)
Isaac Jurado <diptongo@gmail.com>
parents:
20004
diff
changeset
|
421 tmpl.defaults['sessionvars']['revcount'] = revcount |
77acd8ce01ce
hgweb: ignore non numeric "revcount" parameter values (issue4091)
Isaac Jurado <diptongo@gmail.com>
parents:
20004
diff
changeset
|
422 except ValueError: |
77acd8ce01ce
hgweb: ignore non numeric "revcount" parameter values (issue4091)
Isaac Jurado <diptongo@gmail.com>
parents:
20004
diff
changeset
|
423 pass |
10246
b9d02695bde4
hgweb: add less/more links to shortlog/filelog nav
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
10245
diff
changeset
|
424 |
b9d02695bde4
hgweb: add less/more links to shortlog/filelog nav
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
10245
diff
changeset
|
425 lessvars = copy.copy(tmpl.defaults['sessionvars']) |
36582
24897a9d18ac
webcommands: use explicit integer division for Python 3 compat
Augie Fackler <augie@google.com>
parents:
36464
diff
changeset
|
426 lessvars['revcount'] = max(revcount // 2, 1) |
10246
b9d02695bde4
hgweb: add less/more links to shortlog/filelog nav
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
10245
diff
changeset
|
427 morevars = copy.copy(tmpl.defaults['sessionvars']) |
b9d02695bde4
hgweb: add less/more links to shortlog/filelog nav
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
10245
diff
changeset
|
428 morevars['revcount'] = revcount * 2 |
b9d02695bde4
hgweb: add less/more links to shortlog/filelog nav
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
10245
diff
changeset
|
429 |
12059
0de6cfdcaad8
webcommands: remove unncessary access to repo.changelog
Patrick Mezard <pmezard@gmail.com>
parents:
11332
diff
changeset
|
430 count = len(web.repo) |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
431 pos = ctx.rev() |
19486
002b711a3e8a
hgweb: fix incorrect way to count revisions in log (issue3977)
Alexander Plavin <me@aplavin.ru>
parents:
19485
diff
changeset
|
432 parity = paritygen(web.stripecount) |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
433 |
18409
e3f5cef11d6a
hgweb: pass repo object to revnav construction
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18408
diff
changeset
|
434 changenav = webutil.revnav(web.repo).gen(pos, revcount, count) |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
435 |
19737
ab5442f45441
hgweb: always compute all entries and latestentry in changelog
Alexander Plavin <alexander@plav.in>
parents:
19735
diff
changeset
|
436 entries = list(changelist()) |
ab5442f45441
hgweb: always compute all entries and latestentry in changelog
Alexander Plavin <alexander@plav.in>
parents:
19735
diff
changeset
|
437 latestentry = entries[:1] |
19738
93b8544c4482
hgweb: add nextentry variable for easy pagination in changelog
Alexander Plavin <alexander@plav.in>
parents:
19737
diff
changeset
|
438 if len(entries) > revcount: |
93b8544c4482
hgweb: add nextentry variable for easy pagination in changelog
Alexander Plavin <alexander@plav.in>
parents:
19737
diff
changeset
|
439 nextentry = entries[-1:] |
93b8544c4482
hgweb: add nextentry variable for easy pagination in changelog
Alexander Plavin <alexander@plav.in>
parents:
19737
diff
changeset
|
440 entries = entries[:-1] |
93b8544c4482
hgweb: add nextentry variable for easy pagination in changelog
Alexander Plavin <alexander@plav.in>
parents:
19737
diff
changeset
|
441 else: |
93b8544c4482
hgweb: add nextentry variable for easy pagination in changelog
Alexander Plavin <alexander@plav.in>
parents:
19737
diff
changeset
|
442 nextentry = [] |
19737
ab5442f45441
hgweb: always compute all entries and latestentry in changelog
Alexander Plavin <alexander@plav.in>
parents:
19735
diff
changeset
|
443 |
36877
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
444 web.res.setbodygen(tmpl( |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
445 'shortlog' if shortlog else 'changelog', |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
446 changenav=changenav, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
447 node=ctx.hex(), |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
448 rev=pos, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
449 symrev=symrev, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
450 changesets=count, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
451 entries=entries, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
452 latestentry=latestentry, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
453 nextentry=nextentry, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
454 archives=web.archivelist('tip'), |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
455 revcount=revcount, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
456 morevars=morevars, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
457 lessvars=lessvars, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
458 query=query)) |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
459 |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
460 return web.res |
5591
08887121a652
split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
461 |
24076
b53d2afd11fb
webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23992
diff
changeset
|
462 @webcommand('shortlog') |
5600
9d900f7282e6
hgweb: explicitly pass around the templater
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
5598
diff
changeset
|
463 def shortlog(web, req, tmpl): |
24086
2d8e93554822
webcommands: document "shortlog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24085
diff
changeset
|
464 """ |
2d8e93554822
webcommands: document "shortlog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24085
diff
changeset
|
465 /shortlog |
2d8e93554822
webcommands: document "shortlog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24085
diff
changeset
|
466 --------- |
2d8e93554822
webcommands: document "shortlog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24085
diff
changeset
|
467 |
2d8e93554822
webcommands: document "shortlog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24085
diff
changeset
|
468 Show basic information about a set of changesets. |
2d8e93554822
webcommands: document "shortlog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24085
diff
changeset
|
469 |
2d8e93554822
webcommands: document "shortlog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24085
diff
changeset
|
470 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
|
471 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
|
472 ``changelog`` template. |
2d8e93554822
webcommands: document "shortlog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24085
diff
changeset
|
473 """ |
19872
681f7b9213a4
check-code: check for spaces around = for named parameters
Mads Kiilerich <madski@unity3d.com>
parents:
19768
diff
changeset
|
474 return changelog(web, req, tmpl, shortlog=True) |
5591
08887121a652
split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
475 |
24076
b53d2afd11fb
webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23992
diff
changeset
|
476 @webcommand('changeset') |
5600
9d900f7282e6
hgweb: explicitly pass around the templater
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
5598
diff
changeset
|
477 def changeset(web, req, tmpl): |
24085
0bf61eae67ab
webcommands: document "changeset" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24084
diff
changeset
|
478 """ |
0bf61eae67ab
webcommands: document "changeset" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24084
diff
changeset
|
479 /changeset[/{revision}] |
0bf61eae67ab
webcommands: document "changeset" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24084
diff
changeset
|
480 ----------------------- |
0bf61eae67ab
webcommands: document "changeset" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24084
diff
changeset
|
481 |
0bf61eae67ab
webcommands: document "changeset" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24084
diff
changeset
|
482 Show information about a single changeset. |
0bf61eae67ab
webcommands: document "changeset" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24084
diff
changeset
|
483 |
0bf61eae67ab
webcommands: document "changeset" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24084
diff
changeset
|
484 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
|
485 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
|
486 will be shown. |
0bf61eae67ab
webcommands: document "changeset" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24084
diff
changeset
|
487 |
0bf61eae67ab
webcommands: document "changeset" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24084
diff
changeset
|
488 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
|
489 ``changesetbookmark``, ``filenodelink``, ``filenolink``, and the many |
0bf61eae67ab
webcommands: document "changeset" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24084
diff
changeset
|
490 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
|
491 """ |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
492 ctx = webutil.changectx(web.repo, req) |
36877
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
493 web.res.setbodygen(tmpl('changeset', |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
494 **webutil.changesetentry(web, req, tmpl, ctx))) |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
495 return web.res |
5591
08887121a652
split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
496 |
24076
b53d2afd11fb
webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23992
diff
changeset
|
497 rev = webcommand('rev')(changeset) |
5591
08887121a652
split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
498 |
16448
e6b45e9a75dc
hgweb: add hook for remapping repository path into virtual paths
Martin Geisler <mg@lazybytes.net>
parents:
16308
diff
changeset
|
499 def decodepath(path): |
e6b45e9a75dc
hgweb: add hook for remapping repository path into virtual paths
Martin Geisler <mg@lazybytes.net>
parents:
16308
diff
changeset
|
500 """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
|
501 working copy. |
e6b45e9a75dc
hgweb: add hook for remapping repository path into virtual paths
Martin Geisler <mg@lazybytes.net>
parents:
16308
diff
changeset
|
502 |
e6b45e9a75dc
hgweb: add hook for remapping repository path into virtual paths
Martin Geisler <mg@lazybytes.net>
parents:
16308
diff
changeset
|
503 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
|
504 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
|
505 return path |
e6b45e9a75dc
hgweb: add hook for remapping repository path into virtual paths
Martin Geisler <mg@lazybytes.net>
parents:
16308
diff
changeset
|
506 |
24076
b53d2afd11fb
webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23992
diff
changeset
|
507 @webcommand('manifest') |
5600
9d900f7282e6
hgweb: explicitly pass around the templater
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
5598
diff
changeset
|
508 def manifest(web, req, tmpl): |
24090
a86b2922ea30
webcommands: document "manifest" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24089
diff
changeset
|
509 """ |
a86b2922ea30
webcommands: document "manifest" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24089
diff
changeset
|
510 /manifest[/{revision}[/{path}]] |
a86b2922ea30
webcommands: document "manifest" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24089
diff
changeset
|
511 ------------------------------- |
a86b2922ea30
webcommands: document "manifest" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24089
diff
changeset
|
512 |
a86b2922ea30
webcommands: document "manifest" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24089
diff
changeset
|
513 Show information about a directory. |
a86b2922ea30
webcommands: document "manifest" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24089
diff
changeset
|
514 |
24868
9668c653eb9d
webcommands: fix description of manifest default behavior
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
24867
diff
changeset
|
515 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
|
516 directory for the ``tip`` changeset will be shown. |
a86b2922ea30
webcommands: document "manifest" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24089
diff
changeset
|
517 |
a86b2922ea30
webcommands: document "manifest" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24089
diff
changeset
|
518 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
|
519 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
|
520 directories and files. |
a86b2922ea30
webcommands: document "manifest" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24089
diff
changeset
|
521 |
a86b2922ea30
webcommands: document "manifest" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24089
diff
changeset
|
522 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
|
523 """ |
36871
3d60a22e27f5
hgweb: perform all parameter lookup via qsparams
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36869
diff
changeset
|
524 if 'node' in req.req.qsparams: |
25602
85fb416f2fa7
hgweb: provide symrev (symbolic revision) property to the templates
Anton Shestakov <av6@dwimlabs.net>
parents:
25251
diff
changeset
|
525 ctx = webutil.changectx(web.repo, req) |
85fb416f2fa7
hgweb: provide symrev (symbolic revision) property to the templates
Anton Shestakov <av6@dwimlabs.net>
parents:
25251
diff
changeset
|
526 symrev = webutil.symrevorshortnode(req, ctx) |
85fb416f2fa7
hgweb: provide symrev (symbolic revision) property to the templates
Anton Shestakov <av6@dwimlabs.net>
parents:
25251
diff
changeset
|
527 else: |
85fb416f2fa7
hgweb: provide symrev (symbolic revision) property to the templates
Anton Shestakov <av6@dwimlabs.net>
parents:
25251
diff
changeset
|
528 ctx = web.repo['tip'] |
85fb416f2fa7
hgweb: provide symrev (symbolic revision) property to the templates
Anton Shestakov <av6@dwimlabs.net>
parents:
25251
diff
changeset
|
529 symrev = 'tip' |
36871
3d60a22e27f5
hgweb: perform all parameter lookup via qsparams
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36869
diff
changeset
|
530 path = webutil.cleanpath(web.repo, req.req.qsparams.get('file', '')) |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
531 mf = ctx.manifest() |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
532 node = ctx.node() |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
533 |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
534 files = {} |
7305
c21d236ca897
hgweb: descend empty directories in web view
Ry4an Brase <ry4an-hg@ry4an.org>
parents:
7300
diff
changeset
|
535 dirs = {} |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
536 parity = paritygen(web.stripecount) |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
537 |
36737
250f3168d907
hgweb: fix up trailing slash detection on Python 3
Augie Fackler <augie@google.com>
parents:
36582
diff
changeset
|
538 if path and path[-1:] != "/": |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
539 path += "/" |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
540 l = len(path) |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
541 abspath = "/" + path |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
542 |
16448
e6b45e9a75dc
hgweb: add hook for remapping repository path into virtual paths
Martin Geisler <mg@lazybytes.net>
parents:
16308
diff
changeset
|
543 for full, n in mf.iteritems(): |
e6b45e9a75dc
hgweb: add hook for remapping repository path into virtual paths
Martin Geisler <mg@lazybytes.net>
parents:
16308
diff
changeset
|
544 # 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
|
545 # (repository) path |
e6b45e9a75dc
hgweb: add hook for remapping repository path into virtual paths
Martin Geisler <mg@lazybytes.net>
parents:
16308
diff
changeset
|
546 f = decodepath(full) |
e6b45e9a75dc
hgweb: add hook for remapping repository path into virtual paths
Martin Geisler <mg@lazybytes.net>
parents:
16308
diff
changeset
|
547 |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
548 if f[:l] != path: |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
549 continue |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
550 remain = f[l:] |
7305
c21d236ca897
hgweb: descend empty directories in web view
Ry4an Brase <ry4an-hg@ry4an.org>
parents:
7300
diff
changeset
|
551 elements = remain.split('/') |
c21d236ca897
hgweb: descend empty directories in web view
Ry4an Brase <ry4an-hg@ry4an.org>
parents:
7300
diff
changeset
|
552 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
|
553 files[remain] = full |
7305
c21d236ca897
hgweb: descend empty directories in web view
Ry4an Brase <ry4an-hg@ry4an.org>
parents:
7300
diff
changeset
|
554 else: |
c21d236ca897
hgweb: descend empty directories in web view
Ry4an Brase <ry4an-hg@ry4an.org>
parents:
7300
diff
changeset
|
555 h = dirs # need to retain ref to dirs (root) |
c21d236ca897
hgweb: descend empty directories in web view
Ry4an Brase <ry4an-hg@ry4an.org>
parents:
7300
diff
changeset
|
556 for elem in elements[0:-1]: |
c21d236ca897
hgweb: descend empty directories in web view
Ry4an Brase <ry4an-hg@ry4an.org>
parents:
7300
diff
changeset
|
557 if elem not in h: |
c21d236ca897
hgweb: descend empty directories in web view
Ry4an Brase <ry4an-hg@ry4an.org>
parents:
7300
diff
changeset
|
558 h[elem] = {} |
c21d236ca897
hgweb: descend empty directories in web view
Ry4an Brase <ry4an-hg@ry4an.org>
parents:
7300
diff
changeset
|
559 h = h[elem] |
c21d236ca897
hgweb: descend empty directories in web view
Ry4an Brase <ry4an-hg@ry4an.org>
parents:
7300
diff
changeset
|
560 if len(h) > 1: |
c21d236ca897
hgweb: descend empty directories in web view
Ry4an Brase <ry4an-hg@ry4an.org>
parents:
7300
diff
changeset
|
561 break |
c21d236ca897
hgweb: descend empty directories in web view
Ry4an Brase <ry4an-hg@ry4an.org>
parents:
7300
diff
changeset
|
562 h[None] = None # denotes files present |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
563 |
7565
5f162f61e479
hgweb: fix problems with empty repositories
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7434
diff
changeset
|
564 if mf and not files and not dirs: |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
565 raise ErrorResponse(HTTP_NOT_FOUND, 'path not found: ' + path) |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
566 |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
567 def filelist(**map): |
8209
a1a5a57efe90
replace util.sort with sorted built-in
Matt Mackall <mpm@selenic.com>
parents:
7966
diff
changeset
|
568 for f in sorted(files): |
7305
c21d236ca897
hgweb: descend empty directories in web view
Ry4an Brase <ry4an-hg@ry4an.org>
parents:
7300
diff
changeset
|
569 full = files[f] |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
570 |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
571 fctx = ctx.filectx(full) |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
572 yield {"file": full, |
29216
ead25aa27a43
py3: convert to next() function
timeless <timeless@mozdev.org>
parents:
28712
diff
changeset
|
573 "parity": next(parity), |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
574 "basename": f, |
6747
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6720
diff
changeset
|
575 "date": fctx.date(), |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
576 "size": fctx.size(), |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
577 "permissions": mf.flags(full)} |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
578 |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
579 def dirlist(**map): |
8209
a1a5a57efe90
replace util.sort with sorted built-in
Matt Mackall <mpm@selenic.com>
parents:
7966
diff
changeset
|
580 for d in sorted(dirs): |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
581 |
7305
c21d236ca897
hgweb: descend empty directories in web view
Ry4an Brase <ry4an-hg@ry4an.org>
parents:
7300
diff
changeset
|
582 emptydirs = [] |
c21d236ca897
hgweb: descend empty directories in web view
Ry4an Brase <ry4an-hg@ry4an.org>
parents:
7300
diff
changeset
|
583 h = dirs[d] |
c21d236ca897
hgweb: descend empty directories in web view
Ry4an Brase <ry4an-hg@ry4an.org>
parents:
7300
diff
changeset
|
584 while isinstance(h, dict) and len(h) == 1: |
36307
a748a5d1d7c3
webcommands: unpack contents of length-1 dict portably
Augie Fackler <augie@google.com>
parents:
36281
diff
changeset
|
585 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
|
586 if v: |
c21d236ca897
hgweb: descend empty directories in web view
Ry4an Brase <ry4an-hg@ry4an.org>
parents:
7300
diff
changeset
|
587 emptydirs.append(k) |
c21d236ca897
hgweb: descend empty directories in web view
Ry4an Brase <ry4an-hg@ry4an.org>
parents:
7300
diff
changeset
|
588 h = v |
c21d236ca897
hgweb: descend empty directories in web view
Ry4an Brase <ry4an-hg@ry4an.org>
parents:
7300
diff
changeset
|
589 |
c21d236ca897
hgweb: descend empty directories in web view
Ry4an Brase <ry4an-hg@ry4an.org>
parents:
7300
diff
changeset
|
590 path = "%s%s" % (abspath, d) |
29216
ead25aa27a43
py3: convert to next() function
timeless <timeless@mozdev.org>
parents:
28712
diff
changeset
|
591 yield {"parity": next(parity), |
7305
c21d236ca897
hgweb: descend empty directories in web view
Ry4an Brase <ry4an-hg@ry4an.org>
parents:
7300
diff
changeset
|
592 "path": path, |
c21d236ca897
hgweb: descend empty directories in web view
Ry4an Brase <ry4an-hg@ry4an.org>
parents:
7300
diff
changeset
|
593 "emptydirs": "/".join(emptydirs), |
c21d236ca897
hgweb: descend empty directories in web view
Ry4an Brase <ry4an-hg@ry4an.org>
parents:
7300
diff
changeset
|
594 "basename": d} |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
595 |
36877
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
596 web.res.setbodygen(tmpl( |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
597 'manifest', |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
598 symrev=symrev, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
599 path=abspath, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
600 up=webutil.up(abspath), |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
601 upparity=next(parity), |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
602 fentries=filelist, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
603 dentries=dirlist, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
604 archives=web.archivelist(hex(node)), |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
605 **pycompat.strkwargs(webutil.commonentry(web.repo, ctx)))) |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
606 |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
607 return web.res |
5591
08887121a652
split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
608 |
24076
b53d2afd11fb
webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23992
diff
changeset
|
609 @webcommand('tags') |
5600
9d900f7282e6
hgweb: explicitly pass around the templater
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
5598
diff
changeset
|
610 def tags(web, req, tmpl): |
24084
ef06e2b1a3d1
webcommands: document "tags" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24083
diff
changeset
|
611 """ |
ef06e2b1a3d1
webcommands: document "tags" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24083
diff
changeset
|
612 /tags |
ef06e2b1a3d1
webcommands: document "tags" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24083
diff
changeset
|
613 ----- |
ef06e2b1a3d1
webcommands: document "tags" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24083
diff
changeset
|
614 |
ef06e2b1a3d1
webcommands: document "tags" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24083
diff
changeset
|
615 Show information about tags. |
ef06e2b1a3d1
webcommands: document "tags" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24083
diff
changeset
|
616 |
ef06e2b1a3d1
webcommands: document "tags" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24083
diff
changeset
|
617 No arguments are accepted. |
ef06e2b1a3d1
webcommands: document "tags" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24083
diff
changeset
|
618 |
ef06e2b1a3d1
webcommands: document "tags" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24083
diff
changeset
|
619 The ``tags`` template is rendered. |
ef06e2b1a3d1
webcommands: document "tags" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24083
diff
changeset
|
620 """ |
18029
109a6a9dcca8
hgweb: fix iterator reuse in atom feed generation
Matt Mackall <mpm@selenic.com>
parents:
17322
diff
changeset
|
621 i = list(reversed(web.repo.tagslist())) |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
622 parity = paritygen(web.stripecount) |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
623 |
18402
bfba6d954108
hgweb: `limit` argument is actually `latestonly` renames and enforce
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18352
diff
changeset
|
624 def entries(notip, latestonly, **map): |
bfba6d954108
hgweb: `limit` argument is actually `latestonly` renames and enforce
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18352
diff
changeset
|
625 t = i |
bfba6d954108
hgweb: `limit` argument is actually `latestonly` renames and enforce
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18352
diff
changeset
|
626 if notip: |
bfba6d954108
hgweb: `limit` argument is actually `latestonly` renames and enforce
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18352
diff
changeset
|
627 t = [(k, n) for k, n in i if k != "tip"] |
bfba6d954108
hgweb: `limit` argument is actually `latestonly` renames and enforce
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18352
diff
changeset
|
628 if latestonly: |
bfba6d954108
hgweb: `limit` argument is actually `latestonly` renames and enforce
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18352
diff
changeset
|
629 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
|
630 for k, n in t: |
29216
ead25aa27a43
py3: convert to next() function
timeless <timeless@mozdev.org>
parents:
28712
diff
changeset
|
631 yield {"parity": next(parity), |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
632 "tag": k, |
6747
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6720
diff
changeset
|
633 "date": web.repo[n].date(), |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
634 "node": hex(n)} |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
635 |
36877
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
636 web.res.setbodygen(tmpl( |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
637 'tags', |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
638 node=hex(web.repo.changelog.tip()), |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
639 entries=lambda **x: entries(False, False, **x), |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
640 entriesnotip=lambda **x: entries(True, False, **x), |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
641 latestentry=lambda **x: entries(True, True, **x))) |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
642 |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
643 return web.res |
5591
08887121a652
split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
644 |
24076
b53d2afd11fb
webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23992
diff
changeset
|
645 @webcommand('bookmarks') |
13597
38c9837b1f75
hgweb: add separate page with bookmarks listing
Alexander Solovyov <alexander@solovyov.net>
parents:
13596
diff
changeset
|
646 def bookmarks(web, req, tmpl): |
24083
5fbb5217a6c8
webcommands: document "bookmarks" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24082
diff
changeset
|
647 """ |
5fbb5217a6c8
webcommands: document "bookmarks" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24082
diff
changeset
|
648 /bookmarks |
5fbb5217a6c8
webcommands: document "bookmarks" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24082
diff
changeset
|
649 ---------- |
5fbb5217a6c8
webcommands: document "bookmarks" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24082
diff
changeset
|
650 |
5fbb5217a6c8
webcommands: document "bookmarks" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24082
diff
changeset
|
651 Show information about bookmarks. |
5fbb5217a6c8
webcommands: document "bookmarks" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24082
diff
changeset
|
652 |
5fbb5217a6c8
webcommands: document "bookmarks" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24082
diff
changeset
|
653 No arguments are accepted. |
5fbb5217a6c8
webcommands: document "bookmarks" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24082
diff
changeset
|
654 |
5fbb5217a6c8
webcommands: document "bookmarks" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24082
diff
changeset
|
655 The ``bookmarks`` template is rendered. |
5fbb5217a6c8
webcommands: document "bookmarks" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24082
diff
changeset
|
656 """ |
18478
886936ecc21b
hgweb: don't attempt to show hidden bookmarks (issue3774)
Kevin Bullock <kbullock@ringworld.org>
parents:
18477
diff
changeset
|
657 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
|
658 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
|
659 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
|
660 parity = paritygen(web.stripecount) |
38c9837b1f75
hgweb: add separate page with bookmarks listing
Alexander Solovyov <alexander@solovyov.net>
parents:
13596
diff
changeset
|
661 |
18402
bfba6d954108
hgweb: `limit` argument is actually `latestonly` renames and enforce
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18352
diff
changeset
|
662 def entries(latestonly, **map): |
28710
ca0c0ca30c62
hgweb: sort bookmarks early
Anton Shestakov <av6@dwimlabs.net>
parents:
28212
diff
changeset
|
663 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
|
664 if latestonly: |
28710
ca0c0ca30c62
hgweb: sort bookmarks early
Anton Shestakov <av6@dwimlabs.net>
parents:
28212
diff
changeset
|
665 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
|
666 for k, n in t: |
29216
ead25aa27a43
py3: convert to next() function
timeless <timeless@mozdev.org>
parents:
28712
diff
changeset
|
667 yield {"parity": next(parity), |
13597
38c9837b1f75
hgweb: add separate page with bookmarks listing
Alexander Solovyov <alexander@solovyov.net>
parents:
13596
diff
changeset
|
668 "bookmark": k, |
38c9837b1f75
hgweb: add separate page with bookmarks listing
Alexander Solovyov <alexander@solovyov.net>
parents:
13596
diff
changeset
|
669 "date": web.repo[n].date(), |
38c9837b1f75
hgweb: add separate page with bookmarks listing
Alexander Solovyov <alexander@solovyov.net>
parents:
13596
diff
changeset
|
670 "node": hex(n)} |
38c9837b1f75
hgweb: add separate page with bookmarks listing
Alexander Solovyov <alexander@solovyov.net>
parents:
13596
diff
changeset
|
671 |
28712
80e922479891
hgweb: generate last change date for an empty atom-bookmarks feed (issue5022)
Anton Shestakov <av6@dwimlabs.net>
parents:
28711
diff
changeset
|
672 if i: |
80e922479891
hgweb: generate last change date for an empty atom-bookmarks feed (issue5022)
Anton Shestakov <av6@dwimlabs.net>
parents:
28711
diff
changeset
|
673 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
|
674 else: |
80e922479891
hgweb: generate last change date for an empty atom-bookmarks feed (issue5022)
Anton Shestakov <av6@dwimlabs.net>
parents:
28711
diff
changeset
|
675 latestrev = -1 |
80e922479891
hgweb: generate last change date for an empty atom-bookmarks feed (issue5022)
Anton Shestakov <av6@dwimlabs.net>
parents:
28711
diff
changeset
|
676 |
36877
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
677 web.res.setbodygen(tmpl( |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
678 'bookmarks', |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
679 node=hex(web.repo.changelog.tip()), |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
680 lastchange=[{'date': web.repo[latestrev].date()}], |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
681 entries=lambda **x: entries(latestonly=False, **x), |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
682 latestentry=lambda **x: entries(latestonly=True, **x))) |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
683 |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
684 return web.res |
13597
38c9837b1f75
hgweb: add separate page with bookmarks listing
Alexander Solovyov <alexander@solovyov.net>
parents:
13596
diff
changeset
|
685 |
24076
b53d2afd11fb
webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23992
diff
changeset
|
686 @webcommand('branches') |
8352
eefcb59d44d6
webcommands: add 'branches' command, similar to 'tags'
Sune Foldager <cryo@cyanite.org>
parents:
8236
diff
changeset
|
687 def branches(web, req, tmpl): |
24082
32dabf811b39
webcommands: document "branches" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24081
diff
changeset
|
688 """ |
32dabf811b39
webcommands: document "branches" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24081
diff
changeset
|
689 /branches |
32dabf811b39
webcommands: document "branches" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24081
diff
changeset
|
690 --------- |
32dabf811b39
webcommands: document "branches" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24081
diff
changeset
|
691 |
32dabf811b39
webcommands: document "branches" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24081
diff
changeset
|
692 Show information about branches. |
32dabf811b39
webcommands: document "branches" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24081
diff
changeset
|
693 |
32dabf811b39
webcommands: document "branches" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24081
diff
changeset
|
694 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
|
695 |
32dabf811b39
webcommands: document "branches" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24081
diff
changeset
|
696 No arguments are accepted. |
32dabf811b39
webcommands: document "branches" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24081
diff
changeset
|
697 |
32dabf811b39
webcommands: document "branches" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24081
diff
changeset
|
698 The ``branches`` template is rendered. |
32dabf811b39
webcommands: document "branches" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24081
diff
changeset
|
699 """ |
26129
a103ecb8a04a
hgweb: move branchentries code from webcommands to webutil
Anton Shestakov <av6@dwimlabs.net>
parents:
25660
diff
changeset
|
700 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
|
701 latestentry = webutil.branchentries(web.repo, web.stripecount, 1) |
36877
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
702 |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
703 web.res.setbodygen(tmpl( |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
704 'branches', |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
705 node=hex(web.repo.changelog.tip()), |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
706 entries=entries, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
707 latestentry=latestentry)) |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
708 |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
709 return web.res |
8352
eefcb59d44d6
webcommands: add 'branches' command, similar to 'tags'
Sune Foldager <cryo@cyanite.org>
parents:
8236
diff
changeset
|
710 |
24076
b53d2afd11fb
webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23992
diff
changeset
|
711 @webcommand('summary') |
5600
9d900f7282e6
hgweb: explicitly pass around the templater
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
5598
diff
changeset
|
712 def summary(web, req, tmpl): |
24091
6b6ec887c79b
webcommands: document "summary" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24090
diff
changeset
|
713 """ |
6b6ec887c79b
webcommands: document "summary" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24090
diff
changeset
|
714 /summary |
6b6ec887c79b
webcommands: document "summary" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24090
diff
changeset
|
715 -------- |
6b6ec887c79b
webcommands: document "summary" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24090
diff
changeset
|
716 |
6b6ec887c79b
webcommands: document "summary" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24090
diff
changeset
|
717 Show a summary of repository state. |
6b6ec887c79b
webcommands: document "summary" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24090
diff
changeset
|
718 |
6b6ec887c79b
webcommands: document "summary" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24090
diff
changeset
|
719 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
|
720 is captured by this handler. |
6b6ec887c79b
webcommands: document "summary" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24090
diff
changeset
|
721 |
6b6ec887c79b
webcommands: document "summary" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24090
diff
changeset
|
722 The ``summary`` template is rendered. |
6b6ec887c79b
webcommands: document "summary" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24090
diff
changeset
|
723 """ |
17261
c0068b058fcd
webcommands: do not modify repo.tagslist()
Patrick Mezard <patrick@mezard.eu>
parents:
17202
diff
changeset
|
724 i = reversed(web.repo.tagslist()) |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
725 |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
726 def tagentries(**map): |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
727 parity = paritygen(web.stripecount) |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
728 count = 0 |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
729 for k, n in i: |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
730 if k == "tip": # skip tip |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
731 continue |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
732 |
6659
bc553c6d1ef9
webcommands: fix increments lost by 894875eae49b
Andrew Beekhof <beekhof@gmail.com>
parents:
6657
diff
changeset
|
733 count += 1 |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
734 if count > 10: # limit to 10 tags |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
735 break |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
736 |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
737 yield tmpl("tagentry", |
29216
ead25aa27a43
py3: convert to next() function
timeless <timeless@mozdev.org>
parents:
28712
diff
changeset
|
738 parity=next(parity), |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
739 tag=k, |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
740 node=hex(n), |
6747
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6720
diff
changeset
|
741 date=web.repo[n].date()) |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
742 |
13924
ea726c97c1b6
hgweb: add bookmarks listing to summary page of gitweb/monoblue styles
Yuya Nishihara <yuya@tcha.org>
parents:
13923
diff
changeset
|
743 def bookmarks(**map): |
ea726c97c1b6
hgweb: add bookmarks listing to summary page of gitweb/monoblue styles
Yuya Nishihara <yuya@tcha.org>
parents:
13923
diff
changeset
|
744 parity = paritygen(web.stripecount) |
18563
6d098adc5a46
hgweb: make 'summary' work with hidden changesets (issue3810)
Kevin Bullock <kbullock@ringworld.org>
parents:
18524
diff
changeset
|
745 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
|
746 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
|
747 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
|
748 for k, n in marks[:10]: # limit to 10 bookmarks |
29216
ead25aa27a43
py3: convert to next() function
timeless <timeless@mozdev.org>
parents:
28712
diff
changeset
|
749 yield {'parity': next(parity), |
13924
ea726c97c1b6
hgweb: add bookmarks listing to summary page of gitweb/monoblue styles
Yuya Nishihara <yuya@tcha.org>
parents:
13923
diff
changeset
|
750 'bookmark': k, |
ea726c97c1b6
hgweb: add bookmarks listing to summary page of gitweb/monoblue styles
Yuya Nishihara <yuya@tcha.org>
parents:
13923
diff
changeset
|
751 'date': web.repo[n].date(), |
ea726c97c1b6
hgweb: add bookmarks listing to summary page of gitweb/monoblue styles
Yuya Nishihara <yuya@tcha.org>
parents:
13923
diff
changeset
|
752 'node': hex(n)} |
ea726c97c1b6
hgweb: add bookmarks listing to summary page of gitweb/monoblue styles
Yuya Nishihara <yuya@tcha.org>
parents:
13923
diff
changeset
|
753 |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
754 def changelist(**map): |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
755 parity = paritygen(web.stripecount, offset=start - end) |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
756 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
|
757 revs = [] |
6d098adc5a46
hgweb: make 'summary' work with hidden changesets (issue3810)
Kevin Bullock <kbullock@ringworld.org>
parents:
18524
diff
changeset
|
758 if start < end: |
6d098adc5a46
hgweb: make 'summary' work with hidden changesets (issue3810)
Kevin Bullock <kbullock@ringworld.org>
parents:
18524
diff
changeset
|
759 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
|
760 for i in revs: |
6747
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6720
diff
changeset
|
761 ctx = web.repo[i] |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
762 |
18319
e350ce798b63
hgweb: no do not use listinsert(0, ...)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18037
diff
changeset
|
763 l.append(tmpl( |
27294
5aa2afb4f81a
hgweb: move entry-preparing code from webcommands to webutils.commonentry()
Anton Shestakov <av6@dwimlabs.net>
parents:
27160
diff
changeset
|
764 'shortlogentry', |
29216
ead25aa27a43
py3: convert to next() function
timeless <timeless@mozdev.org>
parents:
28712
diff
changeset
|
765 parity=next(parity), |
36464
1fb9e01328e4
py3: use pycompat.strkwargs to convert kwargs keys to str
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36415
diff
changeset
|
766 **pycompat.strkwargs(webutil.commonentry(web.repo, ctx)))) |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
767 |
29382
e4b777fe1576
templates: add support for summary webcommand in json style
Laura Médioni <laura.medioni@logilab.fr>
parents:
29325
diff
changeset
|
768 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
|
769 yield entry |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
770 |
12059
0de6cfdcaad8
webcommands: remove unncessary access to repo.changelog
Patrick Mezard <pmezard@gmail.com>
parents:
11332
diff
changeset
|
771 tip = web.repo['tip'] |
0de6cfdcaad8
webcommands: remove unncessary access to repo.changelog
Patrick Mezard <pmezard@gmail.com>
parents:
11332
diff
changeset
|
772 count = len(web.repo) |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
773 start = max(0, count - web.maxchanges) |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
774 end = min(count, start + web.maxchanges) |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
775 |
34245
a6c18628dff1
configitems: register the 'web.description' config
Boris Feld <boris.feld@octobus.net>
parents:
34100
diff
changeset
|
776 desc = web.config("web", "description") |
a6c18628dff1
configitems: register the 'web.description' config
Boris Feld <boris.feld@octobus.net>
parents:
34100
diff
changeset
|
777 if not desc: |
a6c18628dff1
configitems: register the 'web.description' config
Boris Feld <boris.feld@octobus.net>
parents:
34100
diff
changeset
|
778 desc = 'unknown' |
36877
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
779 |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
780 web.res.setbodygen(tmpl( |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
781 'summary', |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
782 desc=desc, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
783 owner=get_contact(web.config) or 'unknown', |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
784 lastchange=tip.date(), |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
785 tags=tagentries, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
786 bookmarks=bookmarks, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
787 branches=webutil.branchentries(web.repo, web.stripecount, 10), |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
788 shortlog=changelist, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
789 node=tip.hex(), |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
790 symrev='tip', |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
791 archives=web.archivelist('tip'), |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
792 labels=web.configlist('web', 'labels'))) |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
793 |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
794 return web.res |
5591
08887121a652
split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
795 |
24076
b53d2afd11fb
webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23992
diff
changeset
|
796 @webcommand('filediff') |
5600
9d900f7282e6
hgweb: explicitly pass around the templater
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
5598
diff
changeset
|
797 def filediff(web, req, tmpl): |
24092
55dfea651b7f
webcommands: document "filediff" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24091
diff
changeset
|
798 """ |
55dfea651b7f
webcommands: document "filediff" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24091
diff
changeset
|
799 /diff/{revision}/{path} |
55dfea651b7f
webcommands: document "filediff" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24091
diff
changeset
|
800 ----------------------- |
55dfea651b7f
webcommands: document "filediff" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24091
diff
changeset
|
801 |
55dfea651b7f
webcommands: document "filediff" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24091
diff
changeset
|
802 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
|
803 |
55dfea651b7f
webcommands: document "filediff" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24091
diff
changeset
|
804 The ``filediff`` template is rendered. |
55dfea651b7f
webcommands: document "filediff" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24091
diff
changeset
|
805 |
26781
1aee2ab0f902
spelling: trivial spell checking
Mads Kiilerich <madski@unity3d.com>
parents:
26136
diff
changeset
|
806 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
|
807 paths. ``/diff`` is used in modern code. |
55dfea651b7f
webcommands: document "filediff" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24091
diff
changeset
|
808 """ |
7183
099b4f9be5ab
hgweb: working diff for removed files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7182
diff
changeset
|
809 fctx, ctx = None, None |
099b4f9be5ab
hgweb: working diff for removed files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7182
diff
changeset
|
810 try: |
099b4f9be5ab
hgweb: working diff for removed files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7182
diff
changeset
|
811 fctx = webutil.filectx(web.repo, req) |
7280
810ca383da9c
remove unused variables
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
7183
diff
changeset
|
812 except LookupError: |
7183
099b4f9be5ab
hgweb: working diff for removed files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7182
diff
changeset
|
813 ctx = webutil.changectx(web.repo, req) |
36871
3d60a22e27f5
hgweb: perform all parameter lookup via qsparams
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36869
diff
changeset
|
814 path = webutil.cleanpath(web.repo, req.req.qsparams['file']) |
7183
099b4f9be5ab
hgweb: working diff for removed files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7182
diff
changeset
|
815 if path not in ctx.files(): |
099b4f9be5ab
hgweb: working diff for removed files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7182
diff
changeset
|
816 raise |
099b4f9be5ab
hgweb: working diff for removed files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7182
diff
changeset
|
817 |
099b4f9be5ab
hgweb: working diff for removed files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7182
diff
changeset
|
818 if fctx is not None: |
099b4f9be5ab
hgweb: working diff for removed files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7182
diff
changeset
|
819 path = fctx.path() |
16722
7bf48bc7de23
hgweb: fix filediff base calculation
Matt Mackall <mpm@selenic.com>
parents:
16469
diff
changeset
|
820 ctx = fctx.changectx() |
31099
abb92b3d370e
hgweb: explictly pass basectx in webutil.diffs
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31044
diff
changeset
|
821 basectx = ctx.p1() |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
822 |
34253
db63872e10cc
configitems: register the 'web.style' config
Boris Feld <boris.feld@octobus.net>
parents:
34245
diff
changeset
|
823 style = web.config('web', 'style') |
36869
1a1972b1a1ff
hgweb: use our new request object for "style" parameter
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36737
diff
changeset
|
824 if 'style' in req.req.qsparams: |
1a1972b1a1ff
hgweb: use our new request object for "style" parameter
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36737
diff
changeset
|
825 style = req.req.qsparams['style'] |
9402
5d49fdef6fd0
hgweb: show diff header line in raw diffs
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8842
diff
changeset
|
826 |
31665
c2dbd818e884
hgweb: handle "parity" internally in webutil.diffs()
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31099
diff
changeset
|
827 diffs = webutil.diffs(web, tmpl, ctx, basectx, [path], style) |
27160
c533435cbc37
webcommands: test that fctx is not None in filediff()
Anton Shestakov <av6@dwimlabs.net>
parents:
27159
diff
changeset
|
828 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
|
829 rename = webutil.renamelink(fctx) |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24177
diff
changeset
|
830 ctx = fctx |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24177
diff
changeset
|
831 else: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24177
diff
changeset
|
832 rename = [] |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24177
diff
changeset
|
833 ctx = ctx |
36877
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
834 |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
835 web.res.setbodygen(tmpl( |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
836 'filediff', |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
837 file=path, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
838 symrev=webutil.symrevorshortnode(req, ctx), |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
839 rename=rename, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
840 diff=diffs, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
841 **pycompat.strkwargs(webutil.commonentry(web.repo, ctx)))) |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
842 |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
843 return web.res |
5591
08887121a652
split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
844 |
24076
b53d2afd11fb
webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23992
diff
changeset
|
845 diff = webcommand('diff')(filediff) |
5591
08887121a652
split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
846 |
24076
b53d2afd11fb
webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23992
diff
changeset
|
847 @webcommand('comparison') |
17202
1ae119269ddc
hgweb: side-by-side comparison functionality
wujek srujek
parents:
17146
diff
changeset
|
848 def comparison(web, req, tmpl): |
24093
c8639f90a715
webcommands: document "comparison" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24092
diff
changeset
|
849 """ |
c8639f90a715
webcommands: document "comparison" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24092
diff
changeset
|
850 /comparison/{revision}/{path} |
c8639f90a715
webcommands: document "comparison" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24092
diff
changeset
|
851 ----------------------------- |
c8639f90a715
webcommands: document "comparison" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24092
diff
changeset
|
852 |
c8639f90a715
webcommands: document "comparison" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24092
diff
changeset
|
853 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
|
854 made on a particular revision. |
c8639f90a715
webcommands: document "comparison" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24092
diff
changeset
|
855 |
c8639f90a715
webcommands: document "comparison" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24092
diff
changeset
|
856 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
|
857 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
|
858 |
c8639f90a715
webcommands: document "comparison" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24092
diff
changeset
|
859 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
|
860 context in the diff. |
c8639f90a715
webcommands: document "comparison" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24092
diff
changeset
|
861 |
c8639f90a715
webcommands: document "comparison" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24092
diff
changeset
|
862 The ``filecomparison`` template is rendered. |
c8639f90a715
webcommands: document "comparison" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24092
diff
changeset
|
863 """ |
17202
1ae119269ddc
hgweb: side-by-side comparison functionality
wujek srujek
parents:
17146
diff
changeset
|
864 ctx = webutil.changectx(web.repo, req) |
36871
3d60a22e27f5
hgweb: perform all parameter lookup via qsparams
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36869
diff
changeset
|
865 if 'file' not in req.req.qsparams: |
17289
f2d6b4f8e78c
hgweb: avoid traceback when file or node parameters are missing
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
17261
diff
changeset
|
866 raise ErrorResponse(HTTP_NOT_FOUND, 'file not given') |
36871
3d60a22e27f5
hgweb: perform all parameter lookup via qsparams
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36869
diff
changeset
|
867 path = webutil.cleanpath(web.repo, req.req.qsparams['file']) |
17202
1ae119269ddc
hgweb: side-by-side comparison functionality
wujek srujek
parents:
17146
diff
changeset
|
868 |
1ae119269ddc
hgweb: side-by-side comparison functionality
wujek srujek
parents:
17146
diff
changeset
|
869 parsecontext = lambda v: v == 'full' and -1 or int(v) |
36871
3d60a22e27f5
hgweb: perform all parameter lookup via qsparams
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36869
diff
changeset
|
870 if 'context' in req.req.qsparams: |
3d60a22e27f5
hgweb: perform all parameter lookup via qsparams
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36869
diff
changeset
|
871 context = parsecontext(req.req.qsparams['context']) |
17202
1ae119269ddc
hgweb: side-by-side comparison functionality
wujek srujek
parents:
17146
diff
changeset
|
872 else: |
1ae119269ddc
hgweb: side-by-side comparison functionality
wujek srujek
parents:
17146
diff
changeset
|
873 context = parsecontext(web.config('web', 'comparisoncontext', '5')) |
1ae119269ddc
hgweb: side-by-side comparison functionality
wujek srujek
parents:
17146
diff
changeset
|
874 |
17302
5c64ce6168da
hgweb: fixes traceback for invalid files by removing top-level template
wujek srujek <wujek.srujek@googlemail.com>
parents:
17289
diff
changeset
|
875 def filelines(f): |
32189 | 876 if f.isbinary(): |
17302
5c64ce6168da
hgweb: fixes traceback for invalid files by removing top-level template
wujek srujek <wujek.srujek@googlemail.com>
parents:
17289
diff
changeset
|
877 mt = mimetypes.guess_type(f.path())[0] |
5c64ce6168da
hgweb: fixes traceback for invalid files by removing top-level template
wujek srujek <wujek.srujek@googlemail.com>
parents:
17289
diff
changeset
|
878 if not mt: |
5c64ce6168da
hgweb: fixes traceback for invalid files by removing top-level template
wujek srujek <wujek.srujek@googlemail.com>
parents:
17289
diff
changeset
|
879 mt = 'application/octet-stream' |
5c64ce6168da
hgweb: fixes traceback for invalid files by removing top-level template
wujek srujek <wujek.srujek@googlemail.com>
parents:
17289
diff
changeset
|
880 return [_('(binary file %s, hash: %s)') % (mt, hex(f.filenode()))] |
5c64ce6168da
hgweb: fixes traceback for invalid files by removing top-level template
wujek srujek <wujek.srujek@googlemail.com>
parents:
17289
diff
changeset
|
881 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
|
882 |
27158
522ffc189671
webcommands: get correct parents when comparing a removed file (issue4962)
Anton Shestakov <av6@dwimlabs.net>
parents:
27081
diff
changeset
|
883 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
|
884 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
|
885 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
|
886 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
|
887 rightrev = ctx.rev() |
92fab48dfec1
hgweb: show revisions and hashes gotten from changelog in "comparison" page
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21121
diff
changeset
|
888 rightnode = ctx.node() |
17302
5c64ce6168da
hgweb: fixes traceback for invalid files by removing top-level template
wujek srujek <wujek.srujek@googlemail.com>
parents:
17289
diff
changeset
|
889 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
|
890 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
|
891 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
|
892 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
|
893 leftlines = () |
5c64ce6168da
hgweb: fixes traceback for invalid files by removing top-level template
wujek srujek <wujek.srujek@googlemail.com>
parents:
17289
diff
changeset
|
894 else: |
21121
8c9e84b44221
hgweb: make "comparison" get parent from not filelog but changelog
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20761
diff
changeset
|
895 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
|
896 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
|
897 else: |
5c64ce6168da
hgweb: fixes traceback for invalid files by removing top-level template
wujek srujek <wujek.srujek@googlemail.com>
parents:
17289
diff
changeset
|
898 rightlines = () |
27158
522ffc189671
webcommands: get correct parents when comparing a removed file (issue4962)
Anton Shestakov <av6@dwimlabs.net>
parents:
27081
diff
changeset
|
899 pfctx = ctx.parents()[0][path] |
522ffc189671
webcommands: get correct parents when comparing a removed file (issue4962)
Anton Shestakov <av6@dwimlabs.net>
parents:
27081
diff
changeset
|
900 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
|
901 |
5c64ce6168da
hgweb: fixes traceback for invalid files by removing top-level template
wujek srujek <wujek.srujek@googlemail.com>
parents:
17289
diff
changeset
|
902 comparison = webutil.compare(tmpl, context, leftlines, rightlines) |
27158
522ffc189671
webcommands: get correct parents when comparing a removed file (issue4962)
Anton Shestakov <av6@dwimlabs.net>
parents:
27081
diff
changeset
|
903 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
|
904 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
|
905 ctx = fctx |
522ffc189671
webcommands: get correct parents when comparing a removed file (issue4962)
Anton Shestakov <av6@dwimlabs.net>
parents:
27081
diff
changeset
|
906 else: |
27159
7e10b860c174
webcommands: stop using ersatz if-else ternary operator for rename variable
Anton Shestakov <av6@dwimlabs.net>
parents:
27158
diff
changeset
|
907 rename = [] |
27158
522ffc189671
webcommands: get correct parents when comparing a removed file (issue4962)
Anton Shestakov <av6@dwimlabs.net>
parents:
27081
diff
changeset
|
908 ctx = ctx |
36877
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
909 |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
910 web.res.setbodygen(tmpl( |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
911 'filecomparison', |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
912 file=path, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
913 symrev=webutil.symrevorshortnode(req, ctx), |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
914 rename=rename, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
915 leftrev=leftrev, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
916 leftnode=hex(leftnode), |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
917 rightrev=rightrev, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
918 rightnode=hex(rightnode), |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
919 comparison=comparison, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
920 **pycompat.strkwargs(webutil.commonentry(web.repo, ctx)))) |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
921 |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
922 return web.res |
17202
1ae119269ddc
hgweb: side-by-side comparison functionality
wujek srujek
parents:
17146
diff
changeset
|
923 |
24076
b53d2afd11fb
webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23992
diff
changeset
|
924 @webcommand('annotate') |
5600
9d900f7282e6
hgweb: explicitly pass around the templater
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
5598
diff
changeset
|
925 def annotate(web, req, tmpl): |
24094
9c810d46a093
webcommands: document "annotate" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24093
diff
changeset
|
926 """ |
9c810d46a093
webcommands: document "annotate" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24093
diff
changeset
|
927 /annotate/{revision}/{path} |
9c810d46a093
webcommands: document "annotate" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24093
diff
changeset
|
928 --------------------------- |
9c810d46a093
webcommands: document "annotate" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24093
diff
changeset
|
929 |
9c810d46a093
webcommands: document "annotate" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24093
diff
changeset
|
930 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
|
931 |
34391
f6492f482c60
hgweb: query string arguments to control whitespace for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34253
diff
changeset
|
932 The ``ignorews``, ``ignorewsamount``, ``ignorewseol``, and |
f6492f482c60
hgweb: query string arguments to control whitespace for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34253
diff
changeset
|
933 ``ignoreblanklines`` query string arguments have the same meaning as |
34404
407ebe7a9b93
hgweb: use parsebool for parsing diff query string options
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34392
diff
changeset
|
934 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:
34392
diff
changeset
|
935 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:
34392
diff
changeset
|
936 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:
34392
diff
changeset
|
937 default settings are used. |
34391
f6492f482c60
hgweb: query string arguments to control whitespace for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34253
diff
changeset
|
938 |
24094
9c810d46a093
webcommands: document "annotate" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24093
diff
changeset
|
939 The ``fileannotate`` template is rendered. |
9c810d46a093
webcommands: document "annotate" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24093
diff
changeset
|
940 """ |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
941 fctx = webutil.filectx(web.repo, req) |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
942 f = fctx.path() |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
943 parity = paritygen(web.stripecount) |
33012
1c97df5e3b46
hgweb: plug followlines action in annotate view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
32922
diff
changeset
|
944 ishead = fctx.filerev() in fctx.filelog().headrevs() |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
945 |
30252
4ed8bb8a153f
hgweb: cache fctx.parents() in annotate command (issue5414)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30081
diff
changeset
|
946 # 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
|
947 # 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
|
948 # 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
|
949 # 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
|
950 parentscache = {} |
29522
9c37df347485
hgweb: add link to parents of annotated revision in annotate view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
29471
diff
changeset
|
951 def parents(f): |
30252
4ed8bb8a153f
hgweb: cache fctx.parents() in annotate command (issue5414)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30081
diff
changeset
|
952 rev = f.rev() |
4ed8bb8a153f
hgweb: cache fctx.parents() in annotate command (issue5414)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30081
diff
changeset
|
953 if rev not in parentscache: |
4ed8bb8a153f
hgweb: cache fctx.parents() in annotate command (issue5414)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30081
diff
changeset
|
954 parentscache[rev] = [] |
4ed8bb8a153f
hgweb: cache fctx.parents() in annotate command (issue5414)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30081
diff
changeset
|
955 for p in f.parents(): |
4ed8bb8a153f
hgweb: cache fctx.parents() in annotate command (issue5414)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30081
diff
changeset
|
956 entry = { |
4ed8bb8a153f
hgweb: cache fctx.parents() in annotate command (issue5414)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30081
diff
changeset
|
957 'node': p.hex(), |
4ed8bb8a153f
hgweb: cache fctx.parents() in annotate command (issue5414)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30081
diff
changeset
|
958 'rev': p.rev(), |
4ed8bb8a153f
hgweb: cache fctx.parents() in annotate command (issue5414)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30081
diff
changeset
|
959 } |
4ed8bb8a153f
hgweb: cache fctx.parents() in annotate command (issue5414)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30081
diff
changeset
|
960 parentscache[rev].append(entry) |
4ed8bb8a153f
hgweb: cache fctx.parents() in annotate command (issue5414)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30081
diff
changeset
|
961 |
4ed8bb8a153f
hgweb: cache fctx.parents() in annotate command (issue5414)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30081
diff
changeset
|
962 for p in parentscache[rev]: |
4ed8bb8a153f
hgweb: cache fctx.parents() in annotate command (issue5414)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30081
diff
changeset
|
963 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
|
964 |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
965 def annotate(**map): |
32189 | 966 if fctx.isbinary(): |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
967 mt = (mimetypes.guess_type(fctx.path())[0] |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
968 or 'application/octet-stream') |
29538
df7d8ea90695
hgweb: enumerate lines in loop header, not before
Anton Shestakov <av6@dwimlabs.net>
parents:
29522
diff
changeset
|
969 lines = [((fctx.filectx(fctx.filerev()), 1), '(binary:%s)' % mt)] |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
970 else: |
34391
f6492f482c60
hgweb: query string arguments to control whitespace for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34253
diff
changeset
|
971 lines = webutil.annotate(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
|
972 |
29388
f694e20193f2
hgweb: display blamed revision once per block in annotate view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
29382
diff
changeset
|
973 previousrev = None |
29572
d86b54d9bb0c
paper: make different blocks of annotated lines have different colors
Anton Shestakov <av6@dwimlabs.net>
parents:
29538
diff
changeset
|
974 blockparitygen = paritygen(1) |
34433
2e32c6a31cc7
annotate: introduce attr for storing per-line annotate data
Siddharth Agarwal <sid0@fb.com>
parents:
34404
diff
changeset
|
975 for lineno, (aline, l) in enumerate(lines): |
2e32c6a31cc7
annotate: introduce attr for storing per-line annotate data
Siddharth Agarwal <sid0@fb.com>
parents:
34404
diff
changeset
|
976 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
|
977 rev = f.rev() |
29572
d86b54d9bb0c
paper: make different blocks of annotated lines have different colors
Anton Shestakov <av6@dwimlabs.net>
parents:
29538
diff
changeset
|
978 if rev != previousrev: |
d86b54d9bb0c
paper: make different blocks of annotated lines have different colors
Anton Shestakov <av6@dwimlabs.net>
parents:
29538
diff
changeset
|
979 blockhead = True |
d86b54d9bb0c
paper: make different blocks of annotated lines have different colors
Anton Shestakov <av6@dwimlabs.net>
parents:
29538
diff
changeset
|
980 blockparity = next(blockparitygen) |
d86b54d9bb0c
paper: make different blocks of annotated lines have different colors
Anton Shestakov <av6@dwimlabs.net>
parents:
29538
diff
changeset
|
981 else: |
d86b54d9bb0c
paper: make different blocks of annotated lines have different colors
Anton Shestakov <av6@dwimlabs.net>
parents:
29538
diff
changeset
|
982 blockhead = None |
29388
f694e20193f2
hgweb: display blamed revision once per block in annotate view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
29382
diff
changeset
|
983 previousrev = rev |
29216
ead25aa27a43
py3: convert to next() function
timeless <timeless@mozdev.org>
parents:
28712
diff
changeset
|
984 yield {"parity": next(parity), |
14055
421d56a055fd
drop {short,hex}(ctx.node()) calls in favor of ctx methods
Alexander Solovyov <alexander@solovyov.net>
parents:
14043
diff
changeset
|
985 "node": f.hex(), |
29388
f694e20193f2
hgweb: display blamed revision once per block in annotate view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
29382
diff
changeset
|
986 "rev": rev, |
6564
ccc2481e3954
webcommands: pass full author to annotate, fix templates (issue 1054)
Patrick Mezard <pmezard@gmail.com>
parents:
6437
diff
changeset
|
987 "author": f.user(), |
29522
9c37df347485
hgweb: add link to parents of annotated revision in annotate view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
29471
diff
changeset
|
988 "parents": parents(f), |
6657
a51093361e1c
hgweb: show cset node and description when hovering over annotate prefix
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6564
diff
changeset
|
989 "desc": f.description(), |
18581
3490c91a1fcb
templates: export extra as a dict to templates
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
18563
diff
changeset
|
990 "extra": f.extra(), |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
991 "file": f.path(), |
29388
f694e20193f2
hgweb: display blamed revision once per block in annotate view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
29382
diff
changeset
|
992 "blockhead": blockhead, |
29572
d86b54d9bb0c
paper: make different blocks of annotated lines have different colors
Anton Shestakov <av6@dwimlabs.net>
parents:
29538
diff
changeset
|
993 "blockparity": blockparity, |
34433
2e32c6a31cc7
annotate: introduce attr for storing per-line annotate data
Siddharth Agarwal <sid0@fb.com>
parents:
34404
diff
changeset
|
994 "targetline": aline.lineno, |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
995 "line": l, |
24712
bbf1ae6b6a44
hgweb: expose raw line numbers to templates
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24306
diff
changeset
|
996 "lineno": lineno + 1, |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
997 "lineid": "l%d" % (lineno + 1), |
13199
a38df1250945
hgweb: added revision date to annotate line data
Oli Thissen <oli@tonick.net>
parents:
12696
diff
changeset
|
998 "linenumber": "% 6d" % (lineno + 1), |
a38df1250945
hgweb: added revision date to annotate line data
Oli Thissen <oli@tonick.net>
parents:
12696
diff
changeset
|
999 "revdate": f.date()} |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
1000 |
34392
6797f1fbc642
hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34391
diff
changeset
|
1001 diffopts = webutil.difffeatureopts(req, web.repo.ui, 'annotate') |
6797f1fbc642
hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34391
diff
changeset
|
1002 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:
34391
diff
changeset
|
1003 |
36877
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1004 web.res.setbodygen(tmpl( |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1005 'fileannotate', |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1006 file=f, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1007 annotate=annotate, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1008 path=webutil.up(f), |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1009 symrev=webutil.symrevorshortnode(req, fctx), |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1010 rename=webutil.renamelink(fctx), |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1011 permissions=fctx.manifest().flags(f), |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1012 ishead=int(ishead), |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1013 diffopts=diffopts, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1014 **pycompat.strkwargs(webutil.commonentry(web.repo, fctx)))) |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1015 |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1016 return web.res |
5591
08887121a652
split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
1017 |
24076
b53d2afd11fb
webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23992
diff
changeset
|
1018 @webcommand('filelog') |
5600
9d900f7282e6
hgweb: explicitly pass around the templater
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
5598
diff
changeset
|
1019 def filelog(web, req, tmpl): |
24095
1f48b157dccf
webcommands: document "filelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24094
diff
changeset
|
1020 """ |
1f48b157dccf
webcommands: document "filelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24094
diff
changeset
|
1021 /filelog/{revision}/{path} |
1f48b157dccf
webcommands: document "filelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24094
diff
changeset
|
1022 -------------------------- |
1f48b157dccf
webcommands: document "filelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24094
diff
changeset
|
1023 |
1f48b157dccf
webcommands: document "filelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24094
diff
changeset
|
1024 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
|
1025 |
1f48b157dccf
webcommands: document "filelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24094
diff
changeset
|
1026 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
|
1027 maximum number of entries to show. |
1f48b157dccf
webcommands: document "filelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24094
diff
changeset
|
1028 |
1f48b157dccf
webcommands: document "filelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24094
diff
changeset
|
1029 The ``filelog`` template will be rendered. |
1f48b157dccf
webcommands: document "filelog" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24094
diff
changeset
|
1030 """ |
7300
591767e6ea7a
hgweb: conditionally show file logs for deleted files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7288
diff
changeset
|
1031 |
591767e6ea7a
hgweb: conditionally show file logs for deleted files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7288
diff
changeset
|
1032 try: |
591767e6ea7a
hgweb: conditionally show file logs for deleted files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7288
diff
changeset
|
1033 fctx = webutil.filectx(web.repo, req) |
591767e6ea7a
hgweb: conditionally show file logs for deleted files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7288
diff
changeset
|
1034 f = fctx.path() |
591767e6ea7a
hgweb: conditionally show file logs for deleted files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7288
diff
changeset
|
1035 fl = fctx.filelog() |
7633 | 1036 except error.LookupError: |
36871
3d60a22e27f5
hgweb: perform all parameter lookup via qsparams
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36869
diff
changeset
|
1037 f = webutil.cleanpath(web.repo, req.req.qsparams['file']) |
7300
591767e6ea7a
hgweb: conditionally show file logs for deleted files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7288
diff
changeset
|
1038 fl = web.repo.file(f) |
591767e6ea7a
hgweb: conditionally show file logs for deleted files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7288
diff
changeset
|
1039 numrevs = len(fl) |
591767e6ea7a
hgweb: conditionally show file logs for deleted files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7288
diff
changeset
|
1040 if not numrevs: # file doesn't exist at all |
591767e6ea7a
hgweb: conditionally show file logs for deleted files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7288
diff
changeset
|
1041 raise |
591767e6ea7a
hgweb: conditionally show file logs for deleted files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7288
diff
changeset
|
1042 rev = webutil.changectx(web.repo, req).rev() |
7361
9fe97eea5510
linkrev: take a revision number rather than a hash
Matt Mackall <mpm@selenic.com>
parents:
7345
diff
changeset
|
1043 first = fl.linkrev(0) |
7300
591767e6ea7a
hgweb: conditionally show file logs for deleted files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7288
diff
changeset
|
1044 if rev < first: # current rev is from before file existed |
591767e6ea7a
hgweb: conditionally show file logs for deleted files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7288
diff
changeset
|
1045 raise |
591767e6ea7a
hgweb: conditionally show file logs for deleted files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7288
diff
changeset
|
1046 frev = numrevs - 1 |
7361
9fe97eea5510
linkrev: take a revision number rather than a hash
Matt Mackall <mpm@selenic.com>
parents:
7345
diff
changeset
|
1047 while fl.linkrev(frev) > rev: |
7300
591767e6ea7a
hgweb: conditionally show file logs for deleted files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7288
diff
changeset
|
1048 frev -= 1 |
7361
9fe97eea5510
linkrev: take a revision number rather than a hash
Matt Mackall <mpm@selenic.com>
parents:
7345
diff
changeset
|
1049 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
|
1050 |
10246
b9d02695bde4
hgweb: add less/more links to shortlog/filelog nav
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
10245
diff
changeset
|
1051 revcount = web.maxshortchanges |
36871
3d60a22e27f5
hgweb: perform all parameter lookup via qsparams
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36869
diff
changeset
|
1052 if 'revcount' in req.req.qsparams: |
20092
77acd8ce01ce
hgweb: ignore non numeric "revcount" parameter values (issue4091)
Isaac Jurado <diptongo@gmail.com>
parents:
20004
diff
changeset
|
1053 try: |
36871
3d60a22e27f5
hgweb: perform all parameter lookup via qsparams
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36869
diff
changeset
|
1054 revcount = int(req.req.qsparams.get('revcount', revcount)) |
20092
77acd8ce01ce
hgweb: ignore non numeric "revcount" parameter values (issue4091)
Isaac Jurado <diptongo@gmail.com>
parents:
20004
diff
changeset
|
1055 revcount = max(revcount, 1) |
77acd8ce01ce
hgweb: ignore non numeric "revcount" parameter values (issue4091)
Isaac Jurado <diptongo@gmail.com>
parents:
20004
diff
changeset
|
1056 tmpl.defaults['sessionvars']['revcount'] = revcount |
77acd8ce01ce
hgweb: ignore non numeric "revcount" parameter values (issue4091)
Isaac Jurado <diptongo@gmail.com>
parents:
20004
diff
changeset
|
1057 except ValueError: |
77acd8ce01ce
hgweb: ignore non numeric "revcount" parameter values (issue4091)
Isaac Jurado <diptongo@gmail.com>
parents:
20004
diff
changeset
|
1058 pass |
10246
b9d02695bde4
hgweb: add less/more links to shortlog/filelog nav
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
10245
diff
changeset
|
1059 |
31670
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31666
diff
changeset
|
1060 lrange = webutil.linerange(req) |
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31666
diff
changeset
|
1061 |
10246
b9d02695bde4
hgweb: add less/more links to shortlog/filelog nav
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
10245
diff
changeset
|
1062 lessvars = copy.copy(tmpl.defaults['sessionvars']) |
36582
24897a9d18ac
webcommands: use explicit integer division for Python 3 compat
Augie Fackler <augie@google.com>
parents:
36464
diff
changeset
|
1063 lessvars['revcount'] = max(revcount // 2, 1) |
10246
b9d02695bde4
hgweb: add less/more links to shortlog/filelog nav
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
10245
diff
changeset
|
1064 morevars = copy.copy(tmpl.defaults['sessionvars']) |
b9d02695bde4
hgweb: add less/more links to shortlog/filelog nav
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
10245
diff
changeset
|
1065 morevars['revcount'] = revcount * 2 |
b9d02695bde4
hgweb: add less/more links to shortlog/filelog nav
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
10245
diff
changeset
|
1066 |
36871
3d60a22e27f5
hgweb: perform all parameter lookup via qsparams
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36869
diff
changeset
|
1067 patch = 'patch' in req.req.qsparams |
31666
f36dc643ffdc
hgweb: add a "patch" query parameter to filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31665
diff
changeset
|
1068 if patch: |
36871
3d60a22e27f5
hgweb: perform all parameter lookup via qsparams
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36869
diff
changeset
|
1069 lessvars['patch'] = morevars['patch'] = req.req.qsparams['patch'] |
3d60a22e27f5
hgweb: perform all parameter lookup via qsparams
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36869
diff
changeset
|
1070 descend = 'descend' in req.req.qsparams |
31939
604d31507f86
hgweb: handle a "descend" query parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31732
diff
changeset
|
1071 if descend: |
36871
3d60a22e27f5
hgweb: perform all parameter lookup via qsparams
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36869
diff
changeset
|
1072 lessvars['descend'] = morevars['descend'] = req.req.qsparams['descend'] |
31666
f36dc643ffdc
hgweb: add a "patch" query parameter to filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31665
diff
changeset
|
1073 |
7300
591767e6ea7a
hgweb: conditionally show file logs for deleted files
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7288
diff
changeset
|
1074 count = fctx.filerev() + 1 |
30826
923336cf8b8a
hgweb: simplify calculation of first revision in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
30825
diff
changeset
|
1075 start = max(0, count - revcount) # first rev on this page |
10246
b9d02695bde4
hgweb: add less/more links to shortlog/filelog nav
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
10245
diff
changeset
|
1076 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
|
1077 parity = paritygen(web.stripecount, offset=start - end) |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
1078 |
30816
96f811bceb85
hgweb: build the "entries" list directly in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
30734
diff
changeset
|
1079 repo = web.repo |
96f811bceb85
hgweb: build the "entries" list directly in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
30734
diff
changeset
|
1080 revs = fctx.filelog().revs(start, end - 1) |
96f811bceb85
hgweb: build the "entries" list directly in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
30734
diff
changeset
|
1081 entries = [] |
31666
f36dc643ffdc
hgweb: add a "patch" query parameter to filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31665
diff
changeset
|
1082 |
34253
db63872e10cc
configitems: register the 'web.style' config
Boris Feld <boris.feld@octobus.net>
parents:
34245
diff
changeset
|
1083 diffstyle = web.config('web', 'style') |
36869
1a1972b1a1ff
hgweb: use our new request object for "style" parameter
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36737
diff
changeset
|
1084 if 'style' in req.req.qsparams: |
1a1972b1a1ff
hgweb: use our new request object for "style" parameter
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36737
diff
changeset
|
1085 diffstyle = req.req.qsparams['style'] |
31666
f36dc643ffdc
hgweb: add a "patch" query parameter to filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31665
diff
changeset
|
1086 |
31672
e540846c67e0
hgweb: filter diff hunks when 'linerange' and 'patch' are specified in filelog
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31670
diff
changeset
|
1087 def diff(fctx, linerange=None): |
31666
f36dc643ffdc
hgweb: add a "patch" query parameter to filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31665
diff
changeset
|
1088 ctx = fctx.changectx() |
f36dc643ffdc
hgweb: add a "patch" query parameter to filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31665
diff
changeset
|
1089 basectx = ctx.p1() |
f36dc643ffdc
hgweb: add a "patch" query parameter to filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31665
diff
changeset
|
1090 path = fctx.path() |
31672
e540846c67e0
hgweb: filter diff hunks when 'linerange' and 'patch' are specified in filelog
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31670
diff
changeset
|
1091 return webutil.diffs(web, tmpl, ctx, basectx, [path], diffstyle, |
31732
6be6e4becaaf
hgweb: prefix line id by ctx shortnode in filelog when patches are shown
Denis Laxalde <denis@laxalde.org>
parents:
31672
diff
changeset
|
1092 linerange=linerange, |
6be6e4becaaf
hgweb: prefix line id by ctx shortnode in filelog when patches are shown
Denis Laxalde <denis@laxalde.org>
parents:
31672
diff
changeset
|
1093 lineidprefix='%s-' % ctx.hex()[:12]) |
31666
f36dc643ffdc
hgweb: add a "patch" query parameter to filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31665
diff
changeset
|
1094 |
31670
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31666
diff
changeset
|
1095 linerange = None |
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31666
diff
changeset
|
1096 if lrange is not None: |
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31666
diff
changeset
|
1097 linerange = webutil.formatlinerange(*lrange) |
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31666
diff
changeset
|
1098 # 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:
31666
diff
changeset
|
1099 # would required a dedicated "revnav" class |
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31666
diff
changeset
|
1100 nav = None |
31939
604d31507f86
hgweb: handle a "descend" query parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31732
diff
changeset
|
1101 if descend: |
32922
582080a4a812
dagop: move blockancestors() and blockdescendants() from context
Yuya Nishihara <yuya@tcha.org>
parents:
32599
diff
changeset
|
1102 it = dagop.blockdescendants(fctx, *lrange) |
31939
604d31507f86
hgweb: handle a "descend" query parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31732
diff
changeset
|
1103 else: |
32922
582080a4a812
dagop: move blockancestors() and blockdescendants() from context
Yuya Nishihara <yuya@tcha.org>
parents:
32599
diff
changeset
|
1104 it = dagop.blockancestors(fctx, *lrange) |
31939
604d31507f86
hgweb: handle a "descend" query parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31732
diff
changeset
|
1105 for i, (c, lr) in enumerate(it, 1): |
31670
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31666
diff
changeset
|
1106 diffs = None |
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31666
diff
changeset
|
1107 if patch: |
31672
e540846c67e0
hgweb: filter diff hunks when 'linerange' and 'patch' are specified in filelog
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31670
diff
changeset
|
1108 diffs = diff(c, linerange=lr) |
31670
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31666
diff
changeset
|
1109 # 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:
31666
diff
changeset
|
1110 path = c.path() |
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31666
diff
changeset
|
1111 entries.append(dict( |
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31666
diff
changeset
|
1112 parity=next(parity), |
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31666
diff
changeset
|
1113 filerev=c.rev(), |
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31666
diff
changeset
|
1114 file=path, |
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31666
diff
changeset
|
1115 diff=diffs, |
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31666
diff
changeset
|
1116 linerange=webutil.formatlinerange(*lr), |
36464
1fb9e01328e4
py3: use pycompat.strkwargs to convert kwargs keys to str
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36415
diff
changeset
|
1117 **pycompat.strkwargs(webutil.commonentry(repo, c)))) |
31670
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31666
diff
changeset
|
1118 if i == revcount: |
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31666
diff
changeset
|
1119 break |
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31666
diff
changeset
|
1120 lessvars['linerange'] = webutil.formatlinerange(*lrange) |
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31666
diff
changeset
|
1121 morevars['linerange'] = lessvars['linerange'] |
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31666
diff
changeset
|
1122 else: |
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31666
diff
changeset
|
1123 for i in revs: |
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31666
diff
changeset
|
1124 iterfctx = fctx.filectx(i) |
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31666
diff
changeset
|
1125 diffs = None |
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31666
diff
changeset
|
1126 if patch: |
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31666
diff
changeset
|
1127 diffs = diff(iterfctx) |
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31666
diff
changeset
|
1128 entries.append(dict( |
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31666
diff
changeset
|
1129 parity=next(parity), |
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31666
diff
changeset
|
1130 filerev=i, |
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31666
diff
changeset
|
1131 file=f, |
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31666
diff
changeset
|
1132 diff=diffs, |
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31666
diff
changeset
|
1133 rename=webutil.renamelink(iterfctx), |
36464
1fb9e01328e4
py3: use pycompat.strkwargs to convert kwargs keys to str
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36415
diff
changeset
|
1134 **pycompat.strkwargs(webutil.commonentry(repo, iterfctx)))) |
31670
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31666
diff
changeset
|
1135 entries.reverse() |
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31666
diff
changeset
|
1136 revnav = webutil.filerevnav(web.repo, fctx.path()) |
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31666
diff
changeset
|
1137 nav = revnav.gen(end - 1, revcount, count) |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
1138 |
20022
d85dfe211c71
hgweb: always compute all entries and latestentry in filelog
Alexander Plavin <alexander@plav.in>
parents:
20021
diff
changeset
|
1139 latestentry = entries[:1] |
d85dfe211c71
hgweb: always compute all entries and latestentry in filelog
Alexander Plavin <alexander@plav.in>
parents:
20021
diff
changeset
|
1140 |
36876
1f42d621f090
hgweb: support using new response object for web commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36871
diff
changeset
|
1141 web.res.setbodygen(tmpl( |
1f42d621f090
hgweb: support using new response object for web commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36871
diff
changeset
|
1142 'filelog', |
1f42d621f090
hgweb: support using new response object for web commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36871
diff
changeset
|
1143 file=f, |
1f42d621f090
hgweb: support using new response object for web commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36871
diff
changeset
|
1144 nav=nav, |
1f42d621f090
hgweb: support using new response object for web commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36871
diff
changeset
|
1145 symrev=webutil.symrevorshortnode(req, fctx), |
1f42d621f090
hgweb: support using new response object for web commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36871
diff
changeset
|
1146 entries=entries, |
1f42d621f090
hgweb: support using new response object for web commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36871
diff
changeset
|
1147 descend=descend, |
1f42d621f090
hgweb: support using new response object for web commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36871
diff
changeset
|
1148 patch=patch, |
1f42d621f090
hgweb: support using new response object for web commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36871
diff
changeset
|
1149 latestentry=latestentry, |
1f42d621f090
hgweb: support using new response object for web commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36871
diff
changeset
|
1150 linerange=linerange, |
1f42d621f090
hgweb: support using new response object for web commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36871
diff
changeset
|
1151 revcount=revcount, |
1f42d621f090
hgweb: support using new response object for web commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36871
diff
changeset
|
1152 morevars=morevars, |
1f42d621f090
hgweb: support using new response object for web commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36871
diff
changeset
|
1153 lessvars=lessvars, |
1f42d621f090
hgweb: support using new response object for web commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36871
diff
changeset
|
1154 **pycompat.strkwargs(webutil.commonentry(web.repo, fctx)))) |
1f42d621f090
hgweb: support using new response object for web commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36871
diff
changeset
|
1155 |
1f42d621f090
hgweb: support using new response object for web commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36871
diff
changeset
|
1156 return web.res |
5591
08887121a652
split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
1157 |
24076
b53d2afd11fb
webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23992
diff
changeset
|
1158 @webcommand('archive') |
5600
9d900f7282e6
hgweb: explicitly pass around the templater
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
5598
diff
changeset
|
1159 def archive(web, req, tmpl): |
24096
bb8b6d44fe1d
webcommands: document "archive" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24095
diff
changeset
|
1160 """ |
bb8b6d44fe1d
webcommands: document "archive" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24095
diff
changeset
|
1161 /archive/{revision}.{format}[/{path}] |
bb8b6d44fe1d
webcommands: document "archive" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24095
diff
changeset
|
1162 ------------------------------------- |
bb8b6d44fe1d
webcommands: document "archive" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24095
diff
changeset
|
1163 |
bb8b6d44fe1d
webcommands: document "archive" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24095
diff
changeset
|
1164 Obtain an archive of repository content. |
bb8b6d44fe1d
webcommands: document "archive" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24095
diff
changeset
|
1165 |
bb8b6d44fe1d
webcommands: document "archive" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24095
diff
changeset
|
1166 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
|
1167 ``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
|
1168 ``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
|
1169 server configuration. |
bb8b6d44fe1d
webcommands: document "archive" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24095
diff
changeset
|
1170 |
bb8b6d44fe1d
webcommands: document "archive" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24095
diff
changeset
|
1171 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
|
1172 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
|
1173 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
|
1174 directory will be included in the archive. |
bb8b6d44fe1d
webcommands: document "archive" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24095
diff
changeset
|
1175 |
bb8b6d44fe1d
webcommands: document "archive" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24095
diff
changeset
|
1176 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
|
1177 """ |
bb8b6d44fe1d
webcommands: document "archive" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24095
diff
changeset
|
1178 |
36871
3d60a22e27f5
hgweb: perform all parameter lookup via qsparams
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36869
diff
changeset
|
1179 type_ = req.req.qsparams.get('type') |
5591
08887121a652
split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
1180 allowed = web.configlist("web", "allow_archive") |
36871
3d60a22e27f5
hgweb: perform all parameter lookup via qsparams
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36869
diff
changeset
|
1181 key = req.req.qsparams['node'] |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
1182 |
30734
b9e49f7b0220
hgweb: use archivespecs (dict) instead of archives (tuple) for "in" check
Anton Shestakov <av6@dwimlabs.net>
parents:
30564
diff
changeset
|
1183 if type_ not in web.archivespecs: |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
1184 msg = 'Unsupported archive type: %s' % type_ |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
1185 raise ErrorResponse(HTTP_NOT_FOUND, msg) |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
1186 |
7029
b84d27386285
hgweb: Respond with HTTP 403 for disabled archive types instead of 404
Rocco Rutte <pdmef@gmx.net>
parents:
6981
diff
changeset
|
1187 if not ((type_ in allowed or |
34654
4182d2065e7a
configitems: drop redundant default of web.allow<archtype>
Yuya Nishihara <yuya@tcha.org>
parents:
34608
diff
changeset
|
1188 web.configbool("web", "allow" + type_))): |
7029
b84d27386285
hgweb: Respond with HTTP 403 for disabled archive types instead of 404
Rocco Rutte <pdmef@gmx.net>
parents:
6981
diff
changeset
|
1189 msg = 'Archive type not allowed: %s' % type_ |
b84d27386285
hgweb: Respond with HTTP 403 for disabled archive types instead of 404
Rocco Rutte <pdmef@gmx.net>
parents:
6981
diff
changeset
|
1190 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
|
1191 |
36415
caa3d42f616d
py3: make regex bytes in hgweb/webcommands.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36308
diff
changeset
|
1192 reponame = re.sub(br"\W+", "-", os.path.basename(web.reponame)) |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
1193 cnode = web.repo.lookup(key) |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
1194 arch_version = key |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
1195 if cnode == key or key == 'tip': |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
1196 arch_version = short(cnode) |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
1197 name = "%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
|
1198 |
bb38f4f78104
hgweb: teach archive how to download a specific directory or file
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18747
diff
changeset
|
1199 ctx = webutil.changectx(web.repo, req) |
bb38f4f78104
hgweb: teach archive how to download a specific directory or file
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18747
diff
changeset
|
1200 pats = [] |
34100
08346a8fa65f
cleanup: rename "matchfn" to "match" where obviously a matcher
Martin von Zweigbergk <martinvonz@google.com>
parents:
33554
diff
changeset
|
1201 match = scmutil.match(ctx, []) |
36871
3d60a22e27f5
hgweb: perform all parameter lookup via qsparams
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36869
diff
changeset
|
1202 file = req.req.qsparams.get('file') |
18771
bb38f4f78104
hgweb: teach archive how to download a specific directory or file
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18747
diff
changeset
|
1203 if file: |
36871
3d60a22e27f5
hgweb: perform all parameter lookup via qsparams
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36869
diff
changeset
|
1204 pats = ['path:' + file] |
34100
08346a8fa65f
cleanup: rename "matchfn" to "match" where obviously a matcher
Martin von Zweigbergk <martinvonz@google.com>
parents:
33554
diff
changeset
|
1205 match = scmutil.match(ctx, pats, default='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
|
1206 if pats: |
34100
08346a8fa65f
cleanup: rename "matchfn" to "match" where obviously a matcher
Martin von Zweigbergk <martinvonz@google.com>
parents:
33554
diff
changeset
|
1207 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
|
1208 if not files: |
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
|
1209 raise ErrorResponse(HTTP_NOT_FOUND, |
36871
3d60a22e27f5
hgweb: perform all parameter lookup via qsparams
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36869
diff
changeset
|
1210 'file(s) not found: %s' % file) |
18771
bb38f4f78104
hgweb: teach archive how to download a specific directory or file
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18747
diff
changeset
|
1211 |
26136
6defc74f3066
hgweb: move archive related attributes to requestcontext
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26131
diff
changeset
|
1212 mimetype, artype, extension, encoding = web.archivespecs[type_] |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
1213 headers = [ |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
1214 ('Content-Disposition', 'attachment; filename=%s%s' % (name, extension)) |
18347
853221386f48
hgweb: make type a mandatory parameter to request.respond
Mads Kiilerich <mads@kiilerich.com>
parents:
18319
diff
changeset
|
1215 ] |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
1216 if encoding: |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
1217 headers.append(('Content-Encoding', encoding)) |
18348
764a758780b6
hgweb: simplify wsgirequest header handling
Mads Kiilerich <mads@kiilerich.com>
parents:
18347
diff
changeset
|
1218 req.headers.extend(headers) |
18347
853221386f48
hgweb: make type a mandatory parameter to request.respond
Mads Kiilerich <mads@kiilerich.com>
parents:
18319
diff
changeset
|
1219 req.respond(HTTP_OK, mimetype) |
17933
8243dd66e0e3
webcommands: allow hgweb's archive to recurse into subrepos
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
17322
diff
changeset
|
1220 |
36881
16499427f6de
hgweb: refactor fake file object proxy for archiving
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36879
diff
changeset
|
1221 bodyfh = requestmod.offsettrackingwriter(req.write) |
16499427f6de
hgweb: refactor fake file object proxy for archiving
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36879
diff
changeset
|
1222 |
16499427f6de
hgweb: refactor fake file object proxy for archiving
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36879
diff
changeset
|
1223 archival.archive(web.repo, bodyfh, cnode, artype, prefix=name, |
34100
08346a8fa65f
cleanup: rename "matchfn" to "match" where obviously a matcher
Martin von Zweigbergk <martinvonz@google.com>
parents:
33554
diff
changeset
|
1224 matchfn=match, |
17933
8243dd66e0e3
webcommands: allow hgweb's archive to recurse into subrepos
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
17322
diff
changeset
|
1225 subrepos=web.configbool("web", "archivesubrepos")) |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
1226 return [] |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
1227 |
5591
08887121a652
split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
1228 |
24076
b53d2afd11fb
webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23992
diff
changeset
|
1229 @webcommand('static') |
5600
9d900f7282e6
hgweb: explicitly pass around the templater
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
5598
diff
changeset
|
1230 def static(web, req, tmpl): |
36871
3d60a22e27f5
hgweb: perform all parameter lookup via qsparams
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36869
diff
changeset
|
1231 fname = req.req.qsparams['file'] |
5591
08887121a652
split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
1232 # 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
|
1233 # readable by the user running the CGI script |
7107
125c8fedcbe0
Allow hgweb to search for templates in more than one path.
Brendan Cully <brendan@kublai.com>
parents:
7102
diff
changeset
|
1234 static = web.config("web", "static", None, untrusted=False) |
125c8fedcbe0
Allow hgweb to search for templates in more than one path.
Brendan Cully <brendan@kublai.com>
parents:
7102
diff
changeset
|
1235 if not static: |
22634
e48a5d3996c2
templater: introduce templatepaths for getting paths searched for templates
Mads Kiilerich <madski@unity3d.com>
parents:
22199
diff
changeset
|
1236 tp = web.templatepath or templater.templatepaths() |
7107
125c8fedcbe0
Allow hgweb to search for templates in more than one path.
Brendan Cully <brendan@kublai.com>
parents:
7102
diff
changeset
|
1237 if isinstance(tp, str): |
125c8fedcbe0
Allow hgweb to search for templates in more than one path.
Brendan Cully <brendan@kublai.com>
parents:
7102
diff
changeset
|
1238 tp = [tp] |
7288
9c399c53469d
Allow per-file shadowing of static directory in templatepath
Brendan Cully <brendan@kublai.com>
parents:
7280
diff
changeset
|
1239 static = [os.path.join(p, 'static') for p in tp] |
36879
98baf8dea553
hgweb: port static file handling to new response API
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36878
diff
changeset
|
1240 |
98baf8dea553
hgweb: port static file handling to new response API
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36878
diff
changeset
|
1241 staticfile(static, fname, web.res) |
98baf8dea553
hgweb: port static file handling to new response API
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36878
diff
changeset
|
1242 return web.res |
6691
0dba955c2636
add graph page to hgweb
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6670
diff
changeset
|
1243 |
24076
b53d2afd11fb
webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23992
diff
changeset
|
1244 @webcommand('graph') |
6691
0dba955c2636
add graph page to hgweb
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6670
diff
changeset
|
1245 def graph(web, req, tmpl): |
24097
8e04a73b5502
webcommands: document "graph" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24096
diff
changeset
|
1246 """ |
8e04a73b5502
webcommands: document "graph" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24096
diff
changeset
|
1247 /graph[/{revision}] |
8e04a73b5502
webcommands: document "graph" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24096
diff
changeset
|
1248 ------------------- |
8e04a73b5502
webcommands: document "graph" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24096
diff
changeset
|
1249 |
8e04a73b5502
webcommands: document "graph" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24096
diff
changeset
|
1250 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
|
1251 |
8e04a73b5502
webcommands: document "graph" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24096
diff
changeset
|
1252 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
|
1253 representations of repository topology. |
8e04a73b5502
webcommands: document "graph" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24096
diff
changeset
|
1254 |
35418
0fe5d99804bb
hgweb: update graph function docstring
Anton Shestakov <av6@dwimlabs.net>
parents:
35416
diff
changeset
|
1255 The ``revision`` URL parameter controls the starting changeset. If it's |
0fe5d99804bb
hgweb: update graph function docstring
Anton Shestakov <av6@dwimlabs.net>
parents:
35416
diff
changeset
|
1256 absent, the default is ``tip``. |
24097
8e04a73b5502
webcommands: document "graph" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24096
diff
changeset
|
1257 |
8e04a73b5502
webcommands: document "graph" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24096
diff
changeset
|
1258 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
|
1259 to show information for. |
8e04a73b5502
webcommands: document "graph" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24096
diff
changeset
|
1260 |
35418
0fe5d99804bb
hgweb: update graph function docstring
Anton Shestakov <av6@dwimlabs.net>
parents:
35416
diff
changeset
|
1261 The ``graphtop`` query string argument can specify the starting changeset |
0fe5d99804bb
hgweb: update graph function docstring
Anton Shestakov <av6@dwimlabs.net>
parents:
35416
diff
changeset
|
1262 for producing ``jsdata`` variable that is used for rendering graph in |
0fe5d99804bb
hgweb: update graph function docstring
Anton Shestakov <av6@dwimlabs.net>
parents:
35416
diff
changeset
|
1263 JavaScript. By default it has the same value as ``revision``. |
0fe5d99804bb
hgweb: update graph function docstring
Anton Shestakov <av6@dwimlabs.net>
parents:
35416
diff
changeset
|
1264 |
24097
8e04a73b5502
webcommands: document "graph" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24096
diff
changeset
|
1265 This handler will render the ``graph`` template. |
8e04a73b5502
webcommands: document "graph" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24096
diff
changeset
|
1266 """ |
10245
207b94f6b65d
hgweb: make graph page size equal to shortlog
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9404
diff
changeset
|
1267 |
36871
3d60a22e27f5
hgweb: perform all parameter lookup via qsparams
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36869
diff
changeset
|
1268 if 'node' in req.req.qsparams: |
25602
85fb416f2fa7
hgweb: provide symrev (symbolic revision) property to the templates
Anton Shestakov <av6@dwimlabs.net>
parents:
25251
diff
changeset
|
1269 ctx = webutil.changectx(web.repo, req) |
85fb416f2fa7
hgweb: provide symrev (symbolic revision) property to the templates
Anton Shestakov <av6@dwimlabs.net>
parents:
25251
diff
changeset
|
1270 symrev = webutil.symrevorshortnode(req, ctx) |
85fb416f2fa7
hgweb: provide symrev (symbolic revision) property to the templates
Anton Shestakov <av6@dwimlabs.net>
parents:
25251
diff
changeset
|
1271 else: |
85fb416f2fa7
hgweb: provide symrev (symbolic revision) property to the templates
Anton Shestakov <av6@dwimlabs.net>
parents:
25251
diff
changeset
|
1272 ctx = web.repo['tip'] |
85fb416f2fa7
hgweb: provide symrev (symbolic revision) property to the templates
Anton Shestakov <av6@dwimlabs.net>
parents:
25251
diff
changeset
|
1273 symrev = 'tip' |
17318
7ac5800dbc8f
hgweb: fix graph view paging
Patrick Mezard <patrick@mezard.eu>
parents:
17303
diff
changeset
|
1274 rev = ctx.rev() |
7ac5800dbc8f
hgweb: fix graph view paging
Patrick Mezard <patrick@mezard.eu>
parents:
17303
diff
changeset
|
1275 |
6691
0dba955c2636
add graph page to hgweb
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6670
diff
changeset
|
1276 bg_height = 39 |
10245
207b94f6b65d
hgweb: make graph page size equal to shortlog
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9404
diff
changeset
|
1277 revcount = web.maxshortchanges |
36871
3d60a22e27f5
hgweb: perform all parameter lookup via qsparams
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36869
diff
changeset
|
1278 if 'revcount' in req.req.qsparams: |
20092
77acd8ce01ce
hgweb: ignore non numeric "revcount" parameter values (issue4091)
Isaac Jurado <diptongo@gmail.com>
parents:
20004
diff
changeset
|
1279 try: |
36871
3d60a22e27f5
hgweb: perform all parameter lookup via qsparams
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36869
diff
changeset
|
1280 revcount = int(req.req.qsparams.get('revcount', revcount)) |
20092
77acd8ce01ce
hgweb: ignore non numeric "revcount" parameter values (issue4091)
Isaac Jurado <diptongo@gmail.com>
parents:
20004
diff
changeset
|
1281 revcount = max(revcount, 1) |
77acd8ce01ce
hgweb: ignore non numeric "revcount" parameter values (issue4091)
Isaac Jurado <diptongo@gmail.com>
parents:
20004
diff
changeset
|
1282 tmpl.defaults['sessionvars']['revcount'] = revcount |
77acd8ce01ce
hgweb: ignore non numeric "revcount" parameter values (issue4091)
Isaac Jurado <diptongo@gmail.com>
parents:
20004
diff
changeset
|
1283 except ValueError: |
77acd8ce01ce
hgweb: ignore non numeric "revcount" parameter values (issue4091)
Isaac Jurado <diptongo@gmail.com>
parents:
20004
diff
changeset
|
1284 pass |
7345
55651328dfcc
hgweb: fix up the less/more links on the graph page
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7332
diff
changeset
|
1285 |
55651328dfcc
hgweb: fix up the less/more links on the graph page
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7332
diff
changeset
|
1286 lessvars = copy.copy(tmpl.defaults['sessionvars']) |
36582
24897a9d18ac
webcommands: use explicit integer division for Python 3 compat
Augie Fackler <augie@google.com>
parents:
36464
diff
changeset
|
1287 lessvars['revcount'] = max(revcount // 2, 1) |
7345
55651328dfcc
hgweb: fix up the less/more links on the graph page
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7332
diff
changeset
|
1288 morevars = copy.copy(tmpl.defaults['sessionvars']) |
55651328dfcc
hgweb: fix up the less/more links on the graph page
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7332
diff
changeset
|
1289 morevars['revcount'] = revcount * 2 |
55651328dfcc
hgweb: fix up the less/more links on the graph page
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7332
diff
changeset
|
1290 |
36871
3d60a22e27f5
hgweb: perform all parameter lookup via qsparams
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36869
diff
changeset
|
1291 graphtop = req.req.qsparams.get('graphtop', ctx.hex()) |
35416
f84b01257e06
hgweb: render next pages on /graph incrementally
Anton Shestakov <av6@dwimlabs.net>
parents:
35415
diff
changeset
|
1292 graphvars = copy.copy(tmpl.defaults['sessionvars']) |
f84b01257e06
hgweb: render next pages on /graph incrementally
Anton Shestakov <av6@dwimlabs.net>
parents:
35415
diff
changeset
|
1293 graphvars['graphtop'] = graphtop |
f84b01257e06
hgweb: render next pages on /graph incrementally
Anton Shestakov <av6@dwimlabs.net>
parents:
35415
diff
changeset
|
1294 |
17318
7ac5800dbc8f
hgweb: fix graph view paging
Patrick Mezard <patrick@mezard.eu>
parents:
17303
diff
changeset
|
1295 count = len(web.repo) |
7ac5800dbc8f
hgweb: fix graph view paging
Patrick Mezard <patrick@mezard.eu>
parents:
17303
diff
changeset
|
1296 pos = rev |
7ac5800dbc8f
hgweb: fix graph view paging
Patrick Mezard <patrick@mezard.eu>
parents:
17303
diff
changeset
|
1297 |
7ac5800dbc8f
hgweb: fix graph view paging
Patrick Mezard <patrick@mezard.eu>
parents:
17303
diff
changeset
|
1298 uprev = min(max(0, count - 1), rev + revcount) |
6691
0dba955c2636
add graph page to hgweb
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6670
diff
changeset
|
1299 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
|
1300 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
|
1301 |
18428
8c10f760ca34
hgweb: walk the graph through the changelog
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18427
diff
changeset
|
1302 tree = [] |
35416
f84b01257e06
hgweb: render next pages on /graph incrementally
Anton Shestakov <av6@dwimlabs.net>
parents:
35415
diff
changeset
|
1303 nextentry = [] |
f84b01257e06
hgweb: render next pages on /graph incrementally
Anton Shestakov <av6@dwimlabs.net>
parents:
35415
diff
changeset
|
1304 lastrev = 0 |
19487
8cfa3a3664a5
hgweb: fix incorrect revisions count in graph (issue3977)
Alexander Plavin <me@aplavin.ru>
parents:
19486
diff
changeset
|
1305 if pos != -1: |
8cfa3a3664a5
hgweb: fix incorrect revisions count in graph (issue3977)
Alexander Plavin <me@aplavin.ru>
parents:
19486
diff
changeset
|
1306 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
|
1307 revs = [] |
8cfa3a3664a5
hgweb: fix incorrect revisions count in graph (issue3977)
Alexander Plavin <me@aplavin.ru>
parents:
19486
diff
changeset
|
1308 for i in allrevs: |
8cfa3a3664a5
hgweb: fix incorrect revisions count in graph (issue3977)
Alexander Plavin <me@aplavin.ru>
parents:
19486
diff
changeset
|
1309 revs.append(i) |
35416
f84b01257e06
hgweb: render next pages on /graph incrementally
Anton Shestakov <av6@dwimlabs.net>
parents:
35415
diff
changeset
|
1310 if len(revs) >= revcount + 1: |
19487
8cfa3a3664a5
hgweb: fix incorrect revisions count in graph (issue3977)
Alexander Plavin <me@aplavin.ru>
parents:
19486
diff
changeset
|
1311 break |
8cfa3a3664a5
hgweb: fix incorrect revisions count in graph (issue3977)
Alexander Plavin <me@aplavin.ru>
parents:
19486
diff
changeset
|
1312 |
35416
f84b01257e06
hgweb: render next pages on /graph incrementally
Anton Shestakov <av6@dwimlabs.net>
parents:
35415
diff
changeset
|
1313 if len(revs) > revcount: |
f84b01257e06
hgweb: render next pages on /graph incrementally
Anton Shestakov <av6@dwimlabs.net>
parents:
35415
diff
changeset
|
1314 nextentry = [webutil.commonentry(web.repo, web.repo[revs[-1]])] |
f84b01257e06
hgweb: render next pages on /graph incrementally
Anton Shestakov <av6@dwimlabs.net>
parents:
35415
diff
changeset
|
1315 revs = revs[:-1] |
f84b01257e06
hgweb: render next pages on /graph incrementally
Anton Shestakov <av6@dwimlabs.net>
parents:
35415
diff
changeset
|
1316 |
f84b01257e06
hgweb: render next pages on /graph incrementally
Anton Shestakov <av6@dwimlabs.net>
parents:
35415
diff
changeset
|
1317 lastrev = revs[-1] |
f84b01257e06
hgweb: render next pages on /graph incrementally
Anton Shestakov <av6@dwimlabs.net>
parents:
35415
diff
changeset
|
1318 |
20761
46f93b7660b6
webcommands: changed code to use lazy classes when calling dagwalker
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
20678
diff
changeset
|
1319 # 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
|
1320 # 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
|
1321 # since hgweb graphing code is not itself lazy yet. |
31043
aea06029919e
revset: import set classes directly from smartset module
Yuya Nishihara <yuya@tcha.org>
parents:
30826
diff
changeset
|
1322 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
|
1323 # As we said one line above... not lazy. |
35413
76dcdc4e707b
hgweb: filter graphmod.colored() output before iterating over it
Anton Shestakov <av6@dwimlabs.net>
parents:
35397
diff
changeset
|
1324 tree = list(item for item in graphmod.colored(dag, web.repo) |
76dcdc4e707b
hgweb: filter graphmod.colored() output before iterating over it
Anton Shestakov <av6@dwimlabs.net>
parents:
35397
diff
changeset
|
1325 if item[1] == graphmod.CHANGESET) |
16773
d490edc71146
hgweb: make graph data suitable for template usage
Paul Boddie <paul@boddie.org.uk>
parents:
16727
diff
changeset
|
1326 |
35566
baca93a47992
hgweb: make different kinds of commits look differently on /graph
Anton Shestakov <av6@dwimlabs.net>
parents:
35534
diff
changeset
|
1327 def nodecurrent(ctx): |
baca93a47992
hgweb: make different kinds of commits look differently on /graph
Anton Shestakov <av6@dwimlabs.net>
parents:
35534
diff
changeset
|
1328 wpnodes = web.repo.dirstate.parents() |
baca93a47992
hgweb: make different kinds of commits look differently on /graph
Anton Shestakov <av6@dwimlabs.net>
parents:
35534
diff
changeset
|
1329 if wpnodes[1] == nullid: |
baca93a47992
hgweb: make different kinds of commits look differently on /graph
Anton Shestakov <av6@dwimlabs.net>
parents:
35534
diff
changeset
|
1330 wpnodes = wpnodes[:1] |
baca93a47992
hgweb: make different kinds of commits look differently on /graph
Anton Shestakov <av6@dwimlabs.net>
parents:
35534
diff
changeset
|
1331 if ctx.node() in wpnodes: |
baca93a47992
hgweb: make different kinds of commits look differently on /graph
Anton Shestakov <av6@dwimlabs.net>
parents:
35534
diff
changeset
|
1332 return '@' |
baca93a47992
hgweb: make different kinds of commits look differently on /graph
Anton Shestakov <av6@dwimlabs.net>
parents:
35534
diff
changeset
|
1333 return '' |
baca93a47992
hgweb: make different kinds of commits look differently on /graph
Anton Shestakov <av6@dwimlabs.net>
parents:
35534
diff
changeset
|
1334 |
baca93a47992
hgweb: make different kinds of commits look differently on /graph
Anton Shestakov <av6@dwimlabs.net>
parents:
35534
diff
changeset
|
1335 def nodesymbol(ctx): |
baca93a47992
hgweb: make different kinds of commits look differently on /graph
Anton Shestakov <av6@dwimlabs.net>
parents:
35534
diff
changeset
|
1336 if ctx.obsolete(): |
baca93a47992
hgweb: make different kinds of commits look differently on /graph
Anton Shestakov <av6@dwimlabs.net>
parents:
35534
diff
changeset
|
1337 return 'x' |
baca93a47992
hgweb: make different kinds of commits look differently on /graph
Anton Shestakov <av6@dwimlabs.net>
parents:
35534
diff
changeset
|
1338 elif ctx.isunstable(): |
baca93a47992
hgweb: make different kinds of commits look differently on /graph
Anton Shestakov <av6@dwimlabs.net>
parents:
35534
diff
changeset
|
1339 return '*' |
baca93a47992
hgweb: make different kinds of commits look differently on /graph
Anton Shestakov <av6@dwimlabs.net>
parents:
35534
diff
changeset
|
1340 elif ctx.closesbranch(): |
baca93a47992
hgweb: make different kinds of commits look differently on /graph
Anton Shestakov <av6@dwimlabs.net>
parents:
35534
diff
changeset
|
1341 return '_' |
baca93a47992
hgweb: make different kinds of commits look differently on /graph
Anton Shestakov <av6@dwimlabs.net>
parents:
35534
diff
changeset
|
1342 else: |
baca93a47992
hgweb: make different kinds of commits look differently on /graph
Anton Shestakov <av6@dwimlabs.net>
parents:
35534
diff
changeset
|
1343 return 'o' |
baca93a47992
hgweb: make different kinds of commits look differently on /graph
Anton Shestakov <av6@dwimlabs.net>
parents:
35534
diff
changeset
|
1344 |
35416
f84b01257e06
hgweb: render next pages on /graph incrementally
Anton Shestakov <av6@dwimlabs.net>
parents:
35415
diff
changeset
|
1345 def fulltree(): |
f84b01257e06
hgweb: render next pages on /graph incrementally
Anton Shestakov <av6@dwimlabs.net>
parents:
35415
diff
changeset
|
1346 pos = web.repo[graphtop].rev() |
f84b01257e06
hgweb: render next pages on /graph incrementally
Anton Shestakov <av6@dwimlabs.net>
parents:
35415
diff
changeset
|
1347 tree = [] |
f84b01257e06
hgweb: render next pages on /graph incrementally
Anton Shestakov <av6@dwimlabs.net>
parents:
35415
diff
changeset
|
1348 if pos != -1: |
f84b01257e06
hgweb: render next pages on /graph incrementally
Anton Shestakov <av6@dwimlabs.net>
parents:
35415
diff
changeset
|
1349 revs = web.repo.changelog.revs(pos, lastrev) |
f84b01257e06
hgweb: render next pages on /graph incrementally
Anton Shestakov <av6@dwimlabs.net>
parents:
35415
diff
changeset
|
1350 dag = graphmod.dagwalker(web.repo, smartset.baseset(revs)) |
f84b01257e06
hgweb: render next pages on /graph incrementally
Anton Shestakov <av6@dwimlabs.net>
parents:
35415
diff
changeset
|
1351 tree = list(item for item in graphmod.colored(dag, web.repo) |
f84b01257e06
hgweb: render next pages on /graph incrementally
Anton Shestakov <av6@dwimlabs.net>
parents:
35415
diff
changeset
|
1352 if item[1] == graphmod.CHANGESET) |
f84b01257e06
hgweb: render next pages on /graph incrementally
Anton Shestakov <av6@dwimlabs.net>
parents:
35415
diff
changeset
|
1353 return tree |
f84b01257e06
hgweb: render next pages on /graph incrementally
Anton Shestakov <av6@dwimlabs.net>
parents:
35415
diff
changeset
|
1354 |
35415
a48af4993aa0
hgweb: split graphdata() into jsdata() and nodes()
Anton Shestakov <av6@dwimlabs.net>
parents:
35414
diff
changeset
|
1355 def jsdata(): |
a48af4993aa0
hgweb: split graphdata() into jsdata() and nodes()
Anton Shestakov <av6@dwimlabs.net>
parents:
35414
diff
changeset
|
1356 return [{'node': pycompat.bytestr(ctx), |
35566
baca93a47992
hgweb: make different kinds of commits look differently on /graph
Anton Shestakov <av6@dwimlabs.net>
parents:
35534
diff
changeset
|
1357 'graphnode': nodecurrent(ctx) + nodesymbol(ctx), |
35415
a48af4993aa0
hgweb: split graphdata() into jsdata() and nodes()
Anton Shestakov <av6@dwimlabs.net>
parents:
35414
diff
changeset
|
1358 'vertex': vtx, |
a48af4993aa0
hgweb: split graphdata() into jsdata() and nodes()
Anton Shestakov <av6@dwimlabs.net>
parents:
35414
diff
changeset
|
1359 'edges': edges} |
35416
f84b01257e06
hgweb: render next pages on /graph incrementally
Anton Shestakov <av6@dwimlabs.net>
parents:
35415
diff
changeset
|
1360 for (id, type, ctx, vtx, edges) in fulltree()] |
16773
d490edc71146
hgweb: make graph data suitable for template usage
Paul Boddie <paul@boddie.org.uk>
parents:
16727
diff
changeset
|
1361 |
35415
a48af4993aa0
hgweb: split graphdata() into jsdata() and nodes()
Anton Shestakov <av6@dwimlabs.net>
parents:
35414
diff
changeset
|
1362 def nodes(): |
35534
acd8a2454b47
monoblue: make actual changeset entries have backgrounds on /graph
Anton Shestakov <av6@dwimlabs.net>
parents:
35418
diff
changeset
|
1363 parity = paritygen(web.stripecount) |
35415
a48af4993aa0
hgweb: split graphdata() into jsdata() and nodes()
Anton Shestakov <av6@dwimlabs.net>
parents:
35414
diff
changeset
|
1364 for row, (id, type, ctx, vtx, edges) in enumerate(tree): |
a48af4993aa0
hgweb: split graphdata() into jsdata() and nodes()
Anton Shestakov <av6@dwimlabs.net>
parents:
35414
diff
changeset
|
1365 entry = webutil.commonentry(web.repo, ctx) |
a48af4993aa0
hgweb: split graphdata() into jsdata() and nodes()
Anton Shestakov <av6@dwimlabs.net>
parents:
35414
diff
changeset
|
1366 edgedata = [{'col': edge[0], |
a48af4993aa0
hgweb: split graphdata() into jsdata() and nodes()
Anton Shestakov <av6@dwimlabs.net>
parents:
35414
diff
changeset
|
1367 'nextcol': edge[1], |
a48af4993aa0
hgweb: split graphdata() into jsdata() and nodes()
Anton Shestakov <av6@dwimlabs.net>
parents:
35414
diff
changeset
|
1368 'color': (edge[2] - 1) % 6 + 1, |
a48af4993aa0
hgweb: split graphdata() into jsdata() and nodes()
Anton Shestakov <av6@dwimlabs.net>
parents:
35414
diff
changeset
|
1369 'width': edge[3], |
a48af4993aa0
hgweb: split graphdata() into jsdata() and nodes()
Anton Shestakov <av6@dwimlabs.net>
parents:
35414
diff
changeset
|
1370 'bcolor': edge[4]} |
a48af4993aa0
hgweb: split graphdata() into jsdata() and nodes()
Anton Shestakov <av6@dwimlabs.net>
parents:
35414
diff
changeset
|
1371 for edge in edges] |
16773
d490edc71146
hgweb: make graph data suitable for template usage
Paul Boddie <paul@boddie.org.uk>
parents:
16727
diff
changeset
|
1372 |
35415
a48af4993aa0
hgweb: split graphdata() into jsdata() and nodes()
Anton Shestakov <av6@dwimlabs.net>
parents:
35414
diff
changeset
|
1373 entry.update({'col': vtx[0], |
a48af4993aa0
hgweb: split graphdata() into jsdata() and nodes()
Anton Shestakov <av6@dwimlabs.net>
parents:
35414
diff
changeset
|
1374 'color': (vtx[1] - 1) % 6 + 1, |
35534
acd8a2454b47
monoblue: make actual changeset entries have backgrounds on /graph
Anton Shestakov <av6@dwimlabs.net>
parents:
35418
diff
changeset
|
1375 'parity': next(parity), |
35415
a48af4993aa0
hgweb: split graphdata() into jsdata() and nodes()
Anton Shestakov <av6@dwimlabs.net>
parents:
35414
diff
changeset
|
1376 'edges': edgedata, |
a48af4993aa0
hgweb: split graphdata() into jsdata() and nodes()
Anton Shestakov <av6@dwimlabs.net>
parents:
35414
diff
changeset
|
1377 'row': row, |
a48af4993aa0
hgweb: split graphdata() into jsdata() and nodes()
Anton Shestakov <av6@dwimlabs.net>
parents:
35414
diff
changeset
|
1378 'nextrow': row + 1}) |
35119
23bba755cf80
hgweb: use webutil.commonentry() for nodes (but not for jsdata yet) in /graph
Anton Shestakov <av6@dwimlabs.net>
parents:
35118
diff
changeset
|
1379 |
35415
a48af4993aa0
hgweb: split graphdata() into jsdata() and nodes()
Anton Shestakov <av6@dwimlabs.net>
parents:
35414
diff
changeset
|
1380 yield entry |
16773
d490edc71146
hgweb: make graph data suitable for template usage
Paul Boddie <paul@boddie.org.uk>
parents:
16727
diff
changeset
|
1381 |
d490edc71146
hgweb: make graph data suitable for template usage
Paul Boddie <paul@boddie.org.uk>
parents:
16727
diff
changeset
|
1382 rows = len(tree) |
6691
0dba955c2636
add graph page to hgweb
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6670
diff
changeset
|
1383 |
36877
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1384 web.res.setbodygen(tmpl( |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1385 'graph', |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1386 rev=rev, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1387 symrev=symrev, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1388 revcount=revcount, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1389 uprev=uprev, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1390 lessvars=lessvars, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1391 morevars=morevars, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1392 downrev=downrev, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1393 graphvars=graphvars, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1394 rows=rows, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1395 bg_height=bg_height, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1396 changesets=count, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1397 nextentry=nextentry, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1398 jsdata=lambda **x: jsdata(), |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1399 nodes=lambda **x: nodes(), |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1400 node=ctx.hex(), |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1401 changenav=changenav)) |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1402 |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1403 return web.res |
12666
ead4e21f49f1
web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents:
12063
diff
changeset
|
1404 |
ead4e21f49f1
web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents:
12063
diff
changeset
|
1405 def _getdoc(e): |
ead4e21f49f1
web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents:
12063
diff
changeset
|
1406 doc = e[0].__doc__ |
ead4e21f49f1
web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents:
12063
diff
changeset
|
1407 if doc: |
26846
7c1b4840c2cd
hgweb: replace some str.split() calls by str.partition() or str.rpartition()
Anton Shestakov <av6@dwimlabs.net>
parents:
26781
diff
changeset
|
1408 doc = _(doc).partition('\n')[0] |
12666
ead4e21f49f1
web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents:
12063
diff
changeset
|
1409 else: |
ead4e21f49f1
web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents:
12063
diff
changeset
|
1410 doc = _('(no help text available)') |
ead4e21f49f1
web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents:
12063
diff
changeset
|
1411 return doc |
ead4e21f49f1
web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents:
12063
diff
changeset
|
1412 |
24076
b53d2afd11fb
webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23992
diff
changeset
|
1413 @webcommand('help') |
12666
ead4e21f49f1
web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents:
12063
diff
changeset
|
1414 def help(web, req, tmpl): |
24081
ff42de48193c
webcommands: document "help" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24078
diff
changeset
|
1415 """ |
ff42de48193c
webcommands: document "help" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24078
diff
changeset
|
1416 /help[/{topic}] |
ff42de48193c
webcommands: document "help" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24078
diff
changeset
|
1417 --------------- |
ff42de48193c
webcommands: document "help" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24078
diff
changeset
|
1418 |
ff42de48193c
webcommands: document "help" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24078
diff
changeset
|
1419 Render help documentation. |
ff42de48193c
webcommands: document "help" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24078
diff
changeset
|
1420 |
ff42de48193c
webcommands: document "help" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24078
diff
changeset
|
1421 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
|
1422 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
|
1423 available help topics will be rendered. |
ff42de48193c
webcommands: document "help" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24078
diff
changeset
|
1424 |
ff42de48193c
webcommands: document "help" web command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24078
diff
changeset
|
1425 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
|
1426 ``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
|
1427 """ |
27046
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27009
diff
changeset
|
1428 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
|
1429 |
36871
3d60a22e27f5
hgweb: perform all parameter lookup via qsparams
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36869
diff
changeset
|
1430 topicname = req.req.qsparams.get('node') |
12666
ead4e21f49f1
web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents:
12063
diff
changeset
|
1431 if not topicname: |
ead4e21f49f1
web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents:
12063
diff
changeset
|
1432 def topics(**map): |
22199
b3e51675f98e
cleanup: avoid _ for local unused tmp variables - that is reserved for i18n
Mads Kiilerich <madski@unity3d.com>
parents:
21123
diff
changeset
|
1433 for entries, summary, _doc in helpmod.helptable: |
17322
7124f984dc8d
help: use the first topic name from helptable, not the longest alias
Mads Kiilerich <mads@kiilerich.com>
parents:
17318
diff
changeset
|
1434 yield {'topic': entries[0], 'summary': summary} |
12666
ead4e21f49f1
web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents:
12063
diff
changeset
|
1435 |
ead4e21f49f1
web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents:
12063
diff
changeset
|
1436 early, other = [], [] |
26846
7c1b4840c2cd
hgweb: replace some str.split() calls by str.partition() or str.rpartition()
Anton Shestakov <av6@dwimlabs.net>
parents:
26781
diff
changeset
|
1437 primary = lambda s: s.partition('|')[0] |
12666
ead4e21f49f1
web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents:
12063
diff
changeset
|
1438 for c, e in commands.table.iteritems(): |
ead4e21f49f1
web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents:
12063
diff
changeset
|
1439 doc = _getdoc(e) |
ead4e21f49f1
web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents:
12063
diff
changeset
|
1440 if 'DEPRECATED' in doc or c.startswith('debug'): |
ead4e21f49f1
web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents:
12063
diff
changeset
|
1441 continue |
ead4e21f49f1
web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents:
12063
diff
changeset
|
1442 cmd = primary(c) |
ead4e21f49f1
web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents:
12063
diff
changeset
|
1443 if cmd.startswith('^'): |
ead4e21f49f1
web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents:
12063
diff
changeset
|
1444 early.append((cmd[1:], doc)) |
ead4e21f49f1
web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents:
12063
diff
changeset
|
1445 else: |
ead4e21f49f1
web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents:
12063
diff
changeset
|
1446 other.append((cmd, doc)) |
ead4e21f49f1
web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents:
12063
diff
changeset
|
1447 |
ead4e21f49f1
web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents:
12063
diff
changeset
|
1448 early.sort() |
ead4e21f49f1
web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents:
12063
diff
changeset
|
1449 other.sort() |
ead4e21f49f1
web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents:
12063
diff
changeset
|
1450 |
ead4e21f49f1
web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents:
12063
diff
changeset
|
1451 def earlycommands(**map): |
ead4e21f49f1
web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents:
12063
diff
changeset
|
1452 for c, doc in early: |
ead4e21f49f1
web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents:
12063
diff
changeset
|
1453 yield {'topic': c, 'summary': doc} |
ead4e21f49f1
web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents:
12063
diff
changeset
|
1454 |
ead4e21f49f1
web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents:
12063
diff
changeset
|
1455 def othercommands(**map): |
ead4e21f49f1
web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents:
12063
diff
changeset
|
1456 for c, doc in other: |
ead4e21f49f1
web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents:
12063
diff
changeset
|
1457 yield {'topic': c, 'summary': doc} |
ead4e21f49f1
web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents:
12063
diff
changeset
|
1458 |
36877
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1459 web.res.setbodygen(tmpl( |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1460 'helptopics', |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1461 topics=topics, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1462 earlycommands=earlycommands, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1463 othercommands=othercommands, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1464 title='Index')) |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1465 return web.res |
12666
ead4e21f49f1
web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents:
12063
diff
changeset
|
1466 |
27581
3aa6a8135557
hgweb: support rendering sub-topic indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27294
diff
changeset
|
1467 # Render an index of sub-topics. |
3aa6a8135557
hgweb: support rendering sub-topic indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27294
diff
changeset
|
1468 if topicname in helpmod.subtopics: |
3aa6a8135557
hgweb: support rendering sub-topic indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27294
diff
changeset
|
1469 topics = [] |
3aa6a8135557
hgweb: support rendering sub-topic indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27294
diff
changeset
|
1470 for entries, summary, _doc in helpmod.subtopics[topicname]: |
3aa6a8135557
hgweb: support rendering sub-topic indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27294
diff
changeset
|
1471 topics.append({ |
3aa6a8135557
hgweb: support rendering sub-topic indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27294
diff
changeset
|
1472 'topic': '%s.%s' % (topicname, entries[0]), |
3aa6a8135557
hgweb: support rendering sub-topic indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27294
diff
changeset
|
1473 'basename': entries[0], |
3aa6a8135557
hgweb: support rendering sub-topic indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27294
diff
changeset
|
1474 'summary': summary, |
3aa6a8135557
hgweb: support rendering sub-topic indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27294
diff
changeset
|
1475 }) |
3aa6a8135557
hgweb: support rendering sub-topic indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27294
diff
changeset
|
1476 |
36877
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1477 web.res.setbodygen(tmpl( |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1478 'helptopics', |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1479 topics=topics, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1480 title=topicname, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1481 subindex=True)) |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1482 return web.res |
27581
3aa6a8135557
hgweb: support rendering sub-topic indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27294
diff
changeset
|
1483 |
30564
d83ca854fa21
ui: factor out ui.load() to create a ui without loading configs (API)
Yuya Nishihara <yuya@tcha.org>
parents:
30252
diff
changeset
|
1484 u = webutil.wsgiui.load() |
17146
6b40cc67ceb4
hgweb: show help with verbose sections included
Adrian Buehlmann <adrian@cadifra.com>
parents:
16773
diff
changeset
|
1485 u.verbose = True |
27582
8f8f3b13252d
hgweb: support rendering a sub-topic
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27581
diff
changeset
|
1486 |
8f8f3b13252d
hgweb: support rendering a sub-topic
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27581
diff
changeset
|
1487 # Render a page from a sub-topic. |
8f8f3b13252d
hgweb: support rendering a sub-topic
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27581
diff
changeset
|
1488 if '.' in topicname: |
8f8f3b13252d
hgweb: support rendering a sub-topic
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27581
diff
changeset
|
1489 # TODO implement support for rendering sections, like |
8f8f3b13252d
hgweb: support rendering a sub-topic
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27581
diff
changeset
|
1490 # `hg help` works. |
8f8f3b13252d
hgweb: support rendering a sub-topic
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27581
diff
changeset
|
1491 topic, subtopic = topicname.split('.', 1) |
8f8f3b13252d
hgweb: support rendering a sub-topic
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27581
diff
changeset
|
1492 if topic not in helpmod.subtopics: |
8f8f3b13252d
hgweb: support rendering a sub-topic
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27581
diff
changeset
|
1493 raise ErrorResponse(HTTP_NOT_FOUND) |
8f8f3b13252d
hgweb: support rendering a sub-topic
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27581
diff
changeset
|
1494 else: |
8f8f3b13252d
hgweb: support rendering a sub-topic
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27581
diff
changeset
|
1495 topic = topicname |
8f8f3b13252d
hgweb: support rendering a sub-topic
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27581
diff
changeset
|
1496 subtopic = None |
8f8f3b13252d
hgweb: support rendering a sub-topic
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27581
diff
changeset
|
1497 |
12666
ead4e21f49f1
web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents:
12063
diff
changeset
|
1498 try: |
32599
1b90036f42f0
help: pass commands module by argument
Yuya Nishihara <yuya@tcha.org>
parents:
32189
diff
changeset
|
1499 doc = helpmod.help_(u, commands, topic, subtopic=subtopic) |
36281
0ef50a5e3ae1
hgweb: translate Abort in help command to 404 error
Yuya Nishihara <yuya@tcha.org>
parents:
35566
diff
changeset
|
1500 except error.Abort: |
12666
ead4e21f49f1
web: add a help view for getting hg help output
Augie Fackler <durin42@gmail.com>
parents:
12063
diff
changeset
|
1501 raise ErrorResponse(HTTP_NOT_FOUND) |
36877
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1502 |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1503 web.res.setbodygen(tmpl( |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1504 'help', |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1505 topic=topicname, |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1506 doc=doc)) |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1507 |
9fc3d814646e
hgweb: port most @webcommand to use modern response type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36876
diff
changeset
|
1508 return web.res |
24859
64e3f97bdf08
i18n: extract doc string of each web commands as translatable one
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24712
diff
changeset
|
1509 |
64e3f97bdf08
i18n: extract doc string of each web commands as translatable one
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24712
diff
changeset
|
1510 # 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
|
1511 i18nfunctions = commands.values() |