test-lock-badness.t
78 lines
| 2.0 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 | ||||
Pierre-Yves David
|
r26587 | > from mercurial import cmdutil, error, error | ||
Siddharth Agarwal
|
r23032 | > | ||
> cmdtable = {} | ||||
> command = cmdutil.command(cmdtable) | ||||
> | ||||
> def acquiretestlock(repo, releaseexc): | ||||
> def unlock(): | ||||
> if releaseexc: | ||||
Pierre-Yves David
|
r26587 | > raise error.Abort('expected release exception') | ||
Siddharth Agarwal
|
r23032 | > 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: | ||||
Pierre-Yves David
|
r26587 | > raise error.Abort('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" \ | ||
> > preup 2>&1 | ||||
$ wait | ||||
$ cat preup | ||||
Mads Kiilerich
|
r20380 | waiting for lock on working directory of b held by '*:*' (glob) | ||
timeless
|
r29008 | got lock after * seconds (glob) | ||
Mads Kiilerich
|
r20380 | $ 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 | ||||