Mercurial > hg
annotate mercurial/hgweb/webutil.py @ 51192:65c9032e2e5a
rust-index: synchronize append method
We now append to the Rust index just as we do to the C index. Future steps
will bring the two indexes further together until we can rip the C index
entirely when running Rust code.
author | Raphaël Gomès <rgomes@octobus.net> |
---|---|
date | Tue, 27 Jun 2023 18:24:54 +0200 |
parents | 18c8c18993f0 |
children | 607e94e01851 |
rev | line source |
---|---|
6392
2540521dc7c1
hgweb: separate out utility functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
1 # hgweb/webutil.py - utility library for the web interface. |
2540521dc7c1
hgweb: separate out utility functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
2 # |
2540521dc7c1
hgweb: separate out utility functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
3 # Copyright 21 May 2005 - (c) 2005 Jake Edge <jake@edge2.net> |
46819
d4ba4d51f85f
contributor: change mentions of mpm to olivia
Raphaël Gomès <rgomes@octobus.net>
parents:
45942
diff
changeset
|
4 # Copyright 2005-2007 Olivia Mackall <olivia@selenic.com> |
6392
2540521dc7c1
hgweb: separate out utility functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
5 # |
8225
46293a0c7e9f
updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents:
7717
diff
changeset
|
6 # This software may be used and distributed according to the terms of the |
10263 | 7 # GNU General Public License version 2 or any later version. |
6392
2540521dc7c1
hgweb: separate out utility functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
8 |
27046
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27023
diff
changeset
|
9 |
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27023
diff
changeset
|
10 import copy |
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27023
diff
changeset
|
11 import difflib |
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27023
diff
changeset
|
12 import os |
26162
268b39770c28
hgweb: extract web substitutions table generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26129
diff
changeset
|
13 import re |
27046
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27023
diff
changeset
|
14 |
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27023
diff
changeset
|
15 from ..i18n import _ |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46819
diff
changeset
|
16 from ..node import hex, short |
27046
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27023
diff
changeset
|
17 |
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27023
diff
changeset
|
18 from .common import ( |
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27023
diff
changeset
|
19 ErrorResponse, |
31665
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31660
diff
changeset
|
20 HTTP_BAD_REQUEST, |
27046
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27023
diff
changeset
|
21 HTTP_NOT_FOUND, |
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27023
diff
changeset
|
22 paritygen, |
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27023
diff
changeset
|
23 ) |
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27023
diff
changeset
|
24 |
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27023
diff
changeset
|
25 from .. import ( |
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27023
diff
changeset
|
26 context, |
38588
1c93e0237a24
diffutil: move the module out of utils package
Yuya Nishihara <yuya@tcha.org>
parents:
38585
diff
changeset
|
27 diffutil, |
27046
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27023
diff
changeset
|
28 error, |
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27023
diff
changeset
|
29 match, |
31808
ca3b4a2b7e54
mdiff: add a hunkinrange helper function
Denis Laxalde <denis@laxalde.org>
parents:
31727
diff
changeset
|
30 mdiff, |
36955
f21798a6bc20
hgweb: explain instabilities of unstable changesets
Anton Shestakov <av6@dwimlabs.net>
parents:
36886
diff
changeset
|
31 obsutil, |
27046
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27023
diff
changeset
|
32 patch, |
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27023
diff
changeset
|
33 pathutil, |
34807
3caec3c032c8
webutil: use pycompat.bytestr() instead of str()
Augie Fackler <augie@google.com>
parents:
34403
diff
changeset
|
34 pycompat, |
37335
956260cbc564
hgweb: use revsymbol() for creating context from changeid
Martin von Zweigbergk <martinvonz@google.com>
parents:
37334
diff
changeset
|
35 scmutil, |
27046
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27023
diff
changeset
|
36 templatefilters, |
35485
1721ce06100a
hgweb: display fate of obsolete changesets
Anton Shestakov <av6@dwimlabs.net>
parents:
35454
diff
changeset
|
37 templatekw, |
37515
8a5ee6aa8870
hgweb: wrap {archives} with mappinglist
Yuya Nishihara <yuya@tcha.org>
parents:
37514
diff
changeset
|
38 templateutil, |
27046
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27023
diff
changeset
|
39 ui as uimod, |
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27023
diff
changeset
|
40 util, |
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
27023
diff
changeset
|
41 ) |
6392
2540521dc7c1
hgweb: separate out utility functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
42 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
43 from ..utils import stringutil |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
44 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
45 archivespecs = util.sortdict( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
46 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
47 (b'zip', (b'application/zip', b'zip', b'.zip', None)), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
48 (b'gz', (b'application/x-gzip', b'tgz', b'.tar.gz', None)), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
49 (b'bz2', (b'application/x-bzip2', b'tbz2', b'.tar.bz2', None)), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
50 ) |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
37069
diff
changeset
|
51 ) |
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
37069
diff
changeset
|
52 |
37511
356e61e82c2a
hgweb: move archivespecs to webutil
Yuya Nishihara <yuya@tcha.org>
parents:
37503
diff
changeset
|
53 |
37514
034a422aeaff
hgweb: forward archivelist() of hgweb to webutil
Yuya Nishihara <yuya@tcha.org>
parents:
37513
diff
changeset
|
54 def archivelist(ui, nodeid, url=None): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
55 allowed = ui.configlist(b'web', b'allow-archive', untrusted=True) |
37513
40a7c1dd2df9
hgweb: move archivelist() of hgwebdir to webutil
Yuya Nishihara <yuya@tcha.org>
parents:
37511
diff
changeset
|
56 archives = [] |
40a7c1dd2df9
hgweb: move archivelist() of hgwebdir to webutil
Yuya Nishihara <yuya@tcha.org>
parents:
37511
diff
changeset
|
57 |
48913
f254fc73d956
global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
58 for typ, spec in archivespecs.items(): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
59 if typ in allowed or ui.configbool( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
60 b'web', b'allow' + typ, untrusted=True |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
61 ): |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
62 archives.append( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
63 { |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
64 b'type': typ, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
65 b'extension': spec[2], |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
66 b'node': nodeid, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
67 b'url': url, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
68 } |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
69 ) |
37513
40a7c1dd2df9
hgweb: move archivelist() of hgwebdir to webutil
Yuya Nishihara <yuya@tcha.org>
parents:
37511
diff
changeset
|
70 |
37515
8a5ee6aa8870
hgweb: wrap {archives} with mappinglist
Yuya Nishihara <yuya@tcha.org>
parents:
37514
diff
changeset
|
71 return templateutil.mappinglist(archives) |
37513
40a7c1dd2df9
hgweb: move archivelist() of hgwebdir to webutil
Yuya Nishihara <yuya@tcha.org>
parents:
37511
diff
changeset
|
72 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
73 |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
74 def up(p): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
75 if p[0:1] != b"/": |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
76 p = b"/" + p |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
77 if p[-1:] == b"/": |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
78 p = p[:-1] |
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
79 up = os.path.dirname(p) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
80 if up == b"/": |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
81 return b"/" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
82 return up + b"/" |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
83 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
84 |
18391
833eb34e90e4
hgweb: better names for _navseq arguments
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18390
diff
changeset
|
85 def _navseq(step, firststep=None): |
833eb34e90e4
hgweb: better names for _navseq arguments
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18390
diff
changeset
|
86 if firststep: |
833eb34e90e4
hgweb: better names for _navseq arguments
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18390
diff
changeset
|
87 yield firststep |
833eb34e90e4
hgweb: better names for _navseq arguments
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18390
diff
changeset
|
88 if firststep >= 20 and firststep <= 40: |
18392
88a37b19dc0e
hgweb: ensure _navseq yield strictly increasing numbers
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18391
diff
changeset
|
89 firststep = 50 |
88a37b19dc0e
hgweb: ensure _navseq yield strictly increasing numbers
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18391
diff
changeset
|
90 yield firststep |
88a37b19dc0e
hgweb: ensure _navseq yield strictly increasing numbers
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18391
diff
changeset
|
91 assert step > 0 |
88a37b19dc0e
hgweb: ensure _navseq yield strictly increasing numbers
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18391
diff
changeset
|
92 assert firststep > 0 |
88a37b19dc0e
hgweb: ensure _navseq yield strictly increasing numbers
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18391
diff
changeset
|
93 while step <= firststep: |
88a37b19dc0e
hgweb: ensure _navseq yield strictly increasing numbers
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18391
diff
changeset
|
94 step *= 10 |
18390
28fa9443f751
hgweb: drop recursivity in _navseq
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18389
diff
changeset
|
95 while True: |
18391
833eb34e90e4
hgweb: better names for _navseq arguments
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18390
diff
changeset
|
96 yield 1 * step |
833eb34e90e4
hgweb: better names for _navseq arguments
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18390
diff
changeset
|
97 yield 3 * step |
833eb34e90e4
hgweb: better names for _navseq arguments
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18390
diff
changeset
|
98 step *= 10 |
18389
82572533bc00
hgweb: move the `seq` function out of the revnavgen scope
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18388
diff
changeset
|
99 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
100 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48913
diff
changeset
|
101 class revnav: |
18409
e3f5cef11d6a
hgweb: pass repo object to revnav construction
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18408
diff
changeset
|
102 def __init__(self, repo): |
18404
1da84a6b136a
hgweb: pass nodefunc to the revnav object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18403
diff
changeset
|
103 """Navigation generation object |
1da84a6b136a
hgweb: pass nodefunc to the revnav object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18403
diff
changeset
|
104 |
18409
e3f5cef11d6a
hgweb: pass repo object to revnav construction
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18408
diff
changeset
|
105 :repo: repo object we generate nav for |
18404
1da84a6b136a
hgweb: pass nodefunc to the revnav object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18403
diff
changeset
|
106 """ |
18409
e3f5cef11d6a
hgweb: pass repo object to revnav construction
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18408
diff
changeset
|
107 # used for hex generation |
e3f5cef11d6a
hgweb: pass repo object to revnav construction
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18408
diff
changeset
|
108 self._revlog = repo.changelog |
18404
1da84a6b136a
hgweb: pass nodefunc to the revnav object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18403
diff
changeset
|
109 |
18406
20cf53932b6f
hgweb: simplify the handling of empty repo
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18405
diff
changeset
|
110 def __nonzero__(self): |
20cf53932b6f
hgweb: simplify the handling of empty repo
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18405
diff
changeset
|
111 """return True if any revision to navigate over""" |
19094
fc1b77db123f
hgweb: handle filtered "0" rev in navigation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
19093
diff
changeset
|
112 return self._first() is not None |
fc1b77db123f
hgweb: handle filtered "0" rev in navigation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
19093
diff
changeset
|
113 |
31476
413b44003462
py3: add __bool__ to every class defining __nonzero__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31434
diff
changeset
|
114 __bool__ = __nonzero__ |
413b44003462
py3: add __bool__ to every class defining __nonzero__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31434
diff
changeset
|
115 |
19094
fc1b77db123f
hgweb: handle filtered "0" rev in navigation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
19093
diff
changeset
|
116 def _first(self): |
fc1b77db123f
hgweb: handle filtered "0" rev in navigation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
19093
diff
changeset
|
117 """return the minimum non-filtered changeset or None""" |
fc1b77db123f
hgweb: handle filtered "0" rev in navigation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
19093
diff
changeset
|
118 try: |
29216
ead25aa27a43
py3: convert to next() function
timeless <timeless@mozdev.org>
parents:
28709
diff
changeset
|
119 return next(iter(self._revlog)) |
19094
fc1b77db123f
hgweb: handle filtered "0" rev in navigation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
19093
diff
changeset
|
120 except StopIteration: |
fc1b77db123f
hgweb: handle filtered "0" rev in navigation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
19093
diff
changeset
|
121 return None |
18406
20cf53932b6f
hgweb: simplify the handling of empty repo
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18405
diff
changeset
|
122 |
18405
1eaf0d017b2c
hgweb: move hex creation into an object method
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18404
diff
changeset
|
123 def hex(self, rev): |
18409
e3f5cef11d6a
hgweb: pass repo object to revnav construction
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18408
diff
changeset
|
124 return hex(self._revlog.node(rev)) |
18405
1eaf0d017b2c
hgweb: move hex creation into an object method
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18404
diff
changeset
|
125 |
18404
1da84a6b136a
hgweb: pass nodefunc to the revnav object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18403
diff
changeset
|
126 def gen(self, pos, pagelen, limit): |
18403
bfaee31a83d2
hgweb: move revnavgen into an object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18392
diff
changeset
|
127 """computes label and revision id for navigation link |
18320
60680d691a0b
hgweb: document the revnavgen function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17991
diff
changeset
|
128 |
18403
bfaee31a83d2
hgweb: move revnavgen into an object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18392
diff
changeset
|
129 :pos: is the revision relative to which we generate navigation. |
bfaee31a83d2
hgweb: move revnavgen into an object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18392
diff
changeset
|
130 :pagelen: the size of each navigation page |
bfaee31a83d2
hgweb: move revnavgen into an object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18392
diff
changeset
|
131 :limit: how far shall we link |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
132 |
18403
bfaee31a83d2
hgweb: move revnavgen into an object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18392
diff
changeset
|
133 The return is: |
37698
7738ae638b62
hgweb: wrap {changenav} and {nav} with mappinglist
Yuya Nishihara <yuya@tcha.org>
parents:
37697
diff
changeset
|
134 - a single element mappinglist |
18403
bfaee31a83d2
hgweb: move revnavgen into an object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18392
diff
changeset
|
135 - containing a dictionary with a `before` and `after` key |
37697
6fb50e912aa8
hgweb: make revnav.gen() simply build a list of mappings by one pass
Yuya Nishihara <yuya@tcha.org>
parents:
37696
diff
changeset
|
136 - values are dictionaries with `label` and `node` keys |
18403
bfaee31a83d2
hgweb: move revnavgen into an object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18392
diff
changeset
|
137 """ |
18406
20cf53932b6f
hgweb: simplify the handling of empty repo
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18405
diff
changeset
|
138 if not self: |
20cf53932b6f
hgweb: simplify the handling of empty repo
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18405
diff
changeset
|
139 # empty repo |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
140 return templateutil.mappinglist( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
141 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
142 { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
143 b'before': templateutil.mappinglist([]), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
144 b'after': templateutil.mappinglist([]), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
145 }, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
146 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
147 ) |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
148 |
18425
6da1e979340a
hgweb: generate revnav in two phase
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18409
diff
changeset
|
149 targets = [] |
18403
bfaee31a83d2
hgweb: move revnavgen into an object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18392
diff
changeset
|
150 for f in _navseq(1, pagelen): |
bfaee31a83d2
hgweb: move revnavgen into an object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18392
diff
changeset
|
151 if f > limit: |
bfaee31a83d2
hgweb: move revnavgen into an object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18392
diff
changeset
|
152 break |
18425
6da1e979340a
hgweb: generate revnav in two phase
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18409
diff
changeset
|
153 targets.append(pos + f) |
6da1e979340a
hgweb: generate revnav in two phase
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18409
diff
changeset
|
154 targets.append(pos - f) |
6da1e979340a
hgweb: generate revnav in two phase
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18409
diff
changeset
|
155 targets.sort() |
6da1e979340a
hgweb: generate revnav in two phase
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18409
diff
changeset
|
156 |
19094
fc1b77db123f
hgweb: handle filtered "0" rev in navigation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
19093
diff
changeset
|
157 first = self._first() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
158 navbefore = [{b'label': b'(%i)' % first, b'node': self.hex(first)}] |
18425
6da1e979340a
hgweb: generate revnav in two phase
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18409
diff
changeset
|
159 navafter = [] |
6da1e979340a
hgweb: generate revnav in two phase
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18409
diff
changeset
|
160 for rev in targets: |
18426
01638b51df44
hgweb: ignore filtered revision in revnav
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18425
diff
changeset
|
161 if rev not in self._revlog: |
01638b51df44
hgweb: ignore filtered revision in revnav
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18425
diff
changeset
|
162 continue |
18425
6da1e979340a
hgweb: generate revnav in two phase
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18409
diff
changeset
|
163 if pos < rev < limit: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
164 navafter.append( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
165 {b'label': b'+%d' % abs(rev - pos), b'node': self.hex(rev)} |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
166 ) |
18425
6da1e979340a
hgweb: generate revnav in two phase
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18409
diff
changeset
|
167 if 0 < rev < pos: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
168 navbefore.append( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
169 {b'label': b'-%d' % abs(rev - pos), b'node': self.hex(rev)} |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
170 ) |
10254
8d5de52431f2
hgweb: changenav: separate pages before and after the current position
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
9402
diff
changeset
|
171 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
172 navafter.append({b'label': b'tip', b'node': b'tip'}) |
18403
bfaee31a83d2
hgweb: move revnavgen into an object
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18392
diff
changeset
|
173 |
37698
7738ae638b62
hgweb: wrap {changenav} and {nav} with mappinglist
Yuya Nishihara <yuya@tcha.org>
parents:
37697
diff
changeset
|
174 # TODO: maybe this can be a scalar object supporting tomap() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
175 return templateutil.mappinglist( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
176 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
177 { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
178 b'before': templateutil.mappinglist(navbefore), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
179 b'after': templateutil.mappinglist(navafter), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
180 }, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
181 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
182 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
183 |
6393
894875eae49b
hgweb: refactor hgweb code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6392
diff
changeset
|
184 |
18408
f332a64fef51
hgweb: introduction a filerevnav subclass
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18407
diff
changeset
|
185 class filerevnav(revnav): |
18409
e3f5cef11d6a
hgweb: pass repo object to revnav construction
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18408
diff
changeset
|
186 def __init__(self, repo, path): |
e3f5cef11d6a
hgweb: pass repo object to revnav construction
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18408
diff
changeset
|
187 """Navigation generation object |
e3f5cef11d6a
hgweb: pass repo object to revnav construction
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18408
diff
changeset
|
188 |
e3f5cef11d6a
hgweb: pass repo object to revnav construction
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18408
diff
changeset
|
189 :repo: repo object we generate nav for |
e3f5cef11d6a
hgweb: pass repo object to revnav construction
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18408
diff
changeset
|
190 :path: path of the file we generate nav for |
e3f5cef11d6a
hgweb: pass repo object to revnav construction
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18408
diff
changeset
|
191 """ |
e3f5cef11d6a
hgweb: pass repo object to revnav construction
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18408
diff
changeset
|
192 # used for iteration |
e3f5cef11d6a
hgweb: pass repo object to revnav construction
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18408
diff
changeset
|
193 self._changelog = repo.unfiltered().changelog |
e3f5cef11d6a
hgweb: pass repo object to revnav construction
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18408
diff
changeset
|
194 # used for hex generation |
e3f5cef11d6a
hgweb: pass repo object to revnav construction
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18408
diff
changeset
|
195 self._revlog = repo.file(path) |
e3f5cef11d6a
hgweb: pass repo object to revnav construction
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18408
diff
changeset
|
196 |
e3f5cef11d6a
hgweb: pass repo object to revnav construction
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18408
diff
changeset
|
197 def hex(self, rev): |
e3f5cef11d6a
hgweb: pass repo object to revnav construction
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18408
diff
changeset
|
198 return hex(self._changelog.node(self._revlog.linkrev(rev))) |
e3f5cef11d6a
hgweb: pass repo object to revnav construction
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18408
diff
changeset
|
199 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
200 |
37699
0e02eb838b96
hgweb: extract a generator function of _siblings class
Yuya Nishihara <yuya@tcha.org>
parents:
37698
diff
changeset
|
201 # TODO: maybe this can be a wrapper class for changectx/filectx list, which |
0e02eb838b96
hgweb: extract a generator function of _siblings class
Yuya Nishihara <yuya@tcha.org>
parents:
37698
diff
changeset
|
202 # yields {'ctx': ctx} |
37700
495fbeae63cc
hgweb: convert _siblings to a factory function of mappinggenerator
Yuya Nishihara <yuya@tcha.org>
parents:
37699
diff
changeset
|
203 def _ctxsgen(context, ctxs): |
37699
0e02eb838b96
hgweb: extract a generator function of _siblings class
Yuya Nishihara <yuya@tcha.org>
parents:
37698
diff
changeset
|
204 for s in ctxs: |
0e02eb838b96
hgweb: extract a generator function of _siblings class
Yuya Nishihara <yuya@tcha.org>
parents:
37698
diff
changeset
|
205 d = { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
206 b'node': s.hex(), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
207 b'rev': s.rev(), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
208 b'user': s.user(), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
209 b'date': s.date(), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
210 b'description': s.description(), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
211 b'branch': s.branch(), |
37699
0e02eb838b96
hgweb: extract a generator function of _siblings class
Yuya Nishihara <yuya@tcha.org>
parents:
37698
diff
changeset
|
212 } |
50928
d718eddf01d9
safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50916
diff
changeset
|
213 if hasattr(s, 'path'): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
214 d[b'file'] = s.path() |
37699
0e02eb838b96
hgweb: extract a generator function of _siblings class
Yuya Nishihara <yuya@tcha.org>
parents:
37698
diff
changeset
|
215 yield d |
0e02eb838b96
hgweb: extract a generator function of _siblings class
Yuya Nishihara <yuya@tcha.org>
parents:
37698
diff
changeset
|
216 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
217 |
37700
495fbeae63cc
hgweb: convert _siblings to a factory function of mappinggenerator
Yuya Nishihara <yuya@tcha.org>
parents:
37699
diff
changeset
|
218 def _siblings(siblings=None, hiderev=None): |
495fbeae63cc
hgweb: convert _siblings to a factory function of mappinggenerator
Yuya Nishihara <yuya@tcha.org>
parents:
37699
diff
changeset
|
219 if siblings is None: |
495fbeae63cc
hgweb: convert _siblings to a factory function of mappinggenerator
Yuya Nishihara <yuya@tcha.org>
parents:
37699
diff
changeset
|
220 siblings = [] |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46819
diff
changeset
|
221 siblings = [s for s in siblings if s.node() != s.repo().nullid] |
37700
495fbeae63cc
hgweb: convert _siblings to a factory function of mappinggenerator
Yuya Nishihara <yuya@tcha.org>
parents:
37699
diff
changeset
|
222 if len(siblings) == 1 and siblings[0].rev() == hiderev: |
495fbeae63cc
hgweb: convert _siblings to a factory function of mappinggenerator
Yuya Nishihara <yuya@tcha.org>
parents:
37699
diff
changeset
|
223 siblings = [] |
495fbeae63cc
hgweb: convert _siblings to a factory function of mappinggenerator
Yuya Nishihara <yuya@tcha.org>
parents:
37699
diff
changeset
|
224 return templateutil.mappinggenerator(_ctxsgen, args=(siblings,)) |
6392
2540521dc7c1
hgweb: separate out utility functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
225 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
226 |
34390
f6492f482c60
hgweb: query string arguments to control whitespace for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34246
diff
changeset
|
227 def difffeatureopts(req, ui, section): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
228 diffopts = diffutil.difffeatureopts( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
229 ui, untrusted=True, section=section, whitespace=True |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
230 ) |
34390
f6492f482c60
hgweb: query string arguments to control whitespace for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34246
diff
changeset
|
231 |
50916
98b8836d0e82
hgweb: use sysstr to set attribute on diff option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50580
diff
changeset
|
232 for kb, ks in ( |
98b8836d0e82
hgweb: use sysstr to set attribute on diff option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50580
diff
changeset
|
233 (b'ignorews', 'ignorews'), |
98b8836d0e82
hgweb: use sysstr to set attribute on diff option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50580
diff
changeset
|
234 (b'ignorewsamount', 'ignorewsamount'), |
98b8836d0e82
hgweb: use sysstr to set attribute on diff option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50580
diff
changeset
|
235 (b'ignorewseol', 'ignorewseol'), |
98b8836d0e82
hgweb: use sysstr to set attribute on diff option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50580
diff
changeset
|
236 (b'ignoreblanklines', 'ignoreblanklines'), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
237 ): |
50916
98b8836d0e82
hgweb: use sysstr to set attribute on diff option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50580
diff
changeset
|
238 v = req.qsparams.get(kb) |
34390
f6492f482c60
hgweb: query string arguments to control whitespace for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34246
diff
changeset
|
239 if v is not None: |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
37069
diff
changeset
|
240 v = stringutil.parsebool(v) |
50916
98b8836d0e82
hgweb: use sysstr to set attribute on diff option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50580
diff
changeset
|
241 setattr(diffopts, ks, v if v is not None else True) |
34390
f6492f482c60
hgweb: query string arguments to control whitespace for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34246
diff
changeset
|
242 |
f6492f482c60
hgweb: query string arguments to control whitespace for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34246
diff
changeset
|
243 return diffopts |
f6492f482c60
hgweb: query string arguments to control whitespace for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34246
diff
changeset
|
244 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
245 |
34390
f6492f482c60
hgweb: query string arguments to control whitespace for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34246
diff
changeset
|
246 def annotate(req, fctx, ui): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
247 diffopts = difffeatureopts(req, ui, b'annotate') |
37065
b235bde38a83
annotate: drop linenumber flag from fctx.annotate() (API)
Yuya Nishihara <yuya@tcha.org>
parents:
37019
diff
changeset
|
248 return fctx.annotate(follow=True, diffopts=diffopts) |
30081
dd0ff715a82c
hgweb: make fctx.annotate a separated function so it could be wrapped
Jun Wu <quark@fb.com>
parents:
29216
diff
changeset
|
249 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
250 |
7671
06cf09c822c4
hgweb: simplify parents/children generation code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7637
diff
changeset
|
251 def parents(ctx, hide=None): |
24136
46d6cdfce4bf
hgweb: use introrev() for finding parents (issue4506)
Anton Shestakov <engored@ya.ru>
parents:
23745
diff
changeset
|
252 if isinstance(ctx, context.basefilectx): |
46d6cdfce4bf
hgweb: use introrev() for finding parents (issue4506)
Anton Shestakov <engored@ya.ru>
parents:
23745
diff
changeset
|
253 introrev = ctx.introrev() |
46d6cdfce4bf
hgweb: use introrev() for finding parents (issue4506)
Anton Shestakov <engored@ya.ru>
parents:
23745
diff
changeset
|
254 if ctx.changectx().rev() != introrev: |
24340
567ae5365754
hgweb: replace 'ctx._repo' with 'ctx.repo()'
Matt Harbison <matt_harbison@yahoo.com>
parents:
24306
diff
changeset
|
255 return _siblings([ctx.repo()[introrev]], hide) |
7671
06cf09c822c4
hgweb: simplify parents/children generation code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7637
diff
changeset
|
256 return _siblings(ctx.parents(), hide) |
06cf09c822c4
hgweb: simplify parents/children generation code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7637
diff
changeset
|
257 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
258 |
7671
06cf09c822c4
hgweb: simplify parents/children generation code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7637
diff
changeset
|
259 def children(ctx, hide=None): |
06cf09c822c4
hgweb: simplify parents/children generation code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7637
diff
changeset
|
260 return _siblings(ctx.children(), hide) |
06cf09c822c4
hgweb: simplify parents/children generation code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7637
diff
changeset
|
261 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
262 |
6434
62e0bb41e682
hgweb: minor improvements for new web style
Matt Mackall <mpm@selenic.com>
parents:
6413
diff
changeset
|
263 def renamelink(fctx): |
6437 | 264 r = fctx.renamed() |
6392
2540521dc7c1
hgweb: separate out utility functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
265 if r: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
266 return templateutil.mappinglist([{b'file': r[0], b'node': hex(r[1])}]) |
37902
2095331ff926
hgweb: wrap {rename} with mappinglist
Yuya Nishihara <yuya@tcha.org>
parents:
37700
diff
changeset
|
267 return templateutil.mappinglist([]) |
6392
2540521dc7c1
hgweb: separate out utility functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
268 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
269 |
6392
2540521dc7c1
hgweb: separate out utility functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
270 def nodetagsdict(repo, node): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
271 return templateutil.hybridlist(repo.nodetags(node), name=b'name') |
6392
2540521dc7c1
hgweb: separate out utility functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
272 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
273 |
13596
270f57d35525
hgweb: add display of bookmarks for changelog and changeset
Alexander Solovyov <alexander@solovyov.net>
parents:
12691
diff
changeset
|
274 def nodebookmarksdict(repo, node): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
275 return templateutil.hybridlist(repo.nodebookmarks(node), name=b'name') |
13596
270f57d35525
hgweb: add display of bookmarks for changelog and changeset
Alexander Solovyov <alexander@solovyov.net>
parents:
12691
diff
changeset
|
276 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
277 |
6392
2540521dc7c1
hgweb: separate out utility functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
278 def nodebranchdict(repo, ctx): |
2540521dc7c1
hgweb: separate out utility functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
279 branches = [] |
2540521dc7c1
hgweb: separate out utility functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
280 branch = ctx.branch() |
2540521dc7c1
hgweb: separate out utility functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
281 # If this is an empty repo, ctx.node() == nullid, |
16719
e7bf09acd410
localrepo: add branchtip() method for faster single-branch lookups
Brodie Rao <brodie@sf.io>
parents:
16308
diff
changeset
|
282 # ctx.branch() == 'default'. |
e7bf09acd410
localrepo: add branchtip() method for faster single-branch lookups
Brodie Rao <brodie@sf.io>
parents:
16308
diff
changeset
|
283 try: |
e7bf09acd410
localrepo: add branchtip() method for faster single-branch lookups
Brodie Rao <brodie@sf.io>
parents:
16308
diff
changeset
|
284 branchnode = repo.branchtip(branch) |
e7bf09acd410
localrepo: add branchtip() method for faster single-branch lookups
Brodie Rao <brodie@sf.io>
parents:
16308
diff
changeset
|
285 except error.RepoLookupError: |
e7bf09acd410
localrepo: add branchtip() method for faster single-branch lookups
Brodie Rao <brodie@sf.io>
parents:
16308
diff
changeset
|
286 branchnode = None |
e7bf09acd410
localrepo: add branchtip() method for faster single-branch lookups
Brodie Rao <brodie@sf.io>
parents:
16308
diff
changeset
|
287 if branchnode == ctx.node(): |
37905
f5155bca5023
hgweb: wrap {branches} by hybridlist()
Yuya Nishihara <yuya@tcha.org>
parents:
37904
diff
changeset
|
288 branches.append(branch) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
289 return templateutil.hybridlist(branches, name=b'name') |
6392
2540521dc7c1
hgweb: separate out utility functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
290 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
291 |
6392
2540521dc7c1
hgweb: separate out utility functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
292 def nodeinbranch(repo, ctx): |
2540521dc7c1
hgweb: separate out utility functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
293 branches = [] |
2540521dc7c1
hgweb: separate out utility functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
294 branch = ctx.branch() |
16719
e7bf09acd410
localrepo: add branchtip() method for faster single-branch lookups
Brodie Rao <brodie@sf.io>
parents:
16308
diff
changeset
|
295 try: |
e7bf09acd410
localrepo: add branchtip() method for faster single-branch lookups
Brodie Rao <brodie@sf.io>
parents:
16308
diff
changeset
|
296 branchnode = repo.branchtip(branch) |
e7bf09acd410
localrepo: add branchtip() method for faster single-branch lookups
Brodie Rao <brodie@sf.io>
parents:
16308
diff
changeset
|
297 except error.RepoLookupError: |
e7bf09acd410
localrepo: add branchtip() method for faster single-branch lookups
Brodie Rao <brodie@sf.io>
parents:
16308
diff
changeset
|
298 branchnode = None |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
299 if branch != b'default' and branchnode != ctx.node(): |
37906
a5d16f23a2c9
hgweb: wrap {inbranch} by hybridlist()
Yuya Nishihara <yuya@tcha.org>
parents:
37905
diff
changeset
|
300 branches.append(branch) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
301 return templateutil.hybridlist(branches, name=b'name') |
6392
2540521dc7c1
hgweb: separate out utility functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
302 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
303 |
6392
2540521dc7c1
hgweb: separate out utility functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
304 def nodebranchnodefault(ctx): |
2540521dc7c1
hgweb: separate out utility functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
305 branches = [] |
2540521dc7c1
hgweb: separate out utility functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
306 branch = ctx.branch() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
307 if branch != b'default': |
37907
3b3d818bde8b
hgweb: wrap {branch} and {changesetbranch} by hybridlist()
Yuya Nishihara <yuya@tcha.org>
parents:
37906
diff
changeset
|
308 branches.append(branch) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
309 return templateutil.hybridlist(branches, name=b'name') |
6392
2540521dc7c1
hgweb: separate out utility functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
310 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
311 |
37911
26aed0d561e8
hgweb: wrap {changelogtag}, {changesettag}, and {changesetbookmark}
Yuya Nishihara <yuya@tcha.org>
parents:
37910
diff
changeset
|
312 def _nodenamesgen(context, f, node, name): |
26aed0d561e8
hgweb: wrap {changelogtag}, {changesettag}, and {changesetbookmark}
Yuya Nishihara <yuya@tcha.org>
parents:
37910
diff
changeset
|
313 for t in f(node): |
26aed0d561e8
hgweb: wrap {changelogtag}, {changesettag}, and {changesetbookmark}
Yuya Nishihara <yuya@tcha.org>
parents:
37910
diff
changeset
|
314 yield {name: t} |
26aed0d561e8
hgweb: wrap {changelogtag}, {changesettag}, and {changesetbookmark}
Yuya Nishihara <yuya@tcha.org>
parents:
37910
diff
changeset
|
315 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
316 |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46819
diff
changeset
|
317 def showtag(repo, t1, node=None): |
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46819
diff
changeset
|
318 if node is None: |
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46819
diff
changeset
|
319 node = repo.nullid |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
320 args = (repo.nodetags, node, b'tag') |
37911
26aed0d561e8
hgweb: wrap {changelogtag}, {changesettag}, and {changesetbookmark}
Yuya Nishihara <yuya@tcha.org>
parents:
37910
diff
changeset
|
321 return templateutil.mappinggenerator(_nodenamesgen, args=args, name=t1) |
6392
2540521dc7c1
hgweb: separate out utility functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
322 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
323 |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46819
diff
changeset
|
324 def showbookmark(repo, t1, node=None): |
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46819
diff
changeset
|
325 if node is None: |
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46819
diff
changeset
|
326 node = repo.nullid |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
327 args = (repo.nodebookmarks, node, b'bookmark') |
37911
26aed0d561e8
hgweb: wrap {changelogtag}, {changesettag}, and {changesetbookmark}
Yuya Nishihara <yuya@tcha.org>
parents:
37910
diff
changeset
|
328 return templateutil.mappinggenerator(_nodenamesgen, args=args, name=t1) |
13596
270f57d35525
hgweb: add display of bookmarks for changelog and changeset
Alexander Solovyov <alexander@solovyov.net>
parents:
12691
diff
changeset
|
329 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
330 |
26129
a103ecb8a04a
hgweb: move branchentries code from webcommands to webutil
Anton Shestakov <av6@dwimlabs.net>
parents:
25999
diff
changeset
|
331 def branchentries(repo, stripecount, limit=0): |
a103ecb8a04a
hgweb: move branchentries code from webcommands to webutil
Anton Shestakov <av6@dwimlabs.net>
parents:
25999
diff
changeset
|
332 tips = [] |
a103ecb8a04a
hgweb: move branchentries code from webcommands to webutil
Anton Shestakov <av6@dwimlabs.net>
parents:
25999
diff
changeset
|
333 heads = repo.heads() |
a103ecb8a04a
hgweb: move branchentries code from webcommands to webutil
Anton Shestakov <av6@dwimlabs.net>
parents:
25999
diff
changeset
|
334 parity = paritygen(stripecount) |
a103ecb8a04a
hgweb: move branchentries code from webcommands to webutil
Anton Shestakov <av6@dwimlabs.net>
parents:
25999
diff
changeset
|
335 sortkey = lambda item: (not item[1], item[0].rev()) |
a103ecb8a04a
hgweb: move branchentries code from webcommands to webutil
Anton Shestakov <av6@dwimlabs.net>
parents:
25999
diff
changeset
|
336 |
37913
89db78126f7f
hgweb: wrap {branches} and {entries} of branches with mappinggenerator
Yuya Nishihara <yuya@tcha.org>
parents:
37912
diff
changeset
|
337 def entries(context): |
26129
a103ecb8a04a
hgweb: move branchentries code from webcommands to webutil
Anton Shestakov <av6@dwimlabs.net>
parents:
25999
diff
changeset
|
338 count = 0 |
a103ecb8a04a
hgweb: move branchentries code from webcommands to webutil
Anton Shestakov <av6@dwimlabs.net>
parents:
25999
diff
changeset
|
339 if not tips: |
a103ecb8a04a
hgweb: move branchentries code from webcommands to webutil
Anton Shestakov <av6@dwimlabs.net>
parents:
25999
diff
changeset
|
340 for tag, hs, tip, closed in repo.branchmap().iterbranches(): |
a103ecb8a04a
hgweb: move branchentries code from webcommands to webutil
Anton Shestakov <av6@dwimlabs.net>
parents:
25999
diff
changeset
|
341 tips.append((repo[tip], closed)) |
a103ecb8a04a
hgweb: move branchentries code from webcommands to webutil
Anton Shestakov <av6@dwimlabs.net>
parents:
25999
diff
changeset
|
342 for ctx, closed in sorted(tips, key=sortkey, reverse=True): |
a103ecb8a04a
hgweb: move branchentries code from webcommands to webutil
Anton Shestakov <av6@dwimlabs.net>
parents:
25999
diff
changeset
|
343 if limit > 0 and count >= limit: |
a103ecb8a04a
hgweb: move branchentries code from webcommands to webutil
Anton Shestakov <av6@dwimlabs.net>
parents:
25999
diff
changeset
|
344 return |
a103ecb8a04a
hgweb: move branchentries code from webcommands to webutil
Anton Shestakov <av6@dwimlabs.net>
parents:
25999
diff
changeset
|
345 count += 1 |
a103ecb8a04a
hgweb: move branchentries code from webcommands to webutil
Anton Shestakov <av6@dwimlabs.net>
parents:
25999
diff
changeset
|
346 if closed: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
347 status = b'closed' |
26129
a103ecb8a04a
hgweb: move branchentries code from webcommands to webutil
Anton Shestakov <av6@dwimlabs.net>
parents:
25999
diff
changeset
|
348 elif ctx.node() not in heads: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
349 status = b'inactive' |
26129
a103ecb8a04a
hgweb: move branchentries code from webcommands to webutil
Anton Shestakov <av6@dwimlabs.net>
parents:
25999
diff
changeset
|
350 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
351 status = b'open' |
26129
a103ecb8a04a
hgweb: move branchentries code from webcommands to webutil
Anton Shestakov <av6@dwimlabs.net>
parents:
25999
diff
changeset
|
352 yield { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
353 b'parity': next(parity), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
354 b'branch': ctx.branch(), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
355 b'status': status, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
356 b'node': ctx.hex(), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
357 b'date': ctx.date(), |
26129
a103ecb8a04a
hgweb: move branchentries code from webcommands to webutil
Anton Shestakov <av6@dwimlabs.net>
parents:
25999
diff
changeset
|
358 } |
a103ecb8a04a
hgweb: move branchentries code from webcommands to webutil
Anton Shestakov <av6@dwimlabs.net>
parents:
25999
diff
changeset
|
359 |
37913
89db78126f7f
hgweb: wrap {branches} and {entries} of branches with mappinggenerator
Yuya Nishihara <yuya@tcha.org>
parents:
37912
diff
changeset
|
360 return templateutil.mappinggenerator(entries) |
26129
a103ecb8a04a
hgweb: move branchentries code from webcommands to webutil
Anton Shestakov <av6@dwimlabs.net>
parents:
25999
diff
changeset
|
361 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
362 |
6392
2540521dc7c1
hgweb: separate out utility functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
363 def cleanpath(repo, path): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
364 path = path.lstrip(b'/') |
39471
15e8250a82da
hgweb: do not audit URL path as working-directory path
Yuya Nishihara <yuya@tcha.org>
parents:
38929
diff
changeset
|
365 auditor = pathutil.pathauditor(repo.root, realfs=False) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
366 return pathutil.canonpath(repo.root, b'', path, auditor=auditor) |
6392
2540521dc7c1
hgweb: separate out utility functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
367 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
368 |
25999
1c75249e159b
style: adjust whitespaces in webutil.py
Anton Shestakov <av6@dwimlabs.net>
parents:
25778
diff
changeset
|
369 def changectx(repo, req): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
370 changeid = b"tip" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
371 if b'node' in req.qsparams: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
372 changeid = req.qsparams[b'node'] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
373 ipos = changeid.find(b':') |
17991
d605a82cf189
hgweb: display diff for a changeset against any parents (issue2810)
Weiwen <weiwen@fb.com>
parents:
17302
diff
changeset
|
374 if ipos != -1: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
375 changeid = changeid[(ipos + 1) :] |
17991
d605a82cf189
hgweb: display diff for a changeset against any parents (issue2810)
Weiwen <weiwen@fb.com>
parents:
17302
diff
changeset
|
376 |
37335
956260cbc564
hgweb: use revsymbol() for creating context from changeid
Martin von Zweigbergk <martinvonz@google.com>
parents:
37334
diff
changeset
|
377 return scmutil.revsymbol(repo, changeid) |
17991
d605a82cf189
hgweb: display diff for a changeset against any parents (issue2810)
Weiwen <weiwen@fb.com>
parents:
17302
diff
changeset
|
378 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
379 |
17991
d605a82cf189
hgweb: display diff for a changeset against any parents (issue2810)
Weiwen <weiwen@fb.com>
parents:
17302
diff
changeset
|
380 def basechangectx(repo, req): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
381 if b'node' in req.qsparams: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
382 changeid = req.qsparams[b'node'] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
383 ipos = changeid.find(b':') |
17991
d605a82cf189
hgweb: display diff for a changeset against any parents (issue2810)
Weiwen <weiwen@fb.com>
parents:
17302
diff
changeset
|
384 if ipos != -1: |
d605a82cf189
hgweb: display diff for a changeset against any parents (issue2810)
Weiwen <weiwen@fb.com>
parents:
17302
diff
changeset
|
385 changeid = changeid[:ipos] |
37335
956260cbc564
hgweb: use revsymbol() for creating context from changeid
Martin von Zweigbergk <martinvonz@google.com>
parents:
37334
diff
changeset
|
386 return scmutil.revsymbol(repo, changeid) |
17991
d605a82cf189
hgweb: display diff for a changeset against any parents (issue2810)
Weiwen <weiwen@fb.com>
parents:
17302
diff
changeset
|
387 |
d605a82cf189
hgweb: display diff for a changeset against any parents (issue2810)
Weiwen <weiwen@fb.com>
parents:
17302
diff
changeset
|
388 return None |
d605a82cf189
hgweb: display diff for a changeset against any parents (issue2810)
Weiwen <weiwen@fb.com>
parents:
17302
diff
changeset
|
389 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
390 |
6392
2540521dc7c1
hgweb: separate out utility functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
391 def filectx(repo, req): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
392 if b'file' not in req.qsparams: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
393 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
|
394 path = cleanpath(repo, req.qsparams[b'file']) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
395 if b'node' in req.qsparams: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
396 changeid = req.qsparams[b'node'] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
397 elif b'filenode' in req.qsparams: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
398 changeid = req.qsparams[b'filenode'] |
6392
2540521dc7c1
hgweb: separate out utility functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
399 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
400 raise ErrorResponse(HTTP_NOT_FOUND, b'node or filenode not given') |
6392
2540521dc7c1
hgweb: separate out utility functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
401 try: |
37335
956260cbc564
hgweb: use revsymbol() for creating context from changeid
Martin von Zweigbergk <martinvonz@google.com>
parents:
37334
diff
changeset
|
402 fctx = scmutil.revsymbol(repo, changeid)[path] |
7637 | 403 except error.RepoError: |
6392
2540521dc7c1
hgweb: separate out utility functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
404 fctx = repo.filectx(path, fileid=changeid) |
2540521dc7c1
hgweb: separate out utility functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
405 |
2540521dc7c1
hgweb: separate out utility functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
406 return fctx |
7310
bd522d09d5e3
hgweb: move the diffs() generator into webutil
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7294
diff
changeset
|
407 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
408 |
31665
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31660
diff
changeset
|
409 def linerange(req): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
410 linerange = req.qsparams.getall(b'linerange') |
36865
3d60a22e27f5
hgweb: perform all parameter lookup via qsparams
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36863
diff
changeset
|
411 if not linerange: |
31665
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31660
diff
changeset
|
412 return None |
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31660
diff
changeset
|
413 if len(linerange) > 1: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
414 raise ErrorResponse(HTTP_BAD_REQUEST, b'redundant linerange parameter') |
31665
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31660
diff
changeset
|
415 try: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
416 fromline, toline = map(int, linerange[0].split(b':', 1)) |
31665
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31660
diff
changeset
|
417 except ValueError: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
418 raise ErrorResponse(HTTP_BAD_REQUEST, b'invalid linerange parameter') |
31665
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31660
diff
changeset
|
419 try: |
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31660
diff
changeset
|
420 return util.processlinerange(fromline, toline) |
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31660
diff
changeset
|
421 except error.ParseError as exc: |
36258
af0a19d8812b
py3: get bytes-repr of network errors portably
Augie Fackler <augie@google.com>
parents:
36183
diff
changeset
|
422 raise ErrorResponse(HTTP_BAD_REQUEST, pycompat.bytestr(exc)) |
31665
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31660
diff
changeset
|
423 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
424 |
31665
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31660
diff
changeset
|
425 def formatlinerange(fromline, toline): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
426 return b'%d:%d' % (fromline + 1, toline) |
31665
5e6d44511317
hgweb: handle a "linerange" request parameter in filelog command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31660
diff
changeset
|
427 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
428 |
37914
10d3dc8123c5
hgweb: wrap {succsandmarkers} with mappinggenerator
Yuya Nishihara <yuya@tcha.org>
parents:
37913
diff
changeset
|
429 def _succsandmarkersgen(context, mapping): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
430 repo = context.resource(mapping, b'repo') |
37503
49a8c2cc7978
templatekw: fix return type of {succsandmarkers} (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
37335
diff
changeset
|
431 itemmappings = templatekw.showsuccsandmarkers(context, mapping) |
49a8c2cc7978
templatekw: fix return type of {succsandmarkers} (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
37335
diff
changeset
|
432 for item in itemmappings.tovalue(context, mapping): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
433 item[b'successors'] = _siblings( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
434 repo[successor] for successor in item[b'successors'] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
435 ) |
35486
4c7ae95e1c71
hgweb: link to successors of obsoleted changesets
Anton Shestakov <av6@dwimlabs.net>
parents:
35485
diff
changeset
|
436 yield item |
35485
1721ce06100a
hgweb: display fate of obsolete changesets
Anton Shestakov <av6@dwimlabs.net>
parents:
35454
diff
changeset
|
437 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
438 |
37914
10d3dc8123c5
hgweb: wrap {succsandmarkers} with mappinggenerator
Yuya Nishihara <yuya@tcha.org>
parents:
37913
diff
changeset
|
439 def succsandmarkers(context, mapping): |
10d3dc8123c5
hgweb: wrap {succsandmarkers} with mappinggenerator
Yuya Nishihara <yuya@tcha.org>
parents:
37913
diff
changeset
|
440 return templateutil.mappinggenerator(_succsandmarkersgen, args=(mapping,)) |
10d3dc8123c5
hgweb: wrap {succsandmarkers} with mappinggenerator
Yuya Nishihara <yuya@tcha.org>
parents:
37913
diff
changeset
|
441 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
442 |
36594
59ee648870a7
templatekw: switch obsfate-related template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents:
36518
diff
changeset
|
443 # teach templater succsandmarkers is switched to (context, mapping) API |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
444 succsandmarkers._requires = {b'repo', b'ctx'} |
36594
59ee648870a7
templatekw: switch obsfate-related template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents:
36518
diff
changeset
|
445 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
446 |
37915
3dc4045db164
hgweb: wrap {whyunstable} with mappinggenerator
Yuya Nishihara <yuya@tcha.org>
parents:
37914
diff
changeset
|
447 def _whyunstablegen(context, mapping): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
448 repo = context.resource(mapping, b'repo') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
449 ctx = context.resource(mapping, b'ctx') |
36955
f21798a6bc20
hgweb: explain instabilities of unstable changesets
Anton Shestakov <av6@dwimlabs.net>
parents:
36886
diff
changeset
|
450 |
f21798a6bc20
hgweb: explain instabilities of unstable changesets
Anton Shestakov <av6@dwimlabs.net>
parents:
36886
diff
changeset
|
451 entries = obsutil.whyunstable(repo, ctx) |
f21798a6bc20
hgweb: explain instabilities of unstable changesets
Anton Shestakov <av6@dwimlabs.net>
parents:
36886
diff
changeset
|
452 for entry in entries: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
453 if entry.get(b'divergentnodes'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
454 entry[b'divergentnodes'] = _siblings(entry[b'divergentnodes']) |
36955
f21798a6bc20
hgweb: explain instabilities of unstable changesets
Anton Shestakov <av6@dwimlabs.net>
parents:
36886
diff
changeset
|
455 yield entry |
f21798a6bc20
hgweb: explain instabilities of unstable changesets
Anton Shestakov <av6@dwimlabs.net>
parents:
36886
diff
changeset
|
456 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
457 |
37915
3dc4045db164
hgweb: wrap {whyunstable} with mappinggenerator
Yuya Nishihara <yuya@tcha.org>
parents:
37914
diff
changeset
|
458 def whyunstable(context, mapping): |
3dc4045db164
hgweb: wrap {whyunstable} with mappinggenerator
Yuya Nishihara <yuya@tcha.org>
parents:
37914
diff
changeset
|
459 return templateutil.mappinggenerator(_whyunstablegen, args=(mapping,)) |
3dc4045db164
hgweb: wrap {whyunstable} with mappinggenerator
Yuya Nishihara <yuya@tcha.org>
parents:
37914
diff
changeset
|
460 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
461 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
462 whyunstable._requires = {b'repo', b'ctx'} |
36955
f21798a6bc20
hgweb: explain instabilities of unstable changesets
Anton Shestakov <av6@dwimlabs.net>
parents:
36886
diff
changeset
|
463 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
464 |
27294
5aa2afb4f81a
hgweb: move entry-preparing code from webcommands to webutils.commonentry()
Anton Shestakov <av6@dwimlabs.net>
parents:
27046
diff
changeset
|
465 def commonentry(repo, ctx): |
39794
4f44f747f094
hgweb: use scmutil.binnode() to translate None to wdir hash (issue5988)
Yuya Nishihara <yuya@tcha.org>
parents:
39471
diff
changeset
|
466 node = scmutil.binnode(ctx) |
27294
5aa2afb4f81a
hgweb: move entry-preparing code from webcommands to webutils.commonentry()
Anton Shestakov <av6@dwimlabs.net>
parents:
27046
diff
changeset
|
467 return { |
36518
7937850a523d
hgweb: make templater mostly compatible with log templates
Yuya Nishihara <yuya@tcha.org>
parents:
36434
diff
changeset
|
468 # TODO: perhaps ctx.changectx() should be assigned if ctx is a |
7937850a523d
hgweb: make templater mostly compatible with log templates
Yuya Nishihara <yuya@tcha.org>
parents:
36434
diff
changeset
|
469 # filectx, but I'm not pretty sure if that would always work because |
7937850a523d
hgweb: make templater mostly compatible with log templates
Yuya Nishihara <yuya@tcha.org>
parents:
36434
diff
changeset
|
470 # fctx.parents() != fctx.changectx.parents() for example. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
471 b'ctx': ctx, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
472 b'rev': ctx.rev(), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
473 b'node': hex(node), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
474 b'author': ctx.user(), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
475 b'desc': ctx.description(), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
476 b'date': ctx.date(), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
477 b'extra': ctx.extra(), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
478 b'phase': ctx.phasestr(), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
479 b'obsolete': ctx.obsolete(), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
480 b'succsandmarkers': succsandmarkers, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
481 b'instabilities': templateutil.hybridlist( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
482 ctx.instabilities(), name=b'instability' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
483 ), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
484 b'whyunstable': whyunstable, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
485 b'branch': nodebranchnodefault(ctx), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
486 b'inbranch': nodeinbranch(repo, ctx), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
487 b'branches': nodebranchdict(repo, ctx), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
488 b'tags': nodetagsdict(repo, node), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
489 b'bookmarks': nodebookmarksdict(repo, node), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
490 b'parent': lambda context, mapping: parents(ctx), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
491 b'child': lambda context, mapping: children(ctx), |
27294
5aa2afb4f81a
hgweb: move entry-preparing code from webcommands to webutils.commonentry()
Anton Shestakov <av6@dwimlabs.net>
parents:
27046
diff
changeset
|
492 } |
5aa2afb4f81a
hgweb: move entry-preparing code from webcommands to webutils.commonentry()
Anton Shestakov <av6@dwimlabs.net>
parents:
27046
diff
changeset
|
493 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
494 |
36885
c68e79dcf21c
hgweb: don't redundantly pass templater with requestcontext (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36865
diff
changeset
|
495 def changelistentry(web, ctx): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44345
diff
changeset
|
496 """Obtain a dictionary to be used for entries in a changelist. |
23745
513d47905114
hgweb: extract changelist entry generation into own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21122
diff
changeset
|
497 |
513d47905114
hgweb: extract changelist entry generation into own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21122
diff
changeset
|
498 This function is called when producing items for the "entries" list passed |
513d47905114
hgweb: extract changelist entry generation into own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21122
diff
changeset
|
499 to the "shortlog" and "changelog" templates. |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44345
diff
changeset
|
500 """ |
23745
513d47905114
hgweb: extract changelist entry generation into own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21122
diff
changeset
|
501 repo = web.repo |
513d47905114
hgweb: extract changelist entry generation into own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21122
diff
changeset
|
502 rev = ctx.rev() |
39794
4f44f747f094
hgweb: use scmutil.binnode() to translate None to wdir hash (issue5988)
Yuya Nishihara <yuya@tcha.org>
parents:
39471
diff
changeset
|
503 n = scmutil.binnode(ctx) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
504 showtags = showtag(repo, b'changelogtag', n) |
37954
9482498b96b0
hgweb: remove unused argument 'tmpl' from listfilediffs()
Yuya Nishihara <yuya@tcha.org>
parents:
37953
diff
changeset
|
505 files = listfilediffs(ctx.files(), n, web.maxfiles) |
23745
513d47905114
hgweb: extract changelist entry generation into own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21122
diff
changeset
|
506 |
27294
5aa2afb4f81a
hgweb: move entry-preparing code from webcommands to webutils.commonentry()
Anton Shestakov <av6@dwimlabs.net>
parents:
27046
diff
changeset
|
507 entry = commonentry(repo, ctx) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
508 entry.update( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
509 { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
510 b'allparents': lambda context, mapping: parents(ctx), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
511 b'parent': lambda context, mapping: parents(ctx, rev - 1), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
512 b'child': lambda context, mapping: children(ctx, rev + 1), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
513 b'changelogtag': showtags, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
514 b'files': files, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
515 } |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
516 ) |
27294
5aa2afb4f81a
hgweb: move entry-preparing code from webcommands to webutils.commonentry()
Anton Shestakov <av6@dwimlabs.net>
parents:
27046
diff
changeset
|
517 return entry |
23745
513d47905114
hgweb: extract changelist entry generation into own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21122
diff
changeset
|
518 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
519 |
38043
5989261a8356
hgweb: extract code for emitting multiple changelist records
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37993
diff
changeset
|
520 def changelistentries(web, revs, maxcount, parityfn): |
5989261a8356
hgweb: extract code for emitting multiple changelist records
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37993
diff
changeset
|
521 """Emit up to N records for an iterable of revisions.""" |
5989261a8356
hgweb: extract code for emitting multiple changelist records
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37993
diff
changeset
|
522 repo = web.repo |
5989261a8356
hgweb: extract code for emitting multiple changelist records
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37993
diff
changeset
|
523 |
5989261a8356
hgweb: extract code for emitting multiple changelist records
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37993
diff
changeset
|
524 count = 0 |
5989261a8356
hgweb: extract code for emitting multiple changelist records
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37993
diff
changeset
|
525 for rev in revs: |
5989261a8356
hgweb: extract code for emitting multiple changelist records
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37993
diff
changeset
|
526 if count >= maxcount: |
5989261a8356
hgweb: extract code for emitting multiple changelist records
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37993
diff
changeset
|
527 break |
5989261a8356
hgweb: extract code for emitting multiple changelist records
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37993
diff
changeset
|
528 |
5989261a8356
hgweb: extract code for emitting multiple changelist records
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37993
diff
changeset
|
529 count += 1 |
5989261a8356
hgweb: extract code for emitting multiple changelist records
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37993
diff
changeset
|
530 |
5989261a8356
hgweb: extract code for emitting multiple changelist records
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37993
diff
changeset
|
531 entry = changelistentry(web, repo[rev]) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
532 entry[b'parity'] = next(parityfn) |
38043
5989261a8356
hgweb: extract code for emitting multiple changelist records
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37993
diff
changeset
|
533 |
5989261a8356
hgweb: extract code for emitting multiple changelist records
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37993
diff
changeset
|
534 yield entry |
5989261a8356
hgweb: extract code for emitting multiple changelist records
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37993
diff
changeset
|
535 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
536 |
25602
85fb416f2fa7
hgweb: provide symrev (symbolic revision) property to the templates
Anton Shestakov <av6@dwimlabs.net>
parents:
25278
diff
changeset
|
537 def symrevorshortnode(req, ctx): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
538 if b'node' in req.qsparams: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
539 return templatefilters.revescape(req.qsparams[b'node']) |
25602
85fb416f2fa7
hgweb: provide symrev (symbolic revision) property to the templates
Anton Shestakov <av6@dwimlabs.net>
parents:
25278
diff
changeset
|
540 else: |
39794
4f44f747f094
hgweb: use scmutil.binnode() to translate None to wdir hash (issue5988)
Yuya Nishihara <yuya@tcha.org>
parents:
39471
diff
changeset
|
541 return short(scmutil.binnode(ctx)) |
25602
85fb416f2fa7
hgweb: provide symrev (symbolic revision) property to the templates
Anton Shestakov <av6@dwimlabs.net>
parents:
25278
diff
changeset
|
542 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
543 |
37951
c4313a9fde7b
hgweb: use template context to render {files} of changesetentry()
Yuya Nishihara <yuya@tcha.org>
parents:
37950
diff
changeset
|
544 def _listfilesgen(context, ctx, stripecount): |
37949
1129e444fd6c
hgweb: extract generator of {files} from changesetentry()
Yuya Nishihara <yuya@tcha.org>
parents:
37916
diff
changeset
|
545 parity = paritygen(stripecount) |
43716
33cff871d3b9
hgweb: add a status property to file list context
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
43106
diff
changeset
|
546 filesadded = ctx.filesadded() |
37949
1129e444fd6c
hgweb: extract generator of {files} from changesetentry()
Yuya Nishihara <yuya@tcha.org>
parents:
37916
diff
changeset
|
547 for blockno, f in enumerate(ctx.files()): |
43716
33cff871d3b9
hgweb: add a status property to file list context
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
43106
diff
changeset
|
548 if f not in ctx: |
33cff871d3b9
hgweb: add a status property to file list context
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
43106
diff
changeset
|
549 status = b'removed' |
33cff871d3b9
hgweb: add a status property to file list context
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
43106
diff
changeset
|
550 elif f in filesadded: |
33cff871d3b9
hgweb: add a status property to file list context
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
43106
diff
changeset
|
551 status = b'added' |
33cff871d3b9
hgweb: add a status property to file list context
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
43106
diff
changeset
|
552 else: |
33cff871d3b9
hgweb: add a status property to file list context
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
43106
diff
changeset
|
553 status = b'modified' |
33cff871d3b9
hgweb: add a status property to file list context
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
43106
diff
changeset
|
554 template = b'filenolink' if status == b'removed' else b'filenodelink' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
555 yield context.process( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
556 template, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
557 { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
558 b'node': ctx.hex(), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
559 b'file': f, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
560 b'blockno': blockno + 1, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
561 b'parity': next(parity), |
43716
33cff871d3b9
hgweb: add a status property to file list context
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
43106
diff
changeset
|
562 b'status': status, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
563 }, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
564 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
565 |
37949
1129e444fd6c
hgweb: extract generator of {files} from changesetentry()
Yuya Nishihara <yuya@tcha.org>
parents:
37916
diff
changeset
|
566 |
36886
563fd95a6efb
hgweb: pass modern request type into various webutil functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36885
diff
changeset
|
567 def changesetentry(web, ctx): |
24177
f53b7174facf
hgweb: extract changeset template mapping generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24136
diff
changeset
|
568 '''Obtain a dictionary to be used to render the "changeset" template.''' |
f53b7174facf
hgweb: extract changeset template mapping generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24136
diff
changeset
|
569 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
570 showtags = showtag(web.repo, b'changesettag', scmutil.binnode(ctx)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
571 showbookmarks = showbookmark( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
572 web.repo, b'changesetbookmark', scmutil.binnode(ctx) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
573 ) |
24177
f53b7174facf
hgweb: extract changeset template mapping generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24136
diff
changeset
|
574 showbranch = nodebranchnodefault(ctx) |
f53b7174facf
hgweb: extract changeset template mapping generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24136
diff
changeset
|
575 |
36886
563fd95a6efb
hgweb: pass modern request type into various webutil functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36885
diff
changeset
|
576 basectx = basechangectx(web.repo, web.req) |
24177
f53b7174facf
hgweb: extract changeset template mapping generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24136
diff
changeset
|
577 if basectx is None: |
f53b7174facf
hgweb: extract changeset template mapping generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24136
diff
changeset
|
578 basectx = ctx.p1() |
f53b7174facf
hgweb: extract changeset template mapping generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24136
diff
changeset
|
579 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
580 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
|
581 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
|
582 style = web.req.qsparams[b'style'] |
24177
f53b7174facf
hgweb: extract changeset template mapping generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24136
diff
changeset
|
583 |
36885
c68e79dcf21c
hgweb: don't redundantly pass templater with requestcontext (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36865
diff
changeset
|
584 diff = diffs(web, ctx, basectx, None, style) |
24177
f53b7174facf
hgweb: extract changeset template mapping generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24136
diff
changeset
|
585 |
f53b7174facf
hgweb: extract changeset template mapping generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24136
diff
changeset
|
586 parity = paritygen(web.stripecount) |
38585
66eb74f9d87d
hgweb: pass ui to diffstatgen() explicitly
Yuya Nishihara <yuya@tcha.org>
parents:
38566
diff
changeset
|
587 diffstatsgen = diffstatgen(web.repo.ui, ctx, basectx) |
38059
4c3ab15f3532
hgweb: drop unused argument 'tmpl' from webutil.diffstat()
Yuya Nishihara <yuya@tcha.org>
parents:
38058
diff
changeset
|
588 diffstats = diffstat(ctx, diffstatsgen, parity) |
24177
f53b7174facf
hgweb: extract changeset template mapping generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24136
diff
changeset
|
589 |
f53b7174facf
hgweb: extract changeset template mapping generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24136
diff
changeset
|
590 return dict( |
f53b7174facf
hgweb: extract changeset template mapping generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24136
diff
changeset
|
591 diff=diff, |
36886
563fd95a6efb
hgweb: pass modern request type into various webutil functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36885
diff
changeset
|
592 symrev=symrevorshortnode(web.req, ctx), |
24177
f53b7174facf
hgweb: extract changeset template mapping generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24136
diff
changeset
|
593 basenode=basectx.hex(), |
f53b7174facf
hgweb: extract changeset template mapping generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24136
diff
changeset
|
594 changesettag=showtags, |
f53b7174facf
hgweb: extract changeset template mapping generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24136
diff
changeset
|
595 changesetbookmark=showbookmarks, |
f53b7174facf
hgweb: extract changeset template mapping generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24136
diff
changeset
|
596 changesetbranch=showbranch, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
597 files=templateutil.mappedgenerator( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
598 _listfilesgen, args=(ctx, web.stripecount) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
599 ), |
42337
832c59d1196e
templater: drop support for old style keywords (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
41676
diff
changeset
|
600 diffsummary=lambda context, mapping: diffsummary(diffstatsgen), |
24177
f53b7174facf
hgweb: extract changeset template mapping generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24136
diff
changeset
|
601 diffstat=diffstats, |
f53b7174facf
hgweb: extract changeset template mapping generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24136
diff
changeset
|
602 archives=web.archivelist(ctx.hex()), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
603 **pycompat.strkwargs(commonentry(web.repo, ctx)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
604 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
605 |
24177
f53b7174facf
hgweb: extract changeset template mapping generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24136
diff
changeset
|
606 |
37953
4237d07fad2c
hgweb: use template context to render {files} of changelist entries
Yuya Nishihara <yuya@tcha.org>
parents:
37952
diff
changeset
|
607 def _listfilediffsgen(context, files, node, max): |
7311
de9c87fe1620
hgweb: move another utility function into the webutil module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7310
diff
changeset
|
608 for f in files[:max]: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
609 yield context.process(b'filedifflink', {b'node': hex(node), b'file': f}) |
7311
de9c87fe1620
hgweb: move another utility function into the webutil module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7310
diff
changeset
|
610 if len(files) > max: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
611 yield context.process(b'fileellipses', {}) |
7311
de9c87fe1620
hgweb: move another utility function into the webutil module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7310
diff
changeset
|
612 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
613 |
37954
9482498b96b0
hgweb: remove unused argument 'tmpl' from listfilediffs()
Yuya Nishihara <yuya@tcha.org>
parents:
37953
diff
changeset
|
614 def listfilediffs(files, node, max): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
615 return templateutil.mappedgenerator( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
616 _listfilediffsgen, args=(files, node, max) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
617 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
618 |
37952
028d7c24f2e5
hgweb: wrap {files} of changelist entries with mappedgenerator
Yuya Nishihara <yuya@tcha.org>
parents:
37951
diff
changeset
|
619 |
37986
7a9e9fbaa559
hgweb: use template context to render {lines} of {diff}
Yuya Nishihara <yuya@tcha.org>
parents:
37985
diff
changeset
|
620 def _prettyprintdifflines(context, lines, blockno, lineidprefix): |
37984
3f70466ec7aa
hgweb: move prettyprintlines() closure out of diffs()
Yuya Nishihara <yuya@tcha.org>
parents:
37954
diff
changeset
|
621 for lineno, l in enumerate(lines, 1): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
622 difflineno = b"%d.%d" % (blockno, lineno) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
623 if l.startswith(b'+'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
624 ltype = b"difflineplus" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
625 elif l.startswith(b'-'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
626 ltype = b"difflineminus" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
627 elif l.startswith(b'@'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
628 ltype = b"difflineat" |
37984
3f70466ec7aa
hgweb: move prettyprintlines() closure out of diffs()
Yuya Nishihara <yuya@tcha.org>
parents:
37954
diff
changeset
|
629 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
630 ltype = b"diffline" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
631 yield context.process( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
632 ltype, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
633 { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
634 b'line': l, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
635 b'lineno': lineno, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
636 b'lineid': lineidprefix + b"l%s" % difflineno, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
637 b'linenumber': b"% 8s" % difflineno, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
638 }, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
639 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
640 |
37984
3f70466ec7aa
hgweb: move prettyprintlines() closure out of diffs()
Yuya Nishihara <yuya@tcha.org>
parents:
37954
diff
changeset
|
641 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
642 def _diffsgen( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
643 context, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
644 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
645 ctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
646 basectx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
647 files, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
648 style, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
649 stripecount, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
650 linerange, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
651 lineidprefix, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
652 ): |
7310
bd522d09d5e3
hgweb: move the diffs() generator into webutil
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7294
diff
changeset
|
653 if files: |
41676
0531dff73d0b
match: delete unused root and cwd arguments from {always,never,exact}() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41618
diff
changeset
|
654 m = match.exact(files) |
7310
bd522d09d5e3
hgweb: move the diffs() generator into webutil
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7294
diff
changeset
|
655 else: |
41676
0531dff73d0b
match: delete unused root and cwd arguments from {always,never,exact}() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41618
diff
changeset
|
656 m = match.always() |
7310
bd522d09d5e3
hgweb: move the diffs() generator into webutil
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7294
diff
changeset
|
657 |
bd522d09d5e3
hgweb: move the diffs() generator into webutil
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7294
diff
changeset
|
658 diffopts = patch.diffopts(repo.ui, untrusted=True) |
37987
8cc23a46df37
hgweb: convert {diff} to a mappinggenerator with named template
Yuya Nishihara <yuya@tcha.org>
parents:
37986
diff
changeset
|
659 parity = paritygen(stripecount) |
7310
bd522d09d5e3
hgweb: move the diffs() generator into webutil
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7294
diff
changeset
|
660 |
41618
e834f6f6f221
patch: pass in context objects into diffhunks() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41325
diff
changeset
|
661 diffhunks = patch.diffhunks(repo, basectx, ctx, m, opts=diffopts) |
34855
35c6a54ec1ff
diff: also yield file context objects in patch.trydiff() (API)
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34807
diff
changeset
|
662 for blockno, (fctx1, fctx2, header, hunks) in enumerate(diffhunks, 1): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
663 if style != b'raw': |
31276
cd29673cebdb
hgweb: use patch.diffhunks in webutil.diffs to simplify the algorithm
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31275
diff
changeset
|
664 header = header[1:] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
665 lines = [h + b'\n' for h in header] |
31276
cd29673cebdb
hgweb: use patch.diffhunks in webutil.diffs to simplify the algorithm
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31275
diff
changeset
|
666 for hunkrange, hunklines in hunks: |
31666
aaebc80c9f1d
hgweb: add a 'linerange' parameter to webutil.diffs()
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31665
diff
changeset
|
667 if linerange is not None and hunkrange is not None: |
aaebc80c9f1d
hgweb: add a 'linerange' parameter to webutil.diffs()
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31665
diff
changeset
|
668 s1, l1, s2, l2 = hunkrange |
31808
ca3b4a2b7e54
mdiff: add a hunkinrange helper function
Denis Laxalde <denis@laxalde.org>
parents:
31727
diff
changeset
|
669 if not mdiff.hunkinrange((s2, l2), linerange): |
31666
aaebc80c9f1d
hgweb: add a 'linerange' parameter to webutil.diffs()
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31665
diff
changeset
|
670 continue |
31276
cd29673cebdb
hgweb: use patch.diffhunks in webutil.diffs to simplify the algorithm
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31275
diff
changeset
|
671 lines.extend(hunklines) |
cd29673cebdb
hgweb: use patch.diffhunks in webutil.diffs to simplify the algorithm
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31275
diff
changeset
|
672 if lines: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
673 l = templateutil.mappedgenerator( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
674 _prettyprintdifflines, args=(lines, blockno, lineidprefix) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
675 ) |
37987
8cc23a46df37
hgweb: convert {diff} to a mappinggenerator with named template
Yuya Nishihara <yuya@tcha.org>
parents:
37986
diff
changeset
|
676 yield { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
677 b'parity': next(parity), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
678 b'blockno': blockno, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
679 b'lines': l, |
37987
8cc23a46df37
hgweb: convert {diff} to a mappinggenerator with named template
Yuya Nishihara <yuya@tcha.org>
parents:
37986
diff
changeset
|
680 } |
8cc23a46df37
hgweb: convert {diff} to a mappinggenerator with named template
Yuya Nishihara <yuya@tcha.org>
parents:
37986
diff
changeset
|
681 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
682 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
683 def diffs(web, ctx, basectx, files, style, linerange=None, lineidprefix=b''): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
684 args = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
685 web.repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
686 ctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
687 basectx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
688 files, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
689 style, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
690 web.stripecount, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
691 linerange, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
692 lineidprefix, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
693 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
694 return templateutil.mappinggenerator( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
695 _diffsgen, args=args, name=b'diffblock' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
696 ) |
7345
55651328dfcc
hgweb: fix up the less/more links on the graph page
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7311
diff
changeset
|
697 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
698 |
37990
c0ccbf4fbe47
hgweb: convert comparison {lines} to a mappinggenerator with named template
Yuya Nishihara <yuya@tcha.org>
parents:
37989
diff
changeset
|
699 def _compline(type, leftlineno, leftline, rightlineno, rightline): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
700 lineid = leftlineno and (b"l%d" % leftlineno) or b'' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
701 lineid += rightlineno and (b"r%d" % rightlineno) or b'' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
702 llno = b'%d' % leftlineno if leftlineno else b'' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
703 rlno = b'%d' % rightlineno if rightlineno else b'' |
37990
c0ccbf4fbe47
hgweb: convert comparison {lines} to a mappinggenerator with named template
Yuya Nishihara <yuya@tcha.org>
parents:
37989
diff
changeset
|
704 return { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
705 b'type': type, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
706 b'lineid': lineid, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
707 b'leftlineno': leftlineno, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
708 b'leftlinenumber': b"% 6s" % llno, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
709 b'leftline': leftline or b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
710 b'rightlineno': rightlineno, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
711 b'rightlinenumber': b"% 6s" % rlno, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
712 b'rightline': rightline or b'', |
37990
c0ccbf4fbe47
hgweb: convert comparison {lines} to a mappinggenerator with named template
Yuya Nishihara <yuya@tcha.org>
parents:
37989
diff
changeset
|
713 } |
37988
406f945c5814
hgweb: move compline() closure out of compare()
Yuya Nishihara <yuya@tcha.org>
parents:
37987
diff
changeset
|
714 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
715 |
37990
c0ccbf4fbe47
hgweb: convert comparison {lines} to a mappinggenerator with named template
Yuya Nishihara <yuya@tcha.org>
parents:
37989
diff
changeset
|
716 def _getcompblockgen(context, leftlines, rightlines, opcodes): |
37989
53b0a51aed72
hgweb: move getblock() closure out of compare()
Yuya Nishihara <yuya@tcha.org>
parents:
37988
diff
changeset
|
717 for type, llo, lhi, rlo, rhi in opcodes: |
40156
5716d48b2a5b
py3: convert diff opcode name to bytes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39794
diff
changeset
|
718 type = pycompat.sysbytes(type) |
37989
53b0a51aed72
hgweb: move getblock() closure out of compare()
Yuya Nishihara <yuya@tcha.org>
parents:
37988
diff
changeset
|
719 len1 = lhi - llo |
53b0a51aed72
hgweb: move getblock() closure out of compare()
Yuya Nishihara <yuya@tcha.org>
parents:
37988
diff
changeset
|
720 len2 = rhi - rlo |
53b0a51aed72
hgweb: move getblock() closure out of compare()
Yuya Nishihara <yuya@tcha.org>
parents:
37988
diff
changeset
|
721 count = min(len1, len2) |
49284
d44e3c45f0e4
py3: replace `pycompat.xrange` by `range`
Manuel Jacob <me@manueljacob.de>
parents:
48946
diff
changeset
|
722 for i in range(count): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
723 yield _compline( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
724 type=type, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
725 leftlineno=llo + i + 1, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
726 leftline=leftlines[llo + i], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
727 rightlineno=rlo + i + 1, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
728 rightline=rightlines[rlo + i], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
729 ) |
37989
53b0a51aed72
hgweb: move getblock() closure out of compare()
Yuya Nishihara <yuya@tcha.org>
parents:
37988
diff
changeset
|
730 if len1 > len2: |
49284
d44e3c45f0e4
py3: replace `pycompat.xrange` by `range`
Manuel Jacob <me@manueljacob.de>
parents:
48946
diff
changeset
|
731 for i in range(llo + count, lhi): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
732 yield _compline( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
733 type=type, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
734 leftlineno=i + 1, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
735 leftline=leftlines[i], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
736 rightlineno=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
737 rightline=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
738 ) |
37989
53b0a51aed72
hgweb: move getblock() closure out of compare()
Yuya Nishihara <yuya@tcha.org>
parents:
37988
diff
changeset
|
739 elif len2 > len1: |
49284
d44e3c45f0e4
py3: replace `pycompat.xrange` by `range`
Manuel Jacob <me@manueljacob.de>
parents:
48946
diff
changeset
|
740 for i in range(rlo + count, rhi): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
741 yield _compline( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
742 type=type, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
743 leftlineno=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
744 leftline=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
745 rightlineno=i + 1, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
746 rightline=rightlines[i], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
747 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
748 |
17202
1ae119269ddc
hgweb: side-by-side comparison functionality
wujek srujek
parents:
16719
diff
changeset
|
749 |
37990
c0ccbf4fbe47
hgweb: convert comparison {lines} to a mappinggenerator with named template
Yuya Nishihara <yuya@tcha.org>
parents:
37989
diff
changeset
|
750 def _getcompblock(leftlines, rightlines, opcodes): |
c0ccbf4fbe47
hgweb: convert comparison {lines} to a mappinggenerator with named template
Yuya Nishihara <yuya@tcha.org>
parents:
37989
diff
changeset
|
751 args = (leftlines, rightlines, opcodes) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
752 return templateutil.mappinggenerator( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
753 _getcompblockgen, args=args, name=b'comparisonline' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
754 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
755 |
37990
c0ccbf4fbe47
hgweb: convert comparison {lines} to a mappinggenerator with named template
Yuya Nishihara <yuya@tcha.org>
parents:
37989
diff
changeset
|
756 |
37992
b3992c21b7f3
hgweb: convert {comparison} to a mappinggenerator with named template
Yuya Nishihara <yuya@tcha.org>
parents:
37991
diff
changeset
|
757 def _comparegen(context, contextnum, leftlines, rightlines): |
37989
53b0a51aed72
hgweb: move getblock() closure out of compare()
Yuya Nishihara <yuya@tcha.org>
parents:
37988
diff
changeset
|
758 '''Generator function that provides side-by-side comparison data.''' |
17202
1ae119269ddc
hgweb: side-by-side comparison functionality
wujek srujek
parents:
16719
diff
changeset
|
759 s = difflib.SequenceMatcher(None, leftlines, rightlines) |
37991
4e407c7b1fbd
hgweb: rename 'context' argument of webutil.compare() to avoid name conflicts
Yuya Nishihara <yuya@tcha.org>
parents:
37990
diff
changeset
|
760 if contextnum < 0: |
37990
c0ccbf4fbe47
hgweb: convert comparison {lines} to a mappinggenerator with named template
Yuya Nishihara <yuya@tcha.org>
parents:
37989
diff
changeset
|
761 l = _getcompblock(leftlines, rightlines, s.get_opcodes()) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
762 yield {b'lines': l} |
17202
1ae119269ddc
hgweb: side-by-side comparison functionality
wujek srujek
parents:
16719
diff
changeset
|
763 else: |
37991
4e407c7b1fbd
hgweb: rename 'context' argument of webutil.compare() to avoid name conflicts
Yuya Nishihara <yuya@tcha.org>
parents:
37990
diff
changeset
|
764 for oc in s.get_grouped_opcodes(n=contextnum): |
37990
c0ccbf4fbe47
hgweb: convert comparison {lines} to a mappinggenerator with named template
Yuya Nishihara <yuya@tcha.org>
parents:
37989
diff
changeset
|
765 l = _getcompblock(leftlines, rightlines, oc) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
766 yield {b'lines': l} |
37992
b3992c21b7f3
hgweb: convert {comparison} to a mappinggenerator with named template
Yuya Nishihara <yuya@tcha.org>
parents:
37991
diff
changeset
|
767 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
768 |
37993
623dc2651d26
hgweb: drop unused argument 'tmpl' from webutil.compare()
Yuya Nishihara <yuya@tcha.org>
parents:
37992
diff
changeset
|
769 def compare(contextnum, leftlines, rightlines): |
37992
b3992c21b7f3
hgweb: convert {comparison} to a mappinggenerator with named template
Yuya Nishihara <yuya@tcha.org>
parents:
37991
diff
changeset
|
770 args = (contextnum, leftlines, rightlines) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
771 return templateutil.mappinggenerator( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
772 _comparegen, args=args, name=b'comparisonblock' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
773 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
774 |
17202
1ae119269ddc
hgweb: side-by-side comparison functionality
wujek srujek
parents:
16719
diff
changeset
|
775 |
38585
66eb74f9d87d
hgweb: pass ui to diffstatgen() explicitly
Yuya Nishihara <yuya@tcha.org>
parents:
38566
diff
changeset
|
776 def diffstatgen(ui, ctx, basectx): |
14570
9f908ef5a595
web: provide diff summary to the changeset page
Steven Brown <StevenGBrown@gmail.com>
parents:
14562
diff
changeset
|
777 '''Generator function that provides the diffstat data.''' |
14490
1d3e2349304a
web: provide diffstat to the changeset page
Steven Brown <StevenGBrown@gmail.com>
parents:
14055
diff
changeset
|
778 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
779 diffopts = patch.diffopts(ui, {b'noprefix': False}) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
780 stats = patch.diffstatdata(util.iterlines(ctx.diff(basectx, opts=diffopts))) |
14490
1d3e2349304a
web: provide diffstat to the changeset page
Steven Brown <StevenGBrown@gmail.com>
parents:
14055
diff
changeset
|
781 maxname, maxtotal, addtotal, removetotal, binary = patch.diffstatsum(stats) |
14570
9f908ef5a595
web: provide diff summary to the changeset page
Steven Brown <StevenGBrown@gmail.com>
parents:
14562
diff
changeset
|
782 while True: |
9f908ef5a595
web: provide diff summary to the changeset page
Steven Brown <StevenGBrown@gmail.com>
parents:
14562
diff
changeset
|
783 yield stats, maxname, maxtotal, addtotal, removetotal, binary |
9f908ef5a595
web: provide diff summary to the changeset page
Steven Brown <StevenGBrown@gmail.com>
parents:
14562
diff
changeset
|
784 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
785 |
14570
9f908ef5a595
web: provide diff summary to the changeset page
Steven Brown <StevenGBrown@gmail.com>
parents:
14562
diff
changeset
|
786 def diffsummary(statgen): |
9f908ef5a595
web: provide diff summary to the changeset page
Steven Brown <StevenGBrown@gmail.com>
parents:
14562
diff
changeset
|
787 '''Return a short summary of the diff.''' |
9f908ef5a595
web: provide diff summary to the changeset page
Steven Brown <StevenGBrown@gmail.com>
parents:
14562
diff
changeset
|
788 |
29216
ead25aa27a43
py3: convert to next() function
timeless <timeless@mozdev.org>
parents:
28709
diff
changeset
|
789 stats, maxname, maxtotal, addtotal, removetotal, binary = next(statgen) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
790 return _(b' %d files changed, %d insertions(+), %d deletions(-)\n') % ( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
791 len(stats), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
792 addtotal, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
793 removetotal, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
794 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
795 |
14570
9f908ef5a595
web: provide diff summary to the changeset page
Steven Brown <StevenGBrown@gmail.com>
parents:
14562
diff
changeset
|
796 |
38058
6369e21e97ac
hgweb: use template context to render {diffstat}
Yuya Nishihara <yuya@tcha.org>
parents:
38057
diff
changeset
|
797 def _diffstattmplgen(context, ctx, statgen, parity): |
29216
ead25aa27a43
py3: convert to next() function
timeless <timeless@mozdev.org>
parents:
28709
diff
changeset
|
798 stats, maxname, maxtotal, addtotal, removetotal, binary = next(statgen) |
14561
925d9f2b188b
web: include all files in the diffstat
Steven Brown <StevenGBrown@gmail.com>
parents:
14490
diff
changeset
|
799 files = ctx.files() |
14490
1d3e2349304a
web: provide diffstat to the changeset page
Steven Brown <StevenGBrown@gmail.com>
parents:
14055
diff
changeset
|
800 |
14561
925d9f2b188b
web: include all files in the diffstat
Steven Brown <StevenGBrown@gmail.com>
parents:
14490
diff
changeset
|
801 def pct(i): |
925d9f2b188b
web: include all files in the diffstat
Steven Brown <StevenGBrown@gmail.com>
parents:
14490
diff
changeset
|
802 if maxtotal == 0: |
925d9f2b188b
web: include all files in the diffstat
Steven Brown <StevenGBrown@gmail.com>
parents:
14490
diff
changeset
|
803 return 0 |
925d9f2b188b
web: include all files in the diffstat
Steven Brown <StevenGBrown@gmail.com>
parents:
14490
diff
changeset
|
804 return (float(i) / maxtotal) * 100 |
14490
1d3e2349304a
web: provide diffstat to the changeset page
Steven Brown <StevenGBrown@gmail.com>
parents:
14055
diff
changeset
|
805 |
14562
fccd3b966da7
web: provide the file number to the diffstat templates
Steven Brown <StevenGBrown@gmail.com>
parents:
14561
diff
changeset
|
806 fileno = 0 |
14561
925d9f2b188b
web: include all files in the diffstat
Steven Brown <StevenGBrown@gmail.com>
parents:
14490
diff
changeset
|
807 for filename, adds, removes, isbinary in stats: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
808 template = b'diffstatlink' if filename in files else b'diffstatnolink' |
14561
925d9f2b188b
web: include all files in the diffstat
Steven Brown <StevenGBrown@gmail.com>
parents:
14490
diff
changeset
|
809 total = adds + removes |
14562
fccd3b966da7
web: provide the file number to the diffstat templates
Steven Brown <StevenGBrown@gmail.com>
parents:
14561
diff
changeset
|
810 fileno += 1 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
811 yield context.process( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
812 template, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
813 { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
814 b'node': ctx.hex(), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
815 b'file': filename, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
816 b'fileno': fileno, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
817 b'total': total, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
818 b'addpct': pct(adds), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
819 b'removepct': pct(removes), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
820 b'parity': next(parity), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
821 }, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
822 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
823 |
14490
1d3e2349304a
web: provide diffstat to the changeset page
Steven Brown <StevenGBrown@gmail.com>
parents:
14055
diff
changeset
|
824 |
38059
4c3ab15f3532
hgweb: drop unused argument 'tmpl' from webutil.diffstat()
Yuya Nishihara <yuya@tcha.org>
parents:
38058
diff
changeset
|
825 def diffstat(ctx, statgen, parity): |
38057
f0ee627162f4
hgweb: wrap {diffstat} with mappedgenerator
Yuya Nishihara <yuya@tcha.org>
parents:
38043
diff
changeset
|
826 '''Return a diffstat template for each file in the diff.''' |
38058
6369e21e97ac
hgweb: use template context to render {diffstat}
Yuya Nishihara <yuya@tcha.org>
parents:
38057
diff
changeset
|
827 args = (ctx, statgen, parity) |
38057
f0ee627162f4
hgweb: wrap {diffstat} with mappedgenerator
Yuya Nishihara <yuya@tcha.org>
parents:
38043
diff
changeset
|
828 return templateutil.mappedgenerator(_diffstattmplgen, args=args) |
f0ee627162f4
hgweb: wrap {diffstat} with mappedgenerator
Yuya Nishihara <yuya@tcha.org>
parents:
38043
diff
changeset
|
829 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
830 |
37696
9ac3e97b299b
hgweb: lift {sessionvars} to a wrapped type
Yuya Nishihara <yuya@tcha.org>
parents:
37695
diff
changeset
|
831 class sessionvars(templateutil.wrapped): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
832 def __init__(self, vars, start=b'?'): |
37694
d14dbf46e5c7
hgweb: prefix private variables of sessionvars with '_'
Yuya Nishihara <yuya@tcha.org>
parents:
37515
diff
changeset
|
833 self._start = start |
d14dbf46e5c7
hgweb: prefix private variables of sessionvars with '_'
Yuya Nishihara <yuya@tcha.org>
parents:
37515
diff
changeset
|
834 self._vars = vars |
37695
570a4426c5b8
hgweb: make sessionvars class less dense
Yuya Nishihara <yuya@tcha.org>
parents:
37694
diff
changeset
|
835 |
7345
55651328dfcc
hgweb: fix up the less/more links on the graph page
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7311
diff
changeset
|
836 def __getitem__(self, key): |
37694
d14dbf46e5c7
hgweb: prefix private variables of sessionvars with '_'
Yuya Nishihara <yuya@tcha.org>
parents:
37515
diff
changeset
|
837 return self._vars[key] |
37695
570a4426c5b8
hgweb: make sessionvars class less dense
Yuya Nishihara <yuya@tcha.org>
parents:
37694
diff
changeset
|
838 |
7345
55651328dfcc
hgweb: fix up the less/more links on the graph page
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7311
diff
changeset
|
839 def __setitem__(self, key, value): |
37694
d14dbf46e5c7
hgweb: prefix private variables of sessionvars with '_'
Yuya Nishihara <yuya@tcha.org>
parents:
37515
diff
changeset
|
840 self._vars[key] = value |
37695
570a4426c5b8
hgweb: make sessionvars class less dense
Yuya Nishihara <yuya@tcha.org>
parents:
37694
diff
changeset
|
841 |
7345
55651328dfcc
hgweb: fix up the less/more links on the graph page
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7311
diff
changeset
|
842 def __copy__(self): |
37694
d14dbf46e5c7
hgweb: prefix private variables of sessionvars with '_'
Yuya Nishihara <yuya@tcha.org>
parents:
37515
diff
changeset
|
843 return sessionvars(copy.copy(self._vars), self._start) |
37695
570a4426c5b8
hgweb: make sessionvars class less dense
Yuya Nishihara <yuya@tcha.org>
parents:
37694
diff
changeset
|
844 |
38267
fb874fc1d9b4
templater: abstract ifcontains() over wrapped types
Yuya Nishihara <yuya@tcha.org>
parents:
38265
diff
changeset
|
845 def contains(self, context, mapping, item): |
fb874fc1d9b4
templater: abstract ifcontains() over wrapped types
Yuya Nishihara <yuya@tcha.org>
parents:
38265
diff
changeset
|
846 item = templateutil.unwrapvalue(context, mapping, item) |
fb874fc1d9b4
templater: abstract ifcontains() over wrapped types
Yuya Nishihara <yuya@tcha.org>
parents:
38265
diff
changeset
|
847 return item in self._vars |
fb874fc1d9b4
templater: abstract ifcontains() over wrapped types
Yuya Nishihara <yuya@tcha.org>
parents:
38265
diff
changeset
|
848 |
38243
06d11cd90516
templater: promote getmember() to an interface of wrapped types
Yuya Nishihara <yuya@tcha.org>
parents:
38215
diff
changeset
|
849 def getmember(self, context, mapping, key): |
38244
688fbb758ba9
templater: resolve type of dict key in getmember()
Yuya Nishihara <yuya@tcha.org>
parents:
38243
diff
changeset
|
850 key = templateutil.unwrapvalue(context, mapping, key) |
38243
06d11cd90516
templater: promote getmember() to an interface of wrapped types
Yuya Nishihara <yuya@tcha.org>
parents:
38215
diff
changeset
|
851 return self._vars.get(key) |
06d11cd90516
templater: promote getmember() to an interface of wrapped types
Yuya Nishihara <yuya@tcha.org>
parents:
38215
diff
changeset
|
852 |
38265
41ae9b3cbfb9
templater: abstract min/max away
Yuya Nishihara <yuya@tcha.org>
parents:
38244
diff
changeset
|
853 def getmin(self, context, mapping): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
854 raise error.ParseError(_(b'not comparable')) |
38265
41ae9b3cbfb9
templater: abstract min/max away
Yuya Nishihara <yuya@tcha.org>
parents:
38244
diff
changeset
|
855 |
41ae9b3cbfb9
templater: abstract min/max away
Yuya Nishihara <yuya@tcha.org>
parents:
38244
diff
changeset
|
856 def getmax(self, context, mapping): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
857 raise error.ParseError(_(b'not comparable')) |
38265
41ae9b3cbfb9
templater: abstract min/max away
Yuya Nishihara <yuya@tcha.org>
parents:
38244
diff
changeset
|
858 |
38448
dae829b4de78
templater: introduce filter() function to remove empty items from list
Yuya Nishihara <yuya@tcha.org>
parents:
38289
diff
changeset
|
859 def filter(self, context, mapping, select): |
dae829b4de78
templater: introduce filter() function to remove empty items from list
Yuya Nishihara <yuya@tcha.org>
parents:
38289
diff
changeset
|
860 # implement if necessary |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
861 raise error.ParseError(_(b'not filterable')) |
38448
dae829b4de78
templater: introduce filter() function to remove empty items from list
Yuya Nishihara <yuya@tcha.org>
parents:
38289
diff
changeset
|
862 |
37696
9ac3e97b299b
hgweb: lift {sessionvars} to a wrapped type
Yuya Nishihara <yuya@tcha.org>
parents:
37695
diff
changeset
|
863 def itermaps(self, context): |
37694
d14dbf46e5c7
hgweb: prefix private variables of sessionvars with '_'
Yuya Nishihara <yuya@tcha.org>
parents:
37515
diff
changeset
|
864 separator = self._start |
48913
f254fc73d956
global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
865 for key, value in sorted(self._vars.items()): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
866 yield { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
867 b'name': key, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
868 b'value': pycompat.bytestr(value), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
869 b'separator': separator, |
34807
3caec3c032c8
webutil: use pycompat.bytestr() instead of str()
Augie Fackler <augie@google.com>
parents:
34403
diff
changeset
|
870 } |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
871 separator = b'&' |
12691
1b1a9038a71a
hgweb: fix hgweb_mod as well as hgwebdir_mod
Augie Fackler <durin42@gmail.com>
parents:
10282
diff
changeset
|
872 |
37696
9ac3e97b299b
hgweb: lift {sessionvars} to a wrapped type
Yuya Nishihara <yuya@tcha.org>
parents:
37695
diff
changeset
|
873 def join(self, context, mapping, sep): |
9ac3e97b299b
hgweb: lift {sessionvars} to a wrapped type
Yuya Nishihara <yuya@tcha.org>
parents:
37695
diff
changeset
|
874 # could be '{separator}{name}={value|urlescape}' |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
875 raise error.ParseError(_(b'not displayable without template')) |
37696
9ac3e97b299b
hgweb: lift {sessionvars} to a wrapped type
Yuya Nishihara <yuya@tcha.org>
parents:
37695
diff
changeset
|
876 |
9ac3e97b299b
hgweb: lift {sessionvars} to a wrapped type
Yuya Nishihara <yuya@tcha.org>
parents:
37695
diff
changeset
|
877 def show(self, context, mapping): |
43737
371765e775a2
webutil: add missing argument to join()
Matt Harbison <matt_harbison@yahoo.com>
parents:
43106
diff
changeset
|
878 return self.join(context, mapping, b'') |
37696
9ac3e97b299b
hgweb: lift {sessionvars} to a wrapped type
Yuya Nishihara <yuya@tcha.org>
parents:
37695
diff
changeset
|
879 |
38289
f9c426385853
templater: abstract truth testing to fix {if(list_of_empty_strings)}
Yuya Nishihara <yuya@tcha.org>
parents:
38267
diff
changeset
|
880 def tobool(self, context, mapping): |
f9c426385853
templater: abstract truth testing to fix {if(list_of_empty_strings)}
Yuya Nishihara <yuya@tcha.org>
parents:
38267
diff
changeset
|
881 return bool(self._vars) |
f9c426385853
templater: abstract truth testing to fix {if(list_of_empty_strings)}
Yuya Nishihara <yuya@tcha.org>
parents:
38267
diff
changeset
|
882 |
37696
9ac3e97b299b
hgweb: lift {sessionvars} to a wrapped type
Yuya Nishihara <yuya@tcha.org>
parents:
37695
diff
changeset
|
883 def tovalue(self, context, mapping): |
9ac3e97b299b
hgweb: lift {sessionvars} to a wrapped type
Yuya Nishihara <yuya@tcha.org>
parents:
37695
diff
changeset
|
884 return self._vars |
9ac3e97b299b
hgweb: lift {sessionvars} to a wrapped type
Yuya Nishihara <yuya@tcha.org>
parents:
37695
diff
changeset
|
885 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
886 |
27007
c8cbef073645
hgweb: alias ui module as uimod
Yuya Nishihara <yuya@tcha.org>
parents:
26894
diff
changeset
|
887 class wsgiui(uimod.ui): |
12691
1b1a9038a71a
hgweb: fix hgweb_mod as well as hgwebdir_mod
Augie Fackler <durin42@gmail.com>
parents:
10282
diff
changeset
|
888 # default termwidth breaks under mod_wsgi |
1b1a9038a71a
hgweb: fix hgweb_mod as well as hgwebdir_mod
Augie Fackler <durin42@gmail.com>
parents:
10282
diff
changeset
|
889 def termwidth(self): |
1b1a9038a71a
hgweb: fix hgweb_mod as well as hgwebdir_mod
Augie Fackler <durin42@gmail.com>
parents:
10282
diff
changeset
|
890 return 80 |
26162
268b39770c28
hgweb: extract web substitutions table generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26129
diff
changeset
|
891 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
892 |
26162
268b39770c28
hgweb: extract web substitutions table generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26129
diff
changeset
|
893 def getwebsubs(repo): |
268b39770c28
hgweb: extract web substitutions table generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26129
diff
changeset
|
894 websubtable = [] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
895 websubdefs = repo.ui.configitems(b'websub') |
26162
268b39770c28
hgweb: extract web substitutions table generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26129
diff
changeset
|
896 # we must maintain interhg backwards compatibility |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
897 websubdefs += repo.ui.configitems(b'interhg') |
26162
268b39770c28
hgweb: extract web substitutions table generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26129
diff
changeset
|
898 for key, pattern in websubdefs: |
268b39770c28
hgweb: extract web substitutions table generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26129
diff
changeset
|
899 # grab the delimiter from the character after the "s" |
36180
34e850440271
py3: slice over bytes to prevent getting ascii values
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35486
diff
changeset
|
900 unesc = pattern[1:2] |
38475
67dc32d4e790
cleanup: migrate from re.escape to stringutil.reescape
Augie Fackler <augie@google.com>
parents:
38448
diff
changeset
|
901 delim = stringutil.reescape(unesc) |
26162
268b39770c28
hgweb: extract web substitutions table generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26129
diff
changeset
|
902 |
268b39770c28
hgweb: extract web substitutions table generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26129
diff
changeset
|
903 # identify portions of the pattern, taking care to avoid escaped |
268b39770c28
hgweb: extract web substitutions table generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26129
diff
changeset
|
904 # delimiters. the replace format and flags are optional, but |
268b39770c28
hgweb: extract web substitutions table generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26129
diff
changeset
|
905 # delimiters are required. |
268b39770c28
hgweb: extract web substitutions table generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26129
diff
changeset
|
906 match = re.match( |
36183
44a519ec5077
py3: add b'' to make sure regex pattern are bytes in hgweb/webutil.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36180
diff
changeset
|
907 br'^s%s(.+)(?:(?<=\\\\)|(?<!\\))%s(.*)%s([ilmsux])*$' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
908 % (delim, delim, delim), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
909 pattern, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
910 ) |
26162
268b39770c28
hgweb: extract web substitutions table generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26129
diff
changeset
|
911 if not match: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
912 repo.ui.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
913 _(b"websub: invalid pattern for %s: %s\n") % (key, pattern) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
914 ) |
26162
268b39770c28
hgweb: extract web substitutions table generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26129
diff
changeset
|
915 continue |
268b39770c28
hgweb: extract web substitutions table generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26129
diff
changeset
|
916 |
268b39770c28
hgweb: extract web substitutions table generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26129
diff
changeset
|
917 # we need to unescape the delimiter for regexp and format |
36183
44a519ec5077
py3: add b'' to make sure regex pattern are bytes in hgweb/webutil.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36180
diff
changeset
|
918 delim_re = re.compile(br'(?<!\\)\\%s' % delim) |
26162
268b39770c28
hgweb: extract web substitutions table generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26129
diff
changeset
|
919 regexp = delim_re.sub(unesc, match.group(1)) |
268b39770c28
hgweb: extract web substitutions table generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26129
diff
changeset
|
920 format = delim_re.sub(unesc, match.group(2)) |
268b39770c28
hgweb: extract web substitutions table generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26129
diff
changeset
|
921 |
268b39770c28
hgweb: extract web substitutions table generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26129
diff
changeset
|
922 # the pattern allows for 6 regexp flags, so set them if necessary |
268b39770c28
hgweb: extract web substitutions table generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26129
diff
changeset
|
923 flagin = match.group(3) |
268b39770c28
hgweb: extract web substitutions table generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26129
diff
changeset
|
924 flags = 0 |
268b39770c28
hgweb: extract web substitutions table generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26129
diff
changeset
|
925 if flagin: |
42919
6ccf539aec71
hgweb: fix websub regex flag syntax on Python 3
Connor Sheehan <sheehan@mozilla.com>
parents:
42337
diff
changeset
|
926 for flag in pycompat.sysstr(flagin.upper()): |
26162
268b39770c28
hgweb: extract web substitutions table generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26129
diff
changeset
|
927 flags |= re.__dict__[flag] |
268b39770c28
hgweb: extract web substitutions table generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26129
diff
changeset
|
928 |
268b39770c28
hgweb: extract web substitutions table generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26129
diff
changeset
|
929 try: |
268b39770c28
hgweb: extract web substitutions table generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26129
diff
changeset
|
930 regexp = re.compile(regexp, flags) |
268b39770c28
hgweb: extract web substitutions table generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26129
diff
changeset
|
931 websubtable.append((regexp, format)) |
268b39770c28
hgweb: extract web substitutions table generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26129
diff
changeset
|
932 except re.error: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
933 repo.ui.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
934 _(b"websub: invalid regexp for %s: %s\n") % (key, regexp) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
935 ) |
26162
268b39770c28
hgweb: extract web substitutions table generation to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26129
diff
changeset
|
936 return websubtable |
37909
7fae76c2c564
hgweb: reuse graph node-related functions from templates
Anton Shestakov <av6@dwimlabs.net>
parents:
37907
diff
changeset
|
937 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
938 |
37909
7fae76c2c564
hgweb: reuse graph node-related functions from templates
Anton Shestakov <av6@dwimlabs.net>
parents:
37907
diff
changeset
|
939 def getgraphnode(repo, ctx): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
940 return templatekw.getgraphnodecurrent( |
44345
14d0e89520a2
graphlog: use '%' for other context in merge conflict
Martin von Zweigbergk <martinvonz@google.com>
parents:
43793
diff
changeset
|
941 repo, ctx, {} |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42919
diff
changeset
|
942 ) + templatekw.getgraphnodesymbol(ctx) |