author | Matt Harbison <matt_harbison@yahoo.com> |
Wed, 10 Jul 2024 17:55:14 -0400 | |
changeset 51675 | bc94cbb49b30 |
parent 48875 | 6000f5b25c9b |
permissions | -rw-r--r-- |
47802
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
1 |
import os |
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
2 |
from mercurial.hgweb import hgwebdir_mod |
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
3 |
|
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
4 |
hgwebdir = hgwebdir_mod.hgwebdir |
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
5 |
|
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
6 |
os.mkdir(b'webdir') |
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
7 |
os.chdir(b'webdir') |
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
8 |
|
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
9 |
webdir = os.path.realpath(b'.') |
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
10 |
|
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
11 |
|
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
12 |
def trivial_response(req, res): |
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
13 |
return [] |
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
14 |
|
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
15 |
|
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
16 |
def make_hgwebdir(gc_rate=None): |
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
17 |
config = os.path.join(webdir, b'hgwebdir.conf') |
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
18 |
with open(config, 'wb') as configfile: |
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
19 |
configfile.write(b'[experimental]\n') |
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
20 |
if gc_rate is not None: |
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
21 |
configfile.write(b'web.full-garbage-collection-rate=%d\n' % gc_rate) |
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
22 |
hg_wd = hgwebdir(config) |
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
23 |
hg_wd._runwsgi = trivial_response |
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
24 |
return hg_wd |
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
25 |
|
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
26 |
|
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
27 |
def process_requests(webdir_instance, number): |
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
28 |
# we don't care for now about passing realistic arguments |
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
29 |
for _ in range(number): |
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
30 |
for chunk in webdir_instance.run_wsgi(None, None): |
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
31 |
pass |
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
32 |
|
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
33 |
|
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
34 |
without_gc = make_hgwebdir(gc_rate=0) |
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
35 |
process_requests(without_gc, 5) |
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
36 |
assert without_gc.requests_count == 5 |
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
37 |
assert without_gc.gc_full_collections_done == 0 |
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
38 |
|
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
39 |
with_gc = make_hgwebdir(gc_rate=2) |
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
40 |
process_requests(with_gc, 5) |
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
41 |
assert with_gc.requests_count == 5 |
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
42 |
assert with_gc.gc_full_collections_done == 2 |
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
43 |
|
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
44 |
with_systematic_gc = make_hgwebdir() # default value of the setting |
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
45 |
process_requests(with_systematic_gc, 3) |
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
46 |
assert with_systematic_gc.requests_count == 3 |
de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
47 |
assert with_systematic_gc.gc_full_collections_done == 3 |