view tests/testlib/ext-stream-clone-steps.py @ 52391:3f0cf7bb3086

stream: preserve volatile cache early Since cache file are not protected by the lock, their state might change between their initial detection, the computation of their size and they preservation by the VolatileManager. So we gather all theses step in a single one to avoid such race. This also handle disappearing cache file in the "copy/hardlink" clone cases.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Wed, 04 Dec 2024 23:31:46 +0100
parents 11484a19cd77
children
line wrap: on
line source

# A utility extension that help taking a break during streamclone operation
#
# This extension is used through two environment variable
#
# HG_TEST_STREAM_WALKED_FILE_3
#
#   path of a file created by the process generating the streaming clone when
#   it is done gathering data and is ready to unlock the repository and move
#   to the streaming of content.
#
# HG_TEST_STREAM_WALKED_FILE_4
#
#   path of a file to be manually created to let the process generating the
#   streaming clone proceed to streaming file content.

from mercurial import (
    encoding,
    extensions,
    streamclone,
    testing,
)


WALKED_FILE_1 = encoding.environ[b'HG_TEST_STREAM_WALKED_FILE_1']
WALKED_FILE_2 = encoding.environ[b'HG_TEST_STREAM_WALKED_FILE_2']
WALKED_FILE_3 = encoding.environ[b'HG_TEST_STREAM_WALKED_FILE_3']
WALKED_FILE_4 = encoding.environ[b'HG_TEST_STREAM_WALKED_FILE_4']


def _test_sync_point_walk_1_2(orig, repo):
    testing.write_file(WALKED_FILE_1)
    testing.wait_file(WALKED_FILE_2)


def _test_sync_point_walk_3(orig, repo):
    testing.write_file(WALKED_FILE_3)


def _test_sync_point_walk_4(orig, repo):
    assert repo._currentlock(repo._lockref) is None
    testing.wait_file(WALKED_FILE_4)


def uisetup(ui):
    extensions.wrapfunction(
        streamclone, '_test_sync_point_walk_1_2', _test_sync_point_walk_1_2
    )

    extensions.wrapfunction(
        streamclone, '_test_sync_point_walk_3', _test_sync_point_walk_3
    )

    extensions.wrapfunction(
        streamclone, '_test_sync_point_walk_4', _test_sync_point_walk_4
    )