Mercurial > hg
annotate tests/test-lock-badness.t @ 23603:d74eb8d477d5
memctx: calculate manifest more efficiently
Before this patch, "memctx._manifest" updates all entries in the
(parent) manifest. But this is inefficiency, because almost all files
may be clean in that context.
On the other hand, just updating entries for changed "files" specified
at construction causes unexpected abortion, when there is at least one
newly removed file (see issue4470 for detail).
To calculate manifest more efficiently, this patch replaces
"pman.iteritems()" for the loop by "self._status.modified" to avoid
updating entries for clean or removed files
Examination of removal is also omitted, because removed files aren't
treated in this loop (= "self[f]" returns not None always).
author | FUJIWARA Katsunori <foozy@lares.dti.ne.jp> |
---|---|
date | Fri, 19 Dec 2014 00:11:56 +0900 |
parents | f484be02bd35 |
children | 6fbe35588433 |
rev | line source |
---|---|
22047
8fb6844a4ff1
tests: change some #ifs to #requires
Matt Mackall <mpm@selenic.com>
parents:
20969
diff
changeset
|
1 #require unix-permissions no-root no-windows |
20380
c697b70f295f
localrepo: give a sigh of relief when getting lock after waiting for it
Mads Kiilerich <madski@unity3d.com>
parents:
20008
diff
changeset
|
2 |
c697b70f295f
localrepo: give a sigh of relief when getting lock after waiting for it
Mads Kiilerich <madski@unity3d.com>
parents:
20008
diff
changeset
|
3 Prepare |
c697b70f295f
localrepo: give a sigh of relief when getting lock after waiting for it
Mads Kiilerich <madski@unity3d.com>
parents:
20008
diff
changeset
|
4 |
12071
45ff6dcf82ea
tests: unify test-lock-badness
Adrian Buehlmann <adrian@cadifra.com>
parents:
3853
diff
changeset
|
5 $ hg init a |
45ff6dcf82ea
tests: unify test-lock-badness
Adrian Buehlmann <adrian@cadifra.com>
parents:
3853
diff
changeset
|
6 $ echo a > a/a |
45ff6dcf82ea
tests: unify test-lock-badness
Adrian Buehlmann <adrian@cadifra.com>
parents:
3853
diff
changeset
|
7 $ hg -R a ci -A -m a |
45ff6dcf82ea
tests: unify test-lock-badness
Adrian Buehlmann <adrian@cadifra.com>
parents:
3853
diff
changeset
|
8 adding a |
45ff6dcf82ea
tests: unify test-lock-badness
Adrian Buehlmann <adrian@cadifra.com>
parents:
3853
diff
changeset
|
9 |
45ff6dcf82ea
tests: unify test-lock-badness
Adrian Buehlmann <adrian@cadifra.com>
parents:
3853
diff
changeset
|
10 $ hg clone a b |
45ff6dcf82ea
tests: unify test-lock-badness
Adrian Buehlmann <adrian@cadifra.com>
parents:
3853
diff
changeset
|
11 updating to branch default |
45ff6dcf82ea
tests: unify test-lock-badness
Adrian Buehlmann <adrian@cadifra.com>
parents:
3853
diff
changeset
|
12 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
2016
ff5c9a92f556
fix backtrace printed when cannot get lock.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
13 |
23032
f484be02bd35
lock: while releasing, unlink lockfile even if the release function throws
Siddharth Agarwal <sid0@fb.com>
parents:
22047
diff
changeset
|
14 Test that raising an exception in the release function doesn't cause the lock to choke |
f484be02bd35
lock: while releasing, unlink lockfile even if the release function throws
Siddharth Agarwal <sid0@fb.com>
parents:
22047
diff
changeset
|
15 |
f484be02bd35
lock: while releasing, unlink lockfile even if the release function throws
Siddharth Agarwal <sid0@fb.com>
parents:
22047
diff
changeset
|
16 $ cat > testlock.py << EOF |
f484be02bd35
lock: while releasing, unlink lockfile even if the release function throws
Siddharth Agarwal <sid0@fb.com>
parents:
22047
diff
changeset
|
17 > from mercurial import cmdutil, error, util |
f484be02bd35
lock: while releasing, unlink lockfile even if the release function throws
Siddharth Agarwal <sid0@fb.com>
parents:
22047
diff
changeset
|
18 > |
f484be02bd35
lock: while releasing, unlink lockfile even if the release function throws
Siddharth Agarwal <sid0@fb.com>
parents:
22047
diff
changeset
|
19 > cmdtable = {} |
f484be02bd35
lock: while releasing, unlink lockfile even if the release function throws
Siddharth Agarwal <sid0@fb.com>
parents:
22047
diff
changeset
|
20 > command = cmdutil.command(cmdtable) |
f484be02bd35
lock: while releasing, unlink lockfile even if the release function throws
Siddharth Agarwal <sid0@fb.com>
parents:
22047
diff
changeset
|
21 > |
f484be02bd35
lock: while releasing, unlink lockfile even if the release function throws
Siddharth Agarwal <sid0@fb.com>
parents:
22047
diff
changeset
|
22 > def acquiretestlock(repo, releaseexc): |
f484be02bd35
lock: while releasing, unlink lockfile even if the release function throws
Siddharth Agarwal <sid0@fb.com>
parents:
22047
diff
changeset
|
23 > def unlock(): |
f484be02bd35
lock: while releasing, unlink lockfile even if the release function throws
Siddharth Agarwal <sid0@fb.com>
parents:
22047
diff
changeset
|
24 > if releaseexc: |
f484be02bd35
lock: while releasing, unlink lockfile even if the release function throws
Siddharth Agarwal <sid0@fb.com>
parents:
22047
diff
changeset
|
25 > raise util.Abort('expected release exception') |
f484be02bd35
lock: while releasing, unlink lockfile even if the release function throws
Siddharth Agarwal <sid0@fb.com>
parents:
22047
diff
changeset
|
26 > l = repo._lock(repo.vfs, 'testlock', False, unlock, None, 'test lock') |
f484be02bd35
lock: while releasing, unlink lockfile even if the release function throws
Siddharth Agarwal <sid0@fb.com>
parents:
22047
diff
changeset
|
27 > return l |
f484be02bd35
lock: while releasing, unlink lockfile even if the release function throws
Siddharth Agarwal <sid0@fb.com>
parents:
22047
diff
changeset
|
28 > |
f484be02bd35
lock: while releasing, unlink lockfile even if the release function throws
Siddharth Agarwal <sid0@fb.com>
parents:
22047
diff
changeset
|
29 > @command('testlockexc') |
f484be02bd35
lock: while releasing, unlink lockfile even if the release function throws
Siddharth Agarwal <sid0@fb.com>
parents:
22047
diff
changeset
|
30 > def testlockexc(ui, repo): |
f484be02bd35
lock: while releasing, unlink lockfile even if the release function throws
Siddharth Agarwal <sid0@fb.com>
parents:
22047
diff
changeset
|
31 > testlock = acquiretestlock(repo, True) |
f484be02bd35
lock: while releasing, unlink lockfile even if the release function throws
Siddharth Agarwal <sid0@fb.com>
parents:
22047
diff
changeset
|
32 > try: |
f484be02bd35
lock: while releasing, unlink lockfile even if the release function throws
Siddharth Agarwal <sid0@fb.com>
parents:
22047
diff
changeset
|
33 > testlock.release() |
f484be02bd35
lock: while releasing, unlink lockfile even if the release function throws
Siddharth Agarwal <sid0@fb.com>
parents:
22047
diff
changeset
|
34 > finally: |
f484be02bd35
lock: while releasing, unlink lockfile even if the release function throws
Siddharth Agarwal <sid0@fb.com>
parents:
22047
diff
changeset
|
35 > try: |
f484be02bd35
lock: while releasing, unlink lockfile even if the release function throws
Siddharth Agarwal <sid0@fb.com>
parents:
22047
diff
changeset
|
36 > testlock = acquiretestlock(repo, False) |
f484be02bd35
lock: while releasing, unlink lockfile even if the release function throws
Siddharth Agarwal <sid0@fb.com>
parents:
22047
diff
changeset
|
37 > except error.LockHeld: |
f484be02bd35
lock: while releasing, unlink lockfile even if the release function throws
Siddharth Agarwal <sid0@fb.com>
parents:
22047
diff
changeset
|
38 > raise util.Abort('lockfile on disk even after releasing!') |
f484be02bd35
lock: while releasing, unlink lockfile even if the release function throws
Siddharth Agarwal <sid0@fb.com>
parents:
22047
diff
changeset
|
39 > testlock.release() |
f484be02bd35
lock: while releasing, unlink lockfile even if the release function throws
Siddharth Agarwal <sid0@fb.com>
parents:
22047
diff
changeset
|
40 > EOF |
f484be02bd35
lock: while releasing, unlink lockfile even if the release function throws
Siddharth Agarwal <sid0@fb.com>
parents:
22047
diff
changeset
|
41 $ cat >> $HGRCPATH << EOF |
f484be02bd35
lock: while releasing, unlink lockfile even if the release function throws
Siddharth Agarwal <sid0@fb.com>
parents:
22047
diff
changeset
|
42 > [extensions] |
f484be02bd35
lock: while releasing, unlink lockfile even if the release function throws
Siddharth Agarwal <sid0@fb.com>
parents:
22047
diff
changeset
|
43 > testlock=$TESTTMP/testlock.py |
f484be02bd35
lock: while releasing, unlink lockfile even if the release function throws
Siddharth Agarwal <sid0@fb.com>
parents:
22047
diff
changeset
|
44 > EOF |
f484be02bd35
lock: while releasing, unlink lockfile even if the release function throws
Siddharth Agarwal <sid0@fb.com>
parents:
22047
diff
changeset
|
45 |
f484be02bd35
lock: while releasing, unlink lockfile even if the release function throws
Siddharth Agarwal <sid0@fb.com>
parents:
22047
diff
changeset
|
46 $ hg -R b testlockexc |
f484be02bd35
lock: while releasing, unlink lockfile even if the release function throws
Siddharth Agarwal <sid0@fb.com>
parents:
22047
diff
changeset
|
47 abort: expected release exception |
f484be02bd35
lock: while releasing, unlink lockfile even if the release function throws
Siddharth Agarwal <sid0@fb.com>
parents:
22047
diff
changeset
|
48 [255] |
f484be02bd35
lock: while releasing, unlink lockfile even if the release function throws
Siddharth Agarwal <sid0@fb.com>
parents:
22047
diff
changeset
|
49 |
20380
c697b70f295f
localrepo: give a sigh of relief when getting lock after waiting for it
Mads Kiilerich <madski@unity3d.com>
parents:
20008
diff
changeset
|
50 One process waiting for another |
c697b70f295f
localrepo: give a sigh of relief when getting lock after waiting for it
Mads Kiilerich <madski@unity3d.com>
parents:
20008
diff
changeset
|
51 |
c697b70f295f
localrepo: give a sigh of relief when getting lock after waiting for it
Mads Kiilerich <madski@unity3d.com>
parents:
20008
diff
changeset
|
52 $ cat > hooks.py << EOF |
c697b70f295f
localrepo: give a sigh of relief when getting lock after waiting for it
Mads Kiilerich <madski@unity3d.com>
parents:
20008
diff
changeset
|
53 > import time |
c697b70f295f
localrepo: give a sigh of relief when getting lock after waiting for it
Mads Kiilerich <madski@unity3d.com>
parents:
20008
diff
changeset
|
54 > def sleepone(**x): time.sleep(1) |
c697b70f295f
localrepo: give a sigh of relief when getting lock after waiting for it
Mads Kiilerich <madski@unity3d.com>
parents:
20008
diff
changeset
|
55 > def sleephalf(**x): time.sleep(0.5) |
c697b70f295f
localrepo: give a sigh of relief when getting lock after waiting for it
Mads Kiilerich <madski@unity3d.com>
parents:
20008
diff
changeset
|
56 > EOF |
12071
45ff6dcf82ea
tests: unify test-lock-badness
Adrian Buehlmann <adrian@cadifra.com>
parents:
3853
diff
changeset
|
57 $ echo b > b/b |
20380
c697b70f295f
localrepo: give a sigh of relief when getting lock after waiting for it
Mads Kiilerich <madski@unity3d.com>
parents:
20008
diff
changeset
|
58 $ hg -R b ci -A -m b --config hooks.precommit="python:`pwd`/hooks.py:sleepone" > stdout & |
c697b70f295f
localrepo: give a sigh of relief when getting lock after waiting for it
Mads Kiilerich <madski@unity3d.com>
parents:
20008
diff
changeset
|
59 $ hg -R b up -q --config hooks.pre-update="python:`pwd`/hooks.py:sleephalf" |
c697b70f295f
localrepo: give a sigh of relief when getting lock after waiting for it
Mads Kiilerich <madski@unity3d.com>
parents:
20008
diff
changeset
|
60 waiting for lock on working directory of b held by '*:*' (glob) |
20653
3bfac190c7cd
tests: match time by a glob to fix intermittent failures of test-lock-badness.t
Simon Heimberg <simohe@besonet.ch>
parents:
20380
diff
changeset
|
61 got lock after ? seconds (glob) |
20380
c697b70f295f
localrepo: give a sigh of relief when getting lock after waiting for it
Mads Kiilerich <madski@unity3d.com>
parents:
20008
diff
changeset
|
62 warning: ignoring unknown working parent d2ae7f538514! |
c697b70f295f
localrepo: give a sigh of relief when getting lock after waiting for it
Mads Kiilerich <madski@unity3d.com>
parents:
20008
diff
changeset
|
63 $ wait |
c697b70f295f
localrepo: give a sigh of relief when getting lock after waiting for it
Mads Kiilerich <madski@unity3d.com>
parents:
20008
diff
changeset
|
64 $ cat stdout |
12071
45ff6dcf82ea
tests: unify test-lock-badness
Adrian Buehlmann <adrian@cadifra.com>
parents:
3853
diff
changeset
|
65 adding b |
45ff6dcf82ea
tests: unify test-lock-badness
Adrian Buehlmann <adrian@cadifra.com>
parents:
3853
diff
changeset
|
66 |
20380
c697b70f295f
localrepo: give a sigh of relief when getting lock after waiting for it
Mads Kiilerich <madski@unity3d.com>
parents:
20008
diff
changeset
|
67 Pushing to a local read-only repo that can't be locked |
c697b70f295f
localrepo: give a sigh of relief when getting lock after waiting for it
Mads Kiilerich <madski@unity3d.com>
parents:
20008
diff
changeset
|
68 |
12071
45ff6dcf82ea
tests: unify test-lock-badness
Adrian Buehlmann <adrian@cadifra.com>
parents:
3853
diff
changeset
|
69 $ chmod 100 a/.hg/store |
45ff6dcf82ea
tests: unify test-lock-badness
Adrian Buehlmann <adrian@cadifra.com>
parents:
3853
diff
changeset
|
70 |
45ff6dcf82ea
tests: unify test-lock-badness
Adrian Buehlmann <adrian@cadifra.com>
parents:
3853
diff
changeset
|
71 $ hg -R b push a |
45ff6dcf82ea
tests: unify test-lock-badness
Adrian Buehlmann <adrian@cadifra.com>
parents:
3853
diff
changeset
|
72 pushing to a |
20969
7a679918ee2b
localrepo: add unbundle support
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20653
diff
changeset
|
73 searching for changes |
12071
45ff6dcf82ea
tests: unify test-lock-badness
Adrian Buehlmann <adrian@cadifra.com>
parents:
3853
diff
changeset
|
74 abort: could not lock repository a: Permission denied |
12316
4134686b83e1
tests: add exit codes to unified tests
Matt Mackall <mpm@selenic.com>
parents:
12071
diff
changeset
|
75 [255] |
12071
45ff6dcf82ea
tests: unify test-lock-badness
Adrian Buehlmann <adrian@cadifra.com>
parents:
3853
diff
changeset
|
76 |
45ff6dcf82ea
tests: unify test-lock-badness
Adrian Buehlmann <adrian@cadifra.com>
parents:
3853
diff
changeset
|
77 $ chmod 700 a/.hg/store |