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