annotate tests/test-hgwebdir-gc.py @ 48652:6fd9a17c32ab

requirements: add an official `REVLOG_COMPRESSION_ZSTD` const Such constant was missing and its value was missing from the set of requirements that needs to be preserved through stream clone. This did not had any consequence yet as the "bundle 2 does not filter its requirements" is shadowing the issue. However we are now in a situation where we can fix this issue. So lets do it next. With the preparation work on test, changing the streamreqs value only impact two tests, where checking the full value seems to remains relevant. Important note: Since older version of Mercurial used the old `supportedformat` class attribute to check for stream requirement they supported, older version will consider this requirements to prevent them from using streaming clone. Even as they support this requirements for years. Pack for stable will be send to fix it, but they will have to be backported to older version if needed. Differential Revision: https://phab.mercurial-scm.org/D12083
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Mon, 24 Jan 2022 12:44:20 +0100
parents de2e04fe4897
children 6000f5b25c9b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
47802
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
1 from __future__ import absolute_import
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
2
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
3 import os
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
4 from mercurial.hgweb import hgwebdir_mod
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 hgwebdir = hgwebdir_mod.hgwebdir
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
7
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
8 os.mkdir(b'webdir')
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
9 os.chdir(b'webdir')
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 webdir = os.path.realpath(b'.')
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
12
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
13
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
14 def trivial_response(req, res):
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
15 return []
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
16
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
17
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
18 def make_hgwebdir(gc_rate=None):
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
19 config = os.path.join(webdir, b'hgwebdir.conf')
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
20 with open(config, 'wb') as configfile:
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
21 configfile.write(b'[experimental]\n')
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
22 if gc_rate is not None:
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
23 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
24 hg_wd = hgwebdir(config)
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
25 hg_wd._runwsgi = trivial_response
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
26 return hg_wd
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
27
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
28
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
29 def process_requests(webdir_instance, number):
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
30 # 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
31 for _ in range(number):
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
32 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
33 pass
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
34
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
35
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
36 without_gc = make_hgwebdir(gc_rate=0)
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
37 process_requests(without_gc, 5)
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
38 assert without_gc.requests_count == 5
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
39 assert without_gc.gc_full_collections_done == 0
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
40
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
41 with_gc = make_hgwebdir(gc_rate=2)
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
42 process_requests(with_gc, 5)
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
43 assert with_gc.requests_count == 5
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
44 assert with_gc.gc_full_collections_done == 2
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
45
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
46 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
47 process_requests(with_systematic_gc, 3)
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
48 assert with_systematic_gc.requests_count == 3
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
49 assert with_systematic_gc.gc_full_collections_done == 3