test-lock-badness.t
141 lines
| 4.1 KiB
| text/troff
|
Tads3Lexer
/ tests / test-lock-badness.t
Matt Mackall
|
r22047 | #require unix-permissions no-root no-windows | ||
Mads Kiilerich
|
r20380 | |||
Prepare | ||||
Adrian Buehlmann
|
r12071 | $ 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 | ||||
Siddharth Agarwal
|
r23032 | Test that raising an exception in the release function doesn't cause the lock to choke | ||
$ cat > testlock.py << EOF | ||||
Yuya Nishihara
|
r32337 | > from mercurial import error, registrar | ||
Siddharth Agarwal
|
r23032 | > | ||
> cmdtable = {} | ||||
Yuya Nishihara
|
r32337 | > command = registrar.command(cmdtable) | ||
Siddharth Agarwal
|
r23032 | > | ||
> def acquiretestlock(repo, releaseexc): | ||||
> def unlock(): | ||||
> if releaseexc: | ||||
Yuya Nishihara
|
r36661 | > raise error.Abort(b'expected release exception') | ||
> l = repo._lock(repo.vfs, b'testlock', False, unlock, None, b'test lock') | ||||
Siddharth Agarwal
|
r23032 | > return l | ||
> | ||||
Pulkit Goyal
|
r33097 | > @command(b'testlockexc') | ||
Siddharth Agarwal
|
r23032 | > def testlockexc(ui, repo): | ||
> testlock = acquiretestlock(repo, True) | ||||
> try: | ||||
> testlock.release() | ||||
> finally: | ||||
> try: | ||||
> testlock = acquiretestlock(repo, False) | ||||
> except error.LockHeld: | ||||
Yuya Nishihara
|
r36661 | > raise error.Abort(b'lockfile on disk even after releasing!') | ||
Siddharth Agarwal
|
r23032 | > testlock.release() | ||
> EOF | ||||
$ cat >> $HGRCPATH << EOF | ||||
> [extensions] | ||||
> testlock=$TESTTMP/testlock.py | ||||
> EOF | ||||
$ hg -R b testlockexc | ||||
abort: expected release exception | ||||
[255] | ||||
Mads Kiilerich
|
r20380 | One process waiting for another | ||
$ cat > hooks.py << EOF | ||||
> import time | ||||
> def sleepone(**x): time.sleep(1) | ||||
> def sleephalf(**x): time.sleep(0.5) | ||||
> EOF | ||||
Adrian Buehlmann
|
r12071 | $ echo b > b/b | ||
Mads Kiilerich
|
r20380 | $ hg -R b ci -A -m b --config hooks.precommit="python:`pwd`/hooks.py:sleepone" > stdout & | ||
timeless
|
r29008 | $ hg -R b up -q --config hooks.pre-update="python:`pwd`/hooks.py:sleephalf" \ | ||
Boris Feld
|
r35210 | > > preup-stdout 2>preup-stderr | ||
timeless
|
r29008 | $ wait | ||
Boris Feld
|
r35210 | $ cat preup-stdout | ||
$ cat preup-stderr | ||||
Mark Ignacio
|
r29883 | waiting for lock on working directory of b held by process '*' on host '*' (glob) | ||
timeless
|
r29008 | got lock after * seconds (glob) | ||
Mads Kiilerich
|
r20380 | $ cat stdout | ||
Adrian Buehlmann
|
r12071 | adding b | ||
Boris Feld
|
r35210 | On processs waiting on another, warning after a long time. | ||
$ echo b > b/c | ||||
$ hg -R b ci -A -m b --config hooks.precommit="python:`pwd`/hooks.py:sleepone" > stdout & | ||||
$ hg -R b up -q --config hooks.pre-update="python:`pwd`/hooks.py:sleephalf" \ | ||||
> --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. | ||||
$ echo b > b/d | ||||
$ hg -R b ci -A -m b --config hooks.precommit="python:`pwd`/hooks.py:sleepone" > stdout & | ||||
$ hg -R b up -q --config hooks.pre-update="python:`pwd`/hooks.py:sleephalf" \ | ||||
> --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) | ||||
$ echo b > b/e | ||||
$ hg -R b ci -A -m b --config hooks.precommit="python:`pwd`/hooks.py:sleepone" > stdout & | ||||
$ hg -R b up --config hooks.pre-update="python:`pwd`/hooks.py:sleephalf" \ | ||||
> --config ui.timeout.warn=250 --debug\ | ||||
> > preup-stdout 2>preup-stderr | ||||
$ wait | ||||
$ cat preup-stdout | ||||
calling hook pre-update: hghook_pre-update.sleephalf | ||||
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) | ||||
$ echo b > b/f | ||||
$ hg -R b ci -A -m b --config hooks.precommit="python:`pwd`/hooks.py:sleepone" > stdout & | ||||
$ hg -R b up --config hooks.pre-update="python:`pwd`/hooks.py:sleephalf" \ | ||||
> --config ui.timeout.warn=-1 --debug\ | ||||
> > preup-stdout 2>preup-stderr | ||||
$ wait | ||||
$ cat preup-stdout | ||||
calling hook pre-update: hghook_pre-update.sleephalf | ||||
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 | ||||
Mads Kiilerich
|
r20380 | Pushing to a local read-only repo that can't be locked | ||
Adrian Buehlmann
|
r12071 | $ chmod 100 a/.hg/store | ||
$ hg -R b push a | ||||
pushing to a | ||||
Pierre-Yves David
|
r20969 | searching for changes | ||
Adrian Buehlmann
|
r12071 | abort: could not lock repository a: Permission denied | ||
Matt Mackall
|
r12316 | [255] | ||
Adrian Buehlmann
|
r12071 | |||
$ chmod 700 a/.hg/store | ||||