Mercurial > hg
view tests/test-lock-badness.t @ 51833:6388fd855f66 stable
setup: handle removal of old MSVC compiler from setuptools 65.0 (issue6910)
It was removed a few years ago[1]. When trying to reproduce locally using a
clean py3.12 as called out in the bug report, `setuptools` wasn't installed at
all, and needed a `pip install` to fix a `ModuleNotFoundError` when building
locally. Maybe that needs to be in the requirements clause now.
It looks like this "private" module was added in setuptools 48.0.[2] I can't
find a changelog of what version was included in which version of python, and
the changelog for pip has a huge gap between when it called out 67.6.1 in `pip`
23.1 (2023-04-15), and 41.4.0 in `pip` 19.3 (2019-10-14).[3] So, we'll just add
to the existing code instead of replacing it, for safety.
[1] https://github.com/pypa/setuptools/commit/cc017c77948737d131f683e0c25cd37bc639b8fc
[2] https://github.com/pypa/setuptools/commit/d034a5ec7f707499139f90eb846b9e720923124c
[3] https://pip.pypa.io/en/stable/news/
author | Matt Harbison <mharbison@atto.com> |
---|---|
date | Thu, 05 Sep 2024 15:37:14 -0400 |
parents | 9da3fcc5f70f |
children |
line wrap: on
line source
#require unix-permissions no-root no-windows Prepare $ hg init a $ echo a > a/a $ hg -R a ci -A -m a adding a $ hg clone a b updating to branch default 1 files updated, 0 files merged, 0 files removed, 0 files unresolved Test that raising an exception in the release function doesn't cause the lock to choke $ cat > testlock.py << EOF > from mercurial import error, registrar > > cmdtable = {} > command = registrar.command(cmdtable) > > def acquiretestlock(repo, releaseexc): > def unlock(): > if releaseexc: > raise error.Abort(b'expected release exception') > l = repo._lock(repo.vfs, b'testlock', False, unlock, None, b'test lock') > return l > > @command(b'testlockexc') > def testlockexc(ui, repo): > testlock = acquiretestlock(repo, True) > try: > testlock.release() > finally: > try: > testlock = acquiretestlock(repo, False) > except error.LockHeld: > raise error.Abort(b'lockfile on disk even after releasing!') > testlock.release() > EOF $ cat >> $HGRCPATH << EOF > [extensions] > testlock=$TESTTMP/testlock.py > EOF $ hg -R b testlockexc abort: expected release exception [255] One process waiting for another $ SYNC_FILE_LOCKED="$TESTTMP/sync-file-locked" $ export SYNC_FILE_LOCKED $ SYNC_FILE_TRYING_LOCK="$TESTTMP/sync-file-trying-lock" $ export SYNC_FILE_TRYING_LOCK $ cat << EOF > locker.sh > $RUNTESTDIR/testlib/wait-on-file 10 $SYNC_FILE_TRYING_LOCK $SYNC_FILE_LOCKED; > EOF $ cat << EOF > waiter.sh > $RUNTESTDIR/testlib/wait-on-file 10 $SYNC_FILE_LOCKED; > EOF $ clean_sync() { > rm -f "$SYNC_FILE_LOCKED" > rm -f "$SYNC_FILE_TRYING_LOCK" > } $ clean_sync $ echo b > b/b $ hg -R b ci -A -m b \ > --config hooks.precommit="sh $TESTTMP/locker.sh" \ > > stdout & $ hg -R b up -q \ > --config ui.timeout.warn=0 \ > --config hooks.pre-update="sh $TESTTMP/waiter.sh" \ > --config devel.lock-wait-sync-file="$SYNC_FILE_TRYING_LOCK" \ > > preup-stdout 2> preup-stderr $ wait $ cat preup-stdout $ cat preup-stderr waiting for lock on working directory of b held by process '*' on host '*' (glob) got lock after * seconds (glob) $ cat stdout adding b On processs waiting on another, warning after a long time. $ clean_sync $ echo b > b/c $ hg -R b ci -A -m b \ > --config hooks.precommit="sh $TESTTMP/locker.sh" \ > > stdout & $ hg -R b up -q \ > --config hooks.pre-update="sh $TESTTMP/waiter.sh" \ > --config devel.lock-wait-sync-file="$SYNC_FILE_TRYING_LOCK" \ > --config ui.timeout.warn=250 \ > > preup-stdout 2> preup-stderr $ wait $ cat preup-stdout $ cat preup-stderr $ cat stdout adding c On processs waiting on another, warning disabled. $ clean_sync $ echo b > b/d $ hg -R b ci -A -m b \ > --config hooks.precommit="sh $TESTTMP/locker.sh" \ > > stdout & $ hg -R b up -q \ > --config hooks.pre-update="sh $TESTTMP/waiter.sh" \ > --config devel.lock-wait-sync-file="$SYNC_FILE_TRYING_LOCK" \ > --config ui.timeout.warn=-1 \ > > preup-stdout 2>preup-stderr $ wait $ cat preup-stdout $ cat preup-stderr $ cat stdout adding d check we still print debug output On processs waiting on another, warning after a long time (debug output on) $ clean_sync $ echo b > b/e $ hg -R b ci -A -m b \ > --config hooks.precommit="sh $TESTTMP/locker.sh" \ > > stdout & $ hg -R b up \ > --config hooks.pre-update="sh $TESTTMP/waiter.sh" \ > --config devel.lock-wait-sync-file="$SYNC_FILE_TRYING_LOCK" \ > --config ui.timeout.warn=250 --debug \ > > preup-stdout 2>preup-stderr $ wait $ cat preup-stdout running hook pre-update: sh $TESTTMP/waiter.sh waiting for lock on working directory of b held by process '*' on host '*' (glob) got lock after * seconds (glob) 0 files updated, 0 files merged, 0 files removed, 0 files unresolved $ cat preup-stderr $ cat stdout adding e On processs waiting on another, warning disabled, (debug output on) $ clean_sync $ echo b > b/f $ hg -R b ci -A -m b \ > --config hooks.precommit="sh $TESTTMP/locker.sh" \ > > stdout & $ hg -R b up \ > --config hooks.pre-update="sh $TESTTMP/waiter.sh" \ > --config devel.lock-wait-sync-file="$SYNC_FILE_TRYING_LOCK" \ > --config ui.timeout.warn=-1 --debug\ > > preup-stdout 2>preup-stderr $ wait $ cat preup-stdout running hook pre-update: sh $TESTTMP/waiter.sh waiting for lock on working directory of b held by process '*' on host '*' (glob) got lock after * seconds (glob) 0 files updated, 0 files merged, 0 files removed, 0 files unresolved $ cat preup-stderr $ cat stdout adding f Pushing to a local read-only repo that can't be locked $ chmod 100 a/.hg/store $ hg -R b push a pushing to a searching for changes abort: could not lock repository a: $EACCES$ [20] $ chmod 700 a/.hg/store