Mercurial > public > mercurial-scm > hg
annotate mercurial/lock.py @ 422:10c43444a38e
[PATCH] Enables lock work under the other 'OS'
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
[PATCH] Enables lock work under the other 'OS'
From: K Thananchayan <thananck@yahoo.com>
os.symlink is not supported under Windows. This patch
introduces util.mklockf, util.getlowner that use
regular files under Winodws but symlink under unix.
tweaked by mpm:
- changed function names
- fixed to work on UNIX
manifest hash: 6f650a78a3b203dcad2f861582500b6b4036599a
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (GNU/Linux)
iD8DBQFCuN5sywK+sNU5EO8RAva8AJ9L9z/JHRAJS1bix48ZzSpn9ZUyPwCffhmg
UfLSFBmd5tPDDi3mgsrdDEA=
=ZYS9
-----END PGP SIGNATURE-----
author | mpm@selenic.com |
---|---|
date | Tue, 21 Jun 2005 19:43:40 -0800 |
parents | 0b4c5cb953d9 |
children | 688d03d6997a |
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 |