Mercurial > public > mercurial-scm > hg-stable
diff mercurial/util.py @ 705:574869103985
Merge with TAH
manifest hash: 197e0d1a0d7376a9eb72381330462f06490ab821
author | mpm@selenic.com |
---|---|
date | Thu, 14 Jul 2005 22:56:55 -0800 |
parents | 31a9aa890016 5ca319a641e1 |
children | 1c0c413cccdd c6b912f8b5b2 8db4d406b3d3 d2422f10c136 |
line wrap: on
line diff
--- a/mercurial/util.py Thu Jul 14 22:37:46 2005 -0800 +++ b/mercurial/util.py Thu Jul 14 22:56:55 2005 -0800 @@ -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 = {} @@ -46,6 +46,29 @@ os.unlink(dst) os.rename(src, dst) +def copytree(src, dst, copyfile): + """Copy a directory tree, files are copied using 'copyfile'.""" + names = os.listdir(src) + os.mkdir(dst) + + for name in names: + srcname = os.path.join(src, name) + dstname = os.path.join(dst, name) + if os.path.isdir(srcname): + copytree(srcname, dstname, copyfile) + elif os.path.isfile(srcname): + copyfile(srcname, dstname) + 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:' @@ -59,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' @@ -90,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