Mercurial > hg
changeset 704:5ca319a641e1
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-----
author | Thomas Arendsen Hein <thomas@intevation.de> |
---|---|
date | Thu, 14 Jul 2005 22:51:47 +0100 |
parents | fb6f85ecc863 |
children | 574869103985 |
files | mercurial/lock.py mercurial/util.py |
diffstat | 2 files changed, 26 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/lock.py Thu Jul 14 17:28:19 2005 +0100 +++ b/mercurial/lock.py Thu Jul 14 22:51:47 2005 +0100 @@ -37,7 +37,7 @@ try: util.makelock(str(pid), self.f) self.held = 1 - except: + except (OSError, IOError): raise LockHeld(util.readlock(self.f)) def release(self):
--- a/mercurial/util.py Thu Jul 14 17:28:19 2005 +0100 +++ b/mercurial/util.py Thu Jul 14 22:51:47 2005 +0100 @@ -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 @@ 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 @@ 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 @@ 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