mercurial/testing/__init__.py
author Pierre-Yves David <pierre-yves.david@octobus.net>
Mon, 30 Jan 2023 19:21:34 +0100
changeset 50078 e333cc169c45
parent 48966 6000f5b25c9b
child 49672 8e0d823ef182
permissions -rw-r--r--
dirstate: rename `pendingparentchange` to `is_changing_parents` This is clearer and more inline witht he other change we did.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
46984
99c629101b73 testing: add a utility function to wait for file create
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 39788
diff changeset
     1
import os
99c629101b73 testing: add a utility function to wait for file create
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 39788
diff changeset
     2
import time
99c629101b73 testing: add a utility function to wait for file create
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 39788
diff changeset
     3
99c629101b73 testing: add a utility function to wait for file create
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 39788
diff changeset
     4
99c629101b73 testing: add a utility function to wait for file create
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 39788
diff changeset
     5
# 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: 39788
diff changeset
     6
#
99c629101b73 testing: add a utility function to wait for file create
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 39788
diff changeset
     7
# 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: 39788
diff changeset
     8
# 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: 39788
diff changeset
     9
environ = getattr(os, 'environ')
99c629101b73 testing: add a utility function to wait for file create
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 39788
diff changeset
    10
99c629101b73 testing: add a utility function to wait for file create
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 39788
diff changeset
    11
99c629101b73 testing: add a utility function to wait for file create
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 39788
diff changeset
    12
def _timeout_factor():
99c629101b73 testing: add a utility function to wait for file create
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 39788
diff changeset
    13
    """return the current modification to timeout"""
47498
2dac94edd98d testing: fix _timeout_factor
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46985
diff changeset
    14
    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: 39788
diff changeset
    15
    current = int(environ.get('HGTEST_TIMEOUT', default))
47498
2dac94edd98d testing: fix _timeout_factor
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46985
diff changeset
    16
    if current == 0:
2dac94edd98d testing: fix _timeout_factor
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46985
diff changeset
    17
        return 1
46984
99c629101b73 testing: add a utility function to wait for file create
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 39788
diff changeset
    18
    return current / float(default)
99c629101b73 testing: add a utility function to wait for file create
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 39788
diff changeset
    19
99c629101b73 testing: add a utility function to wait for file create
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 39788
diff changeset
    20
99c629101b73 testing: add a utility function to wait for file create
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 39788
diff changeset
    21
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: 39788
diff changeset
    22
    timeout *= _timeout_factor()
99c629101b73 testing: add a utility function to wait for file create
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 39788
diff changeset
    23
    start = time.time()
99c629101b73 testing: add a utility function to wait for file create
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 39788
diff changeset
    24
    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: 47498
diff changeset
    25
        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: 39788
diff changeset
    26
            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: 39788
diff changeset
    27
        time.sleep(0.01)
46985
52cee44aa1a0 testing: add a `write_file` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46984
diff changeset
    28
52cee44aa1a0 testing: add a `write_file` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46984
diff changeset
    29
52cee44aa1a0 testing: add a `write_file` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46984
diff changeset
    30
def write_file(path, content=b''):
47799
5ad37164a8fe testing: make sure write_file is "atomic"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47657
diff changeset
    31
    if content:
5ad37164a8fe testing: make sure write_file is "atomic"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47657
diff changeset
    32
        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
    33
    else:
5ad37164a8fe testing: make sure write_file is "atomic"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47657
diff changeset
    34
        write_path = path
5ad37164a8fe testing: make sure write_file is "atomic"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47657
diff changeset
    35
    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
    36
        f.write(content)
47799
5ad37164a8fe testing: make sure write_file is "atomic"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47657
diff changeset
    37
    if path != write_path:
5ad37164a8fe testing: make sure write_file is "atomic"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47657
diff changeset
    38
        os.rename(write_path, path)