Mercurial > hg
annotate mercurial/testing/__init__.py @ 51893:22e1924e9402
typing: make `vfs.isfileorlink_checkdir()` path arg required
The only caller to this is `merge._checkunknownfile()`, which supplies a value.
That's good, because `util.localpath()` immediately uses the value to call a
method on it on Windows. The posix implementation returns the value unaltered,
but then `pathutil.finddirs_rev_noroot()` would have exploded.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Sat, 21 Sep 2024 13:53:05 -0400 |
parents | f4733654f144 |
children |
rev | line source |
---|---|
51863
f4733654f144
typing: add `from __future__ import annotations` to most files
Matt Harbison <matt_harbison@yahoo.com>
parents:
50214
diff
changeset
|
1 from __future__ import annotations |
f4733654f144
typing: add `from __future__ import annotations` to most files
Matt Harbison <matt_harbison@yahoo.com>
parents:
50214
diff
changeset
|
2 |
46984
99c629101b73
testing: add a utility function to wait for file create
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
39772
diff
changeset
|
3 import os |
99c629101b73
testing: add a utility function to wait for file create
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
39772
diff
changeset
|
4 import time |
99c629101b73
testing: add a utility function to wait for file create
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
39772
diff
changeset
|
5 |
99c629101b73
testing: add a utility function to wait for file create
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
39772
diff
changeset
|
6 |
99c629101b73
testing: add a utility function to wait for file create
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
39772
diff
changeset
|
7 # work around check-code complains |
99c629101b73
testing: add a utility function to wait for file create
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
39772
diff
changeset
|
8 # |
99c629101b73
testing: add a utility function to wait for file create
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
39772
diff
changeset
|
9 # This is a simple log level module doing simple test related work, we can't |
99c629101b73
testing: add a utility function to wait for file create
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
39772
diff
changeset
|
10 # import more things, and we do not need it. |
99c629101b73
testing: add a utility function to wait for file create
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
39772
diff
changeset
|
11 environ = getattr(os, 'environ') |
99c629101b73
testing: add a utility function to wait for file create
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
39772
diff
changeset
|
12 |
99c629101b73
testing: add a utility function to wait for file create
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
39772
diff
changeset
|
13 |
50214
8e0d823ef182
testing: introduce util function to synchronize concurrent commands on files
Raphaël Gomès <rgomes@octobus.net>
parents:
48875
diff
changeset
|
14 def wait_on_cfg(ui, cfg, timeout=10): |
8e0d823ef182
testing: introduce util function to synchronize concurrent commands on files
Raphaël Gomès <rgomes@octobus.net>
parents:
48875
diff
changeset
|
15 """synchronize on the `cfg` config path |
8e0d823ef182
testing: introduce util function to synchronize concurrent commands on files
Raphaël Gomès <rgomes@octobus.net>
parents:
48875
diff
changeset
|
16 |
8e0d823ef182
testing: introduce util function to synchronize concurrent commands on files
Raphaël Gomès <rgomes@octobus.net>
parents:
48875
diff
changeset
|
17 Use this to synchronize commands during race tests. |
8e0d823ef182
testing: introduce util function to synchronize concurrent commands on files
Raphaël Gomès <rgomes@octobus.net>
parents:
48875
diff
changeset
|
18 """ |
8e0d823ef182
testing: introduce util function to synchronize concurrent commands on files
Raphaël Gomès <rgomes@octobus.net>
parents:
48875
diff
changeset
|
19 full_config = b'sync.' + cfg |
8e0d823ef182
testing: introduce util function to synchronize concurrent commands on files
Raphaël Gomès <rgomes@octobus.net>
parents:
48875
diff
changeset
|
20 wait_config = full_config + b'-timeout' |
8e0d823ef182
testing: introduce util function to synchronize concurrent commands on files
Raphaël Gomès <rgomes@octobus.net>
parents:
48875
diff
changeset
|
21 sync_path = ui.config(b'devel', full_config) |
8e0d823ef182
testing: introduce util function to synchronize concurrent commands on files
Raphaël Gomès <rgomes@octobus.net>
parents:
48875
diff
changeset
|
22 if sync_path is not None: |
8e0d823ef182
testing: introduce util function to synchronize concurrent commands on files
Raphaël Gomès <rgomes@octobus.net>
parents:
48875
diff
changeset
|
23 timeout = ui.config(b'devel', wait_config) |
8e0d823ef182
testing: introduce util function to synchronize concurrent commands on files
Raphaël Gomès <rgomes@octobus.net>
parents:
48875
diff
changeset
|
24 ready_path = sync_path + b'.waiting' |
8e0d823ef182
testing: introduce util function to synchronize concurrent commands on files
Raphaël Gomès <rgomes@octobus.net>
parents:
48875
diff
changeset
|
25 write_file(ready_path) |
8e0d823ef182
testing: introduce util function to synchronize concurrent commands on files
Raphaël Gomès <rgomes@octobus.net>
parents:
48875
diff
changeset
|
26 wait_file(sync_path, timeout=timeout) |
8e0d823ef182
testing: introduce util function to synchronize concurrent commands on files
Raphaël Gomès <rgomes@octobus.net>
parents:
48875
diff
changeset
|
27 |
8e0d823ef182
testing: introduce util function to synchronize concurrent commands on files
Raphaël Gomès <rgomes@octobus.net>
parents:
48875
diff
changeset
|
28 |
46984
99c629101b73
testing: add a utility function to wait for file create
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
39772
diff
changeset
|
29 def _timeout_factor(): |
99c629101b73
testing: add a utility function to wait for file create
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
39772
diff
changeset
|
30 """return the current modification to timeout""" |
47493
2dac94edd98d
testing: fix _timeout_factor
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46985
diff
changeset
|
31 default = int(environ.get('HGTEST_TIMEOUT_DEFAULT', 360)) |
46984
99c629101b73
testing: add a utility function to wait for file create
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
39772
diff
changeset
|
32 current = int(environ.get('HGTEST_TIMEOUT', default)) |
47493
2dac94edd98d
testing: fix _timeout_factor
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46985
diff
changeset
|
33 if current == 0: |
2dac94edd98d
testing: fix _timeout_factor
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46985
diff
changeset
|
34 return 1 |
46984
99c629101b73
testing: add a utility function to wait for file create
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
39772
diff
changeset
|
35 return current / float(default) |
99c629101b73
testing: add a utility function to wait for file create
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
39772
diff
changeset
|
36 |
99c629101b73
testing: add a utility function to wait for file create
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
39772
diff
changeset
|
37 |
99c629101b73
testing: add a utility function to wait for file create
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
39772
diff
changeset
|
38 def wait_file(path, timeout=10): |
99c629101b73
testing: add a utility function to wait for file create
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
39772
diff
changeset
|
39 timeout *= _timeout_factor() |
99c629101b73
testing: add a utility function to wait for file create
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
39772
diff
changeset
|
40 start = time.time() |
99c629101b73
testing: add a utility function to wait for file create
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
39772
diff
changeset
|
41 while not os.path.exists(path): |
47657
1bad89a67745
testing: do not stop waiting if timeout is 0 (issue6541)
Cédric Krier <ced@b2ck.com>
parents:
47493
diff
changeset
|
42 if timeout and time.time() - start > timeout: |
46984
99c629101b73
testing: add a utility function to wait for file create
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
39772
diff
changeset
|
43 raise RuntimeError(b"timed out waiting for file: %s" % path) |
99c629101b73
testing: add a utility function to wait for file create
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
39772
diff
changeset
|
44 time.sleep(0.01) |
46985
52cee44aa1a0
testing: add a `write_file` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46984
diff
changeset
|
45 |
52cee44aa1a0
testing: add a `write_file` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46984
diff
changeset
|
46 |
52cee44aa1a0
testing: add a `write_file` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46984
diff
changeset
|
47 def write_file(path, content=b''): |
47804
5ad37164a8fe
testing: make sure write_file is "atomic"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47657
diff
changeset
|
48 if content: |
5ad37164a8fe
testing: make sure write_file is "atomic"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47657
diff
changeset
|
49 write_path = b'%s.tmp' % path |
5ad37164a8fe
testing: make sure write_file is "atomic"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47657
diff
changeset
|
50 else: |
5ad37164a8fe
testing: make sure write_file is "atomic"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47657
diff
changeset
|
51 write_path = path |
5ad37164a8fe
testing: make sure write_file is "atomic"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47657
diff
changeset
|
52 with open(write_path, 'wb') as f: |
46985
52cee44aa1a0
testing: add a `write_file` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46984
diff
changeset
|
53 f.write(content) |
47804
5ad37164a8fe
testing: make sure write_file is "atomic"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47657
diff
changeset
|
54 if path != write_path: |
5ad37164a8fe
testing: make sure write_file is "atomic"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47657
diff
changeset
|
55 os.rename(write_path, path) |