[PATCH] Enables lock work under the other 'OS'
authormpm@selenic.com
Tue, 21 Jun 2005 19:43:40 -0800
changeset 422 10c43444a38e
parent 421 43b8da7420a9
child 428 183c87d4e1a0
[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-----
mercurial/lock.py
mercurial/util.py
--- a/mercurial/lock.py	Tue Jun 21 19:36:35 2005 -0800
+++ b/mercurial/lock.py	Tue Jun 21 19:43:40 2005 -0800
@@ -6,6 +6,7 @@
 # of the GNU General Public License, incorporated herein by reference.
 
 import os, time
+import util
 
 class LockHeld(Exception):
     pass
@@ -34,10 +35,10 @@
     def trylock(self):
         pid = os.getpid()
         try:
-            os.symlink(str(pid), self.f)
+            util.makelock(str(pid), self.f)
             self.held = 1
         except:
-            raise LockHeld(os.readlink(self.f))
+            raise LockHeld(util.readlock(self.f))
 
     def release(self):
         if self.held:
--- a/mercurial/util.py	Tue Jun 21 19:36:35 2005 -0800
+++ b/mercurial/util.py	Tue Jun 21 19:43:40 2005 -0800
@@ -18,7 +18,22 @@
 if os.name == 'nt':
     def pconvert(path):
         return path.replace("\\", "/")
+
+    def makelock(info, pathname):
+        ld = os.open(pathname, os.O_CREAT | os.O_WRONLY | os.O_EXCL)
+        os.write(ld, info)
+        os.close(ld)
+
+    def readlock(pathname):
+        return file(pathname).read()
 else:
     def pconvert(path):
         return path
 
+    def makelock(info, pathname):
+        os.symlink(info, pathname)
+
+    def readlock(pathname):
+        return os.readlink(pathname)
+
+