mirror of
https://github.com/facebook/sapling.git
synced 2024-10-07 07:17:55 +03:00
Make makelock and readlock work on filesystems without symlink support.
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Make makelock and readlock work on filesystems without symlink support. This way you can have a repository on a fat partiton, e.g. a USB stick. manifest hash: cea2c120ef2b25a50c5d98b59648f773feefe470 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.1 (GNU/Linux) iD8DBQFC1t5yW7P1GVgWeRoRAsKjAJ9BFcn/EqBK/dmJ4BY1pPIZIbDDJACghN3p VCQS6CJ72MHpzhOOsnOpHzE= =laDT -----END PGP SIGNATURE-----
This commit is contained in:
parent
061a741620
commit
e78588e43a
@ -37,7 +37,7 @@ class lock:
|
||||
try:
|
||||
util.makelock(str(pid), self.f)
|
||||
self.held = 1
|
||||
except:
|
||||
except (OSError, IOError):
|
||||
raise LockHeld(util.readlock(self.f))
|
||||
|
||||
def release(self):
|
||||
|
@ -5,7 +5,7 @@
|
||||
# This software may be used and distributed according to the terms
|
||||
# of the GNU General Public License, incorporated herein by reference.
|
||||
|
||||
import os
|
||||
import os, errno
|
||||
|
||||
def unique(g):
|
||||
seen = {}
|
||||
@ -61,6 +61,14 @@ def copytree(src, dst, copyfile):
|
||||
else:
|
||||
raise IOError("Not a regular file: %r" % srcname)
|
||||
|
||||
def _makelock_file(info, pathname):
|
||||
ld = os.open(pathname, os.O_CREAT | os.O_WRONLY | os.O_EXCL)
|
||||
os.write(ld, info)
|
||||
os.close(ld)
|
||||
|
||||
def _readlock_file(pathname):
|
||||
return file(pathname).read()
|
||||
|
||||
# Platfor specific varients
|
||||
if os.name == 'nt':
|
||||
nulldev = 'NUL:'
|
||||
@ -74,13 +82,8 @@ 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()
|
||||
makelock = _makelock_file
|
||||
readlock = _readlock_file
|
||||
|
||||
else:
|
||||
nulldev = '/dev/null'
|
||||
@ -105,7 +108,19 @@ else:
|
||||
return path
|
||||
|
||||
def makelock(info, pathname):
|
||||
os.symlink(info, pathname)
|
||||
try:
|
||||
os.symlink(info, pathname)
|
||||
except OSError, why:
|
||||
if why.errno == errno.EEXIST:
|
||||
raise
|
||||
else:
|
||||
_makelock_file(info, pathname)
|
||||
|
||||
def readlock(pathname):
|
||||
return os.readlink(pathname)
|
||||
try:
|
||||
return os.readlink(pathname)
|
||||
except OSError, why:
|
||||
if why.errno == errno.EINVAL:
|
||||
return _readlock_file(pathname)
|
||||
else:
|
||||
raise
|
||||
|
Loading…
Reference in New Issue
Block a user