Mercurial > hg
annotate mercurial/hgweb/__init__.py @ 48946:642e31cb55f0
py3: use class X: instead of class X(object):
The inheritance from object is implied in Python 3. So this should
be equivalent.
This change was generated via an automated search and replace. So there
may have been some accidental changes.
Differential Revision: https://phab.mercurial-scm.org/D12352
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Mon, 21 Feb 2022 13:08:28 -0700 |
parents | 06de08b36c82 |
children | 093e5c274f54 |
rev | line source |
---|---|
2391
d351a3be3371
Fixing up comment headers for split up code.
Eric Hopper <hopper@omnifarious.org>
parents:
2356
diff
changeset
|
1 # hgweb/__init__.py - web interface to a mercurial repository |
131 | 2 # |
238
3b92f8fe47ae
hgweb.py: kill #! line, clean up copyright notice
mpm@selenic.com
parents:
222
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 Olivia Mackall <olivia@selenic.com> |
131 | 5 # |
8225
46293a0c7e9f
updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents:
3877
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. |
131 | 8 |
27046
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
10996
diff
changeset
|
9 |
10996
f6d41bfc189e
hgweb: make hgweb.hgweb a unified interface to hgweb/hgwebdir
Matt Mackall <mpm@selenic.com>
parents:
10994
diff
changeset
|
10 import os |
27046
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
10996
diff
changeset
|
11 |
27138
ea8e27e6098d
hgweb: move httpservice object from commands module
Yuya Nishihara <yuya@tcha.org>
parents:
27046
diff
changeset
|
12 from ..i18n import _ |
ea8e27e6098d
hgweb: move httpservice object from commands module
Yuya Nishihara <yuya@tcha.org>
parents:
27046
diff
changeset
|
13 |
ea8e27e6098d
hgweb: move httpservice object from commands module
Yuya Nishihara <yuya@tcha.org>
parents:
27046
diff
changeset
|
14 from .. import ( |
27139
d73f23344dc7
hgweb: extract factory function of httpservice object
Yuya Nishihara <yuya@tcha.org>
parents:
27138
diff
changeset
|
15 error, |
34704
c51380879054
hgweb: rewrite most obviously-native-strings to be native strings
Augie Fackler <augie@google.com>
parents:
30509
diff
changeset
|
16 pycompat, |
37120
a8a902d7176e
procutil: bulk-replace function calls to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
34704
diff
changeset
|
17 ) |
a8a902d7176e
procutil: bulk-replace function calls to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
34704
diff
changeset
|
18 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42208
diff
changeset
|
19 from ..utils import procutil |
27138
ea8e27e6098d
hgweb: move httpservice object from commands module
Yuya Nishihara <yuya@tcha.org>
parents:
27046
diff
changeset
|
20 |
27046
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
10996
diff
changeset
|
21 from . import ( |
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
10996
diff
changeset
|
22 hgweb_mod, |
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
10996
diff
changeset
|
23 hgwebdir_mod, |
27138
ea8e27e6098d
hgweb: move httpservice object from commands module
Yuya Nishihara <yuya@tcha.org>
parents:
27046
diff
changeset
|
24 server, |
27046
37fcfe52c68c
hgweb: use absolute_import
Yuya Nishihara <yuya@tcha.org>
parents:
10996
diff
changeset
|
25 ) |
3877
abaee83ce0a6
Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
2391
diff
changeset
|
26 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42208
diff
changeset
|
27 |
10996
f6d41bfc189e
hgweb: make hgweb.hgweb a unified interface to hgweb/hgwebdir
Matt Mackall <mpm@selenic.com>
parents:
10994
diff
changeset
|
28 def hgweb(config, name=None, baseui=None): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45820
diff
changeset
|
29 """create an hgweb wsgi object |
10996
f6d41bfc189e
hgweb: make hgweb.hgweb a unified interface to hgweb/hgwebdir
Matt Mackall <mpm@selenic.com>
parents:
10994
diff
changeset
|
30 |
f6d41bfc189e
hgweb: make hgweb.hgweb a unified interface to hgweb/hgwebdir
Matt Mackall <mpm@selenic.com>
parents:
10994
diff
changeset
|
31 config can be one of: |
f6d41bfc189e
hgweb: make hgweb.hgweb a unified interface to hgweb/hgwebdir
Matt Mackall <mpm@selenic.com>
parents:
10994
diff
changeset
|
32 - repo object (single repo view) |
f6d41bfc189e
hgweb: make hgweb.hgweb a unified interface to hgweb/hgwebdir
Matt Mackall <mpm@selenic.com>
parents:
10994
diff
changeset
|
33 - path to repo (single repo view) |
f6d41bfc189e
hgweb: make hgweb.hgweb a unified interface to hgweb/hgwebdir
Matt Mackall <mpm@selenic.com>
parents:
10994
diff
changeset
|
34 - path to config file (multi-repo view) |
f6d41bfc189e
hgweb: make hgweb.hgweb a unified interface to hgweb/hgwebdir
Matt Mackall <mpm@selenic.com>
parents:
10994
diff
changeset
|
35 - dict of virtual:real pairs (multi-repo view) |
f6d41bfc189e
hgweb: make hgweb.hgweb a unified interface to hgweb/hgwebdir
Matt Mackall <mpm@selenic.com>
parents:
10994
diff
changeset
|
36 - list of virtual:real tuples (multi-repo view) |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45820
diff
changeset
|
37 """ |
10996
f6d41bfc189e
hgweb: make hgweb.hgweb a unified interface to hgweb/hgwebdir
Matt Mackall <mpm@selenic.com>
parents:
10994
diff
changeset
|
38 |
48934
06de08b36c82
py3: use str instead of pycompat.unicode
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
39 if isinstance(config, str): |
42208
91104f10ff65
py3: properly reject non-encoded strings given to hgweb
Ludovic Chabant <ludovic@chabant.com>
parents:
38199
diff
changeset
|
40 raise error.ProgrammingError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
41 b'Mercurial only supports encoded strings: %r' % config |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42208
diff
changeset
|
42 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42208
diff
changeset
|
43 if ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42208
diff
changeset
|
44 (isinstance(config, bytes) and not os.path.isdir(config)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42208
diff
changeset
|
45 or isinstance(config, dict) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42208
diff
changeset
|
46 or isinstance(config, list) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42208
diff
changeset
|
47 ): |
10996
f6d41bfc189e
hgweb: make hgweb.hgweb a unified interface to hgweb/hgwebdir
Matt Mackall <mpm@selenic.com>
parents:
10994
diff
changeset
|
48 # create a multi-dir interface |
f6d41bfc189e
hgweb: make hgweb.hgweb a unified interface to hgweb/hgwebdir
Matt Mackall <mpm@selenic.com>
parents:
10994
diff
changeset
|
49 return hgwebdir_mod.hgwebdir(config, baseui=baseui) |
f6d41bfc189e
hgweb: make hgweb.hgweb a unified interface to hgweb/hgwebdir
Matt Mackall <mpm@selenic.com>
parents:
10994
diff
changeset
|
50 return hgweb_mod.hgweb(config, name=name, baseui=baseui) |
3877
abaee83ce0a6
Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
2391
diff
changeset
|
51 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42208
diff
changeset
|
52 |
10992
a9b8c8c8ce80
hgweb: make top-level prototypes mirror their callees
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
53 def hgwebdir(config, baseui=None): |
a9b8c8c8ce80
hgweb: make top-level prototypes mirror their callees
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
54 return hgwebdir_mod.hgwebdir(config, baseui=baseui) |
3877
abaee83ce0a6
Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
2391
diff
changeset
|
55 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42208
diff
changeset
|
56 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48934
diff
changeset
|
57 class httpservice: |
27138
ea8e27e6098d
hgweb: move httpservice object from commands module
Yuya Nishihara <yuya@tcha.org>
parents:
27046
diff
changeset
|
58 def __init__(self, ui, app, opts): |
ea8e27e6098d
hgweb: move httpservice object from commands module
Yuya Nishihara <yuya@tcha.org>
parents:
27046
diff
changeset
|
59 self.ui = ui |
ea8e27e6098d
hgweb: move httpservice object from commands module
Yuya Nishihara <yuya@tcha.org>
parents:
27046
diff
changeset
|
60 self.app = app |
ea8e27e6098d
hgweb: move httpservice object from commands module
Yuya Nishihara <yuya@tcha.org>
parents:
27046
diff
changeset
|
61 self.opts = opts |
ea8e27e6098d
hgweb: move httpservice object from commands module
Yuya Nishihara <yuya@tcha.org>
parents:
27046
diff
changeset
|
62 |
ea8e27e6098d
hgweb: move httpservice object from commands module
Yuya Nishihara <yuya@tcha.org>
parents:
27046
diff
changeset
|
63 def init(self): |
37120
a8a902d7176e
procutil: bulk-replace function calls to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
34704
diff
changeset
|
64 procutil.setsignalhandler() |
27138
ea8e27e6098d
hgweb: move httpservice object from commands module
Yuya Nishihara <yuya@tcha.org>
parents:
27046
diff
changeset
|
65 self.httpd = server.create_server(self.ui, self.app) |
ea8e27e6098d
hgweb: move httpservice object from commands module
Yuya Nishihara <yuya@tcha.org>
parents:
27046
diff
changeset
|
66 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42208
diff
changeset
|
67 if ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
68 self.opts[b'port'] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42208
diff
changeset
|
69 and not self.ui.verbose |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
70 and not self.opts[b'print_url'] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42208
diff
changeset
|
71 ): |
27138
ea8e27e6098d
hgweb: move httpservice object from commands module
Yuya Nishihara <yuya@tcha.org>
parents:
27046
diff
changeset
|
72 return |
ea8e27e6098d
hgweb: move httpservice object from commands module
Yuya Nishihara <yuya@tcha.org>
parents:
27046
diff
changeset
|
73 |
ea8e27e6098d
hgweb: move httpservice object from commands module
Yuya Nishihara <yuya@tcha.org>
parents:
27046
diff
changeset
|
74 if self.httpd.prefix: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
75 prefix = self.httpd.prefix.strip(b'/') + b'/' |
27138
ea8e27e6098d
hgweb: move httpservice object from commands module
Yuya Nishihara <yuya@tcha.org>
parents:
27046
diff
changeset
|
76 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
77 prefix = b'' |
27138
ea8e27e6098d
hgweb: move httpservice object from commands module
Yuya Nishihara <yuya@tcha.org>
parents:
27046
diff
changeset
|
78 |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
79 port = ':%d' % self.httpd.port |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
80 if port == ':80': |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
81 port = '' |
27138
ea8e27e6098d
hgweb: move httpservice object from commands module
Yuya Nishihara <yuya@tcha.org>
parents:
27046
diff
changeset
|
82 |
ea8e27e6098d
hgweb: move httpservice object from commands module
Yuya Nishihara <yuya@tcha.org>
parents:
27046
diff
changeset
|
83 bindaddr = self.httpd.addr |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
84 if bindaddr == '0.0.0.0': |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
85 bindaddr = '*' |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
86 elif ':' in bindaddr: # IPv6 |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
87 bindaddr = '[%s]' % bindaddr |
27138
ea8e27e6098d
hgweb: move httpservice object from commands module
Yuya Nishihara <yuya@tcha.org>
parents:
27046
diff
changeset
|
88 |
ea8e27e6098d
hgweb: move httpservice object from commands module
Yuya Nishihara <yuya@tcha.org>
parents:
27046
diff
changeset
|
89 fqaddr = self.httpd.fqaddr |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
90 if ':' in fqaddr: |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
91 fqaddr = '[%s]' % fqaddr |
38199
aea29e81753a
serve: add option print-url
Nicola Spanti <nicola.spanti@logilab.fr>
parents:
37745
diff
changeset
|
92 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
93 url = b'http://%s%s/%s' % ( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42208
diff
changeset
|
94 pycompat.sysbytes(fqaddr), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42208
diff
changeset
|
95 pycompat.sysbytes(port), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42208
diff
changeset
|
96 prefix, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42208
diff
changeset
|
97 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
98 if self.opts[b'print_url']: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
99 self.ui.write(b'%s\n' % url) |
27138
ea8e27e6098d
hgweb: move httpservice object from commands module
Yuya Nishihara <yuya@tcha.org>
parents:
27046
diff
changeset
|
100 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
101 if self.opts[b'port']: |
38199
aea29e81753a
serve: add option print-url
Nicola Spanti <nicola.spanti@logilab.fr>
parents:
37745
diff
changeset
|
102 write = self.ui.status |
aea29e81753a
serve: add option print-url
Nicola Spanti <nicola.spanti@logilab.fr>
parents:
37745
diff
changeset
|
103 else: |
aea29e81753a
serve: add option print-url
Nicola Spanti <nicola.spanti@logilab.fr>
parents:
37745
diff
changeset
|
104 write = self.ui.write |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42208
diff
changeset
|
105 write( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
106 _(b'listening at %s (bound to %s:%d)\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42208
diff
changeset
|
107 % (url, pycompat.sysbytes(bindaddr), self.httpd.port) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42208
diff
changeset
|
108 ) |
27138
ea8e27e6098d
hgweb: move httpservice object from commands module
Yuya Nishihara <yuya@tcha.org>
parents:
27046
diff
changeset
|
109 self.ui.flush() # avoid buffering of status message |
ea8e27e6098d
hgweb: move httpservice object from commands module
Yuya Nishihara <yuya@tcha.org>
parents:
27046
diff
changeset
|
110 |
ea8e27e6098d
hgweb: move httpservice object from commands module
Yuya Nishihara <yuya@tcha.org>
parents:
27046
diff
changeset
|
111 def run(self): |
ea8e27e6098d
hgweb: move httpservice object from commands module
Yuya Nishihara <yuya@tcha.org>
parents:
27046
diff
changeset
|
112 self.httpd.serve_forever() |
27139
d73f23344dc7
hgweb: extract factory function of httpservice object
Yuya Nishihara <yuya@tcha.org>
parents:
27138
diff
changeset
|
113 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42208
diff
changeset
|
114 |
30508
9195bc4cb816
hgweb: extract app factory
Yuya Nishihara <yuya@tcha.org>
parents:
27184
diff
changeset
|
115 def createapp(baseui, repo, webconf): |
27181
a9cecc7b68d3
hgweb: eliminate duck-typing to select hgweb or hgwebdir by command option
Yuya Nishihara <yuya@tcha.org>
parents:
27139
diff
changeset
|
116 if webconf: |
30508
9195bc4cb816
hgweb: extract app factory
Yuya Nishihara <yuya@tcha.org>
parents:
27184
diff
changeset
|
117 return hgwebdir_mod.hgwebdir(webconf, baseui=baseui) |
27181
a9cecc7b68d3
hgweb: eliminate duck-typing to select hgweb or hgwebdir by command option
Yuya Nishihara <yuya@tcha.org>
parents:
27139
diff
changeset
|
118 else: |
27139
d73f23344dc7
hgweb: extract factory function of httpservice object
Yuya Nishihara <yuya@tcha.org>
parents:
27138
diff
changeset
|
119 if not repo: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42208
diff
changeset
|
120 raise error.RepoError( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43077
diff
changeset
|
121 _(b"there is no Mercurial repository here (.hg not found)") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42208
diff
changeset
|
122 ) |
30508
9195bc4cb816
hgweb: extract app factory
Yuya Nishihara <yuya@tcha.org>
parents:
27184
diff
changeset
|
123 return hgweb_mod.hgweb(repo, baseui=baseui) |