Mercurial > hg > mercurial-crew-with-dirclash
annotate mercurial/lock.py @ 467:9d5447a366a7
Add version command
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Add version command
Suggested by Arun Sharma
manifest hash: 7fc056ffe45ee854f00e76916a560fba28c74a91
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (GNU/Linux)
iD8DBQFCvQW+ywK+sNU5EO8RAqGQAJ91Eysw4tHVpOB7ICeN9hMF/p+lfQCgksmg
TAKr5VNrw2wIZtSKjgQRqiA=
=8w84
-----END PGP SIGNATURE-----
author | mpm@selenic.com |
---|---|
date | Fri, 24 Jun 2005 23:20:30 -0800 |
parents | 688d03d6997a |
children | c6a2e41c8c60 |
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 | |
34 | |
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 | |
46 os.unlink(self.f) | |
47 |