tests/lockdelay.py
author Pierre-Yves David <pierre-yves.david@ens-lyon.org>
Sun, 26 Mar 2017 15:46:09 +0200
changeset 31643 259e5dc21c1d
parent 30068 a76d5ba7ac43
child 43076 2372284d9457
permissions -rw-r--r--
histedit: backout changeset 6f0b7475cf9a Before 6f0b7475cf9a, histedit (like rebase) was only creating markers on final success from the old-rewritten node to the newly created nodes (as of before 6f0b7475cf9a). In case of abort the aborted attempt were stripped to restore the repository in its state prior to the attempt. This use of strip was on purpose. Using markers in this case introduces various issues. The main one is that keeping the partial result of histedit as obsolete prevents us to recreates the same nodes in a second attempt. The same operation will lead to an identical results, using an identical node that already exists in the repository as obsolete. To conclude, we cannot and should not switch to obsolescence markers creation on histedit --abort and we backout 6f0b7475cf9a. A test to catch this class of issue will be introduced in the next changeset.

# Dummy extension that adds a delay after acquiring a lock.
#
# This extension can be used to test race conditions between lock acquisition.

from __future__ import absolute_import

import os
import time

def reposetup(ui, repo):

    class delayedlockrepo(repo.__class__):
        def lock(self):
            delay = float(os.environ.get('HGPRELOCKDELAY', '0.0'))
            if delay:
                time.sleep(delay)
            res = super(delayedlockrepo, self).lock()
            delay = float(os.environ.get('HGPOSTLOCKDELAY', '0.0'))
            if delay:
                time.sleep(delay)
            return res
    repo.__class__ = delayedlockrepo