Mercurial > hg
annotate tests/dumbhttp.py @ 51181:dcaa2df1f688
changelog: never inline changelog
The test suite mostly use small repositories, that implies that most changelog in the
tests are inlined. As a result, non-inlined changelog are quite poorly tested.
Since non-inline changelog are most common case for serious repositories, this
lack of testing is a significant problem that results in high profile issue like
the one recently fixed by 66417f55ea33 and 849745d7da89.
Inlining the changelog does not bring much to the table, the number of total
file saved is negligible, and the changelog will be read by most operation
anyway.
So this changeset is make it so we never inline the changelog, and de-inline the
one that are still inlined whenever we touch them.
By doing that, we remove the "dual code path" situation for writing new entry to
the changelog and move to a "single code path" situation. Having a single
code path simplify the code and make sure it is covered by test (if test cover
that situation obviously)
This impact all tests that care about the number of file and the exchange size,
but there is nothing too complicated in them just a lot of churn.
The churn is made "worse" by the fact rust will use the persistent nodemap on
any changelog now. Which is overall a win as it means testing the persistent
nodemap more and having less special cases.
In short, having inline changelog is mostly useless and an endless source of
pain. We get rid of it.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Mon, 11 Dec 2023 22:27:59 +0100 |
parents | 642e31cb55f0 |
children | 493034cc3265 |
rev | line source |
---|---|
47500
23f5ed6dbcb1
run-tests: stop writing a `python3` symlink pointing to python2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45830
diff
changeset
|
1 #!/usr/bin/env python |
22959
10116463b0b1
tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff
changeset
|
2 |
27282
0bb8c405a7c7
tests/dumbhttp: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23136
diff
changeset
|
3 |
22959
10116463b0b1
tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff
changeset
|
4 """ |
10116463b0b1
tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff
changeset
|
5 Small and dumb HTTP server for use in tests. |
10116463b0b1
tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff
changeset
|
6 """ |
10116463b0b1
tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff
changeset
|
7 |
27282
0bb8c405a7c7
tests/dumbhttp: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23136
diff
changeset
|
8 import optparse |
31004
d05fefbb5ab3
dumbhttp: use IPv6 if HGIPV6 is set to 1
Jun Wu <quark@fb.com>
parents:
30506
diff
changeset
|
9 import os |
27282
0bb8c405a7c7
tests/dumbhttp: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23136
diff
changeset
|
10 import signal |
31004
d05fefbb5ab3
dumbhttp: use IPv6 if HGIPV6 is set to 1
Jun Wu <quark@fb.com>
parents:
30506
diff
changeset
|
11 import socket |
27282
0bb8c405a7c7
tests/dumbhttp: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23136
diff
changeset
|
12 import sys |
22959
10116463b0b1
tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff
changeset
|
13 |
27282
0bb8c405a7c7
tests/dumbhttp: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23136
diff
changeset
|
14 from mercurial import ( |
38593
e46c3b6a47b5
py3: fix dumbhttp.py to convert --daemon-postexec arguments back to bytes
Yuya Nishihara <yuya@tcha.org>
parents:
37672
diff
changeset
|
15 encoding, |
37672
8bacc09814ba
py3: make values bytes before passing into server.runservice()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34944
diff
changeset
|
16 pycompat, |
30506
d9d8d78e6bc9
server: move cmdutil.service() to new module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
29566
diff
changeset
|
17 server, |
29566
075146e85bb6
py3: conditionalize BaseHTTPServer, SimpleHTTPServer and CGIHTTPServer import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28771
diff
changeset
|
18 util, |
27282
0bb8c405a7c7
tests/dumbhttp: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23136
diff
changeset
|
19 ) |
0bb8c405a7c7
tests/dumbhttp: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23136
diff
changeset
|
20 |
29566
075146e85bb6
py3: conditionalize BaseHTTPServer, SimpleHTTPServer and CGIHTTPServer import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28771
diff
changeset
|
21 httpserver = util.httpserver |
27282
0bb8c405a7c7
tests/dumbhttp: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23136
diff
changeset
|
22 OptionParser = optparse.OptionParser |
22959
10116463b0b1
tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff
changeset
|
23 |
31004
d05fefbb5ab3
dumbhttp: use IPv6 if HGIPV6 is set to 1
Jun Wu <quark@fb.com>
parents:
30506
diff
changeset
|
24 if os.environ.get('HGIPV6', '0') == '1': |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
25 |
31004
d05fefbb5ab3
dumbhttp: use IPv6 if HGIPV6 is set to 1
Jun Wu <quark@fb.com>
parents:
30506
diff
changeset
|
26 class simplehttpserver(httpserver.httpserver): |
d05fefbb5ab3
dumbhttp: use IPv6 if HGIPV6 is set to 1
Jun Wu <quark@fb.com>
parents:
30506
diff
changeset
|
27 address_family = socket.AF_INET6 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
28 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
29 |
31004
d05fefbb5ab3
dumbhttp: use IPv6 if HGIPV6 is set to 1
Jun Wu <quark@fb.com>
parents:
30506
diff
changeset
|
30 else: |
d05fefbb5ab3
dumbhttp: use IPv6 if HGIPV6 is set to 1
Jun Wu <quark@fb.com>
parents:
30506
diff
changeset
|
31 simplehttpserver = httpserver.httpserver |
d05fefbb5ab3
dumbhttp: use IPv6 if HGIPV6 is set to 1
Jun Wu <quark@fb.com>
parents:
30506
diff
changeset
|
32 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
33 |
34944
bf2db35a6fe7
test-static-http: flush access log per request
Yuya Nishihara <yuya@tcha.org>
parents:
34925
diff
changeset
|
34 class _httprequesthandler(httpserver.simplehttprequesthandler): |
bf2db35a6fe7
test-static-http: flush access log per request
Yuya Nishihara <yuya@tcha.org>
parents:
34925
diff
changeset
|
35 def log_message(self, format, *args): |
bf2db35a6fe7
test-static-http: flush access log per request
Yuya Nishihara <yuya@tcha.org>
parents:
34925
diff
changeset
|
36 httpserver.simplehttprequesthandler.log_message(self, format, *args) |
bf2db35a6fe7
test-static-http: flush access log per request
Yuya Nishihara <yuya@tcha.org>
parents:
34925
diff
changeset
|
37 sys.stderr.flush() |
bf2db35a6fe7
test-static-http: flush access log per request
Yuya Nishihara <yuya@tcha.org>
parents:
34925
diff
changeset
|
38 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
39 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
40 class simplehttpservice: |
23136
6eab50a34fed
tests: have dumbhttp.py use cmdutil.service() to wait for child to listen()
Yuya Nishihara <yuya@tcha.org>
parents:
22959
diff
changeset
|
41 def __init__(self, host, port): |
6eab50a34fed
tests: have dumbhttp.py use cmdutil.service() to wait for child to listen()
Yuya Nishihara <yuya@tcha.org>
parents:
22959
diff
changeset
|
42 self.address = (host, port) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
43 |
23136
6eab50a34fed
tests: have dumbhttp.py use cmdutil.service() to wait for child to listen()
Yuya Nishihara <yuya@tcha.org>
parents:
22959
diff
changeset
|
44 def init(self): |
34944
bf2db35a6fe7
test-static-http: flush access log per request
Yuya Nishihara <yuya@tcha.org>
parents:
34925
diff
changeset
|
45 self.httpd = simplehttpserver(self.address, _httprequesthandler) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
46 |
23136
6eab50a34fed
tests: have dumbhttp.py use cmdutil.service() to wait for child to listen()
Yuya Nishihara <yuya@tcha.org>
parents:
22959
diff
changeset
|
47 def run(self): |
6eab50a34fed
tests: have dumbhttp.py use cmdutil.service() to wait for child to listen()
Yuya Nishihara <yuya@tcha.org>
parents:
22959
diff
changeset
|
48 self.httpd.serve_forever() |
22959
10116463b0b1
tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff
changeset
|
49 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
50 |
22959
10116463b0b1
tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff
changeset
|
51 if __name__ == '__main__': |
10116463b0b1
tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff
changeset
|
52 parser = OptionParser() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
53 parser.add_option( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
54 '-p', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
55 '--port', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
56 dest='port', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
57 type='int', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
58 default=8000, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
59 help='TCP port to listen on', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
60 metavar='PORT', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
61 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
62 parser.add_option( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
63 '-H', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
64 '--host', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
65 dest='host', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
66 default='localhost', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
67 help='hostname or IP to listen on', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
68 metavar='HOST', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
69 ) |
34925
8b95e420e248
test-static-http: show all files accessed over HTTP
Yuya Nishihara <yuya@tcha.org>
parents:
31004
diff
changeset
|
70 parser.add_option('--logfile', help='file name of access/error log') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
71 parser.add_option( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
72 '--pid', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
73 dest='pid', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
74 help='file name where the PID of the server is stored', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
75 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
76 parser.add_option( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
77 '-f', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
78 '--foreground', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
79 dest='foreground', |
22959
10116463b0b1
tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff
changeset
|
80 action='store_true', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
81 help='do not start the HTTP server in the background', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
82 ) |
28451
c90cfe76e024
serve: accept multiple values for --daemon-postexec
Jun Wu <quark@fb.com>
parents:
28194
diff
changeset
|
83 parser.add_option('--daemon-postexec', action='append') |
22959
10116463b0b1
tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff
changeset
|
84 |
10116463b0b1
tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff
changeset
|
85 (options, args) = parser.parse_args() |
10116463b0b1
tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff
changeset
|
86 |
10116463b0b1
tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff
changeset
|
87 signal.signal(signal.SIGTERM, lambda x, y: sys.exit(0)) |
10116463b0b1
tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff
changeset
|
88 |
34925
8b95e420e248
test-static-http: show all files accessed over HTTP
Yuya Nishihara <yuya@tcha.org>
parents:
31004
diff
changeset
|
89 if options.foreground and options.logfile: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
90 parser.error( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
91 "options --logfile and --foreground are mutually " "exclusive" |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
92 ) |
22959
10116463b0b1
tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff
changeset
|
93 if options.foreground and options.pid: |
10116463b0b1
tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff
changeset
|
94 parser.error("options --pid and --foreground are mutually exclusive") |
10116463b0b1
tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff
changeset
|
95 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
96 opts = { |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
97 b'pid_file': options.pid, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
98 b'daemon': not options.foreground, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
99 b'daemon_postexec': pycompat.rapply( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
100 encoding.strtolocal, options.daemon_postexec |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
101 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
102 } |
23136
6eab50a34fed
tests: have dumbhttp.py use cmdutil.service() to wait for child to listen()
Yuya Nishihara <yuya@tcha.org>
parents:
22959
diff
changeset
|
103 service = simplehttpservice(options.host, options.port) |
37672
8bacc09814ba
py3: make values bytes before passing into server.runservice()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34944
diff
changeset
|
104 runargs = [sys.executable, __file__] + sys.argv[1:] |
8bacc09814ba
py3: make values bytes before passing into server.runservice()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34944
diff
changeset
|
105 runargs = [pycompat.fsencode(a) for a in runargs] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
106 server.runservice( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
107 opts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
108 initfn=service.init, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
109 runfn=service.run, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
110 logfile=options.logfile, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
111 runargs=runargs, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
38593
diff
changeset
|
112 ) |