Mercurial > hg > mercurial-crew-with-dirclash
annotate mercurial/lock.py @ 653:94cdd02792b5
Fix corruption resulting from skipping parts of a revision group
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Fix corruption resulting from skipping parts of a revision group
We were occassionally losing track of what revision a delta applied to
when we skipped over deltas we already had and applying the delta
against the wrong base. This could result in coredumps from mpatch,
consistency errors, or failed verify.
manifest hash: fcf20a8abfd81f08fae2398136b2ed66216b2083
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (GNU/Linux)
iD8DBQFCzu5SywK+sNU5EO8RAi10AJ9cqIfQzOzbcdH36t1LR/rY+UMtHwCeM79p
Dtv+Jh0McLZr6nf4iJyhDgI=
=5o6U
-----END PGP SIGNATURE-----
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Fri, 08 Jul 2005 13:21:22 -0800 |
parents | 03f27b1381f9 |
children | 5ca319a641e1 574869103985 |
rev | line source |
---|---|
161 | 1 # lock.py - simple locking scheme for mercurial |
2 # | |
3 # Copyright 2005 Matt Mackall <mpm@selenic.com> | |
4 # | |
5 # This software may be used and distributed according to the terms | |
6 # of the GNU General Public License, incorporated herein by reference. | |
7 | |
8 import os, time | |
422
10c43444a38e
[PATCH] Enables lock work under the other 'OS'
mpm@selenic.com
parents:
161
diff
changeset
|
9 import util |
161 | 10 |
11 class LockHeld(Exception): | |
12 pass | |
13 | |
14 class lock: | |
15 def __init__(self, file, wait = 1): | |
16 self.f = file | |
17 self.held = 0 | |
18 self.wait = wait | |
19 self.lock() | |
20 | |
21 def __del__(self): | |
22 self.release() | |
23 | |
24 def lock(self): | |
25 while 1: | |
26 try: | |
27 self.trylock() | |
28 return 1 | |
29 except LockHeld, inst: | |
30 if self.wait: | |
31 time.sleep(1) | |
32 continue | |
33 raise inst | |
515 | 34 |
161 | 35 def trylock(self): |
36 pid = os.getpid() | |
37 try: | |
422
10c43444a38e
[PATCH] Enables lock work under the other 'OS'
mpm@selenic.com
parents:
161
diff
changeset
|
38 util.makelock(str(pid), self.f) |
161 | 39 self.held = 1 |
40 except: | |
422
10c43444a38e
[PATCH] Enables lock work under the other 'OS'
mpm@selenic.com
parents:
161
diff
changeset
|
41 raise LockHeld(util.readlock(self.f)) |
161 | 42 |
43 def release(self): | |
44 if self.held: | |
45 self.held = 0 | |
503
c6a2e41c8c60
Fix troubles with clone and exception handling
mpm@selenic.com
parents:
429
diff
changeset
|
46 try: |
c6a2e41c8c60
Fix troubles with clone and exception handling
mpm@selenic.com
parents:
429
diff
changeset
|
47 os.unlink(self.f) |
c6a2e41c8c60
Fix troubles with clone and exception handling
mpm@selenic.com
parents:
429
diff
changeset
|
48 except: pass |
161 | 49 |