test-lock-badness.t
76 lines
| 1.9 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 | ||||
> from mercurial import cmdutil, error, util | ||||
> | ||||
> cmdtable = {} | ||||
> command = cmdutil.command(cmdtable) | ||||
> | ||||
> def acquiretestlock(repo, releaseexc): | ||||
> def unlock(): | ||||
> if releaseexc: | ||||
> raise util.Abort('expected release exception') | ||||
> l = repo._lock(repo.vfs, 'testlock', False, unlock, None, 'test lock') | ||||
> return l | ||||
> | ||||
> @command('testlockexc') | ||||
> def testlockexc(ui, repo): | ||||
> testlock = acquiretestlock(repo, True) | ||||
> try: | ||||
> testlock.release() | ||||
> finally: | ||||
> try: | ||||
> testlock = acquiretestlock(repo, False) | ||||
> except error.LockHeld: | ||||
> raise util.Abort('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] | ||||
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 & | ||
$ hg -R b up -q --config hooks.pre-update="python:`pwd`/hooks.py:sleephalf" | ||||
waiting for lock on working directory of b held by '*:*' (glob) | ||||
Simon Heimberg
|
r20653 | got lock after ? seconds (glob) | ||
Mads Kiilerich
|
r20380 | $ wait | ||
$ cat stdout | ||||
Adrian Buehlmann
|
r12071 | adding b | ||
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 | ||||