test-lock-badness.t
178 lines
| 4.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 | ||||
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 | ||
r52390 | $ 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; | ||||
Mads Kiilerich
|
r20380 | > EOF | ||
r52390 | $ clean_sync() { | |||
> rm -f "$SYNC_FILE_LOCKED" | ||||
> rm -f "$SYNC_FILE_TRYING_LOCK" | ||||
> } | ||||
$ clean_sync | ||||
Adrian Buehlmann
|
r12071 | $ echo b > b/b | ||
r52390 | $ 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 | ||||
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. | ||
r52390 | $ clean_sync | |||
Boris Feld
|
r35210 | $ echo b > b/c | ||
r52390 | $ 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 | ||||
Boris Feld
|
r35210 | $ wait | ||
$ cat preup-stdout | ||||
$ cat preup-stderr | ||||
$ cat stdout | ||||
adding c | ||||
On processs waiting on another, warning disabled. | ||||
r52390 | $ clean_sync | |||
Boris Feld
|
r35210 | $ echo b > b/d | ||
r52390 | $ 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 | ||||
Boris Feld
|
r35210 | $ 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) | ||||
r52390 | $ clean_sync | |||
Boris Feld
|
r35210 | $ echo b > b/e | ||
r52390 | $ 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 | ||||
Boris Feld
|
r35210 | $ wait | ||
$ cat preup-stdout | ||||
r52390 | running hook pre-update: sh $TESTTMP/waiter.sh | |||
Boris Feld
|
r35210 | 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) | ||||
r52390 | $ clean_sync | |||
Boris Feld
|
r35210 | $ echo b > b/f | ||
r52390 | $ 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 | ||||
Boris Feld
|
r35210 | $ wait | ||
$ cat preup-stdout | ||||
r52390 | running hook pre-update: sh $TESTTMP/waiter.sh | |||
Boris Feld
|
r35210 | 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 | ||
Arseniy Alekseyev
|
r51215 | abort: could not lock repository a: $EACCES$ | ||
Martin von Zweigbergk
|
r46432 | [20] | ||
Adrian Buehlmann
|
r12071 | |||
$ chmod 700 a/.hg/store | ||||