Mercurial > public > mercurial-scm > hg-stable
diff mercurial/posix.py @ 30561:6a672c3b7860
posix: give the cached symlink a real target
The NamedTemporaryFile file is cleared up so checklink ends up as a dangling
symlink, causing cp -r in tests to complain on both Solaris and OS X. Use
a permanent file instead when there is a .hg/cache directory.
author | Martijn Pieters <mjpieters@fb.com> |
---|---|
date | Wed, 30 Nov 2016 16:39:36 +0000 |
parents | 8836f13e3c5b |
children | d623cc6b3742 |
line wrap: on
line diff
--- a/mercurial/posix.py Tue Nov 29 07:20:03 2016 -0800 +++ b/mercurial/posix.py Wed Nov 30 16:39:36 2016 +0000 @@ -231,10 +231,18 @@ cachedir = None name = tempfile.mktemp(dir=checkdir, prefix='checklink-') try: - fd = tempfile.NamedTemporaryFile(dir=checkdir, - prefix='hg-checklink-') + fd = None + if cachedir is None: + fd = tempfile.NamedTemporaryFile(dir=checkdir, + prefix='hg-checklink-') + target = os.path.basename(fd.name) + else: + # create a fixed file to link to; doesn't matter if it + # already exists. + target = 'checklink-target' + open(os.path.join(cachedir, target), 'w').close() try: - os.symlink(os.path.basename(fd.name), name) + os.symlink(target, name) if cachedir is None: os.unlink(name) else: @@ -249,7 +257,8 @@ continue raise finally: - fd.close() + if fd is not None: + fd.close() except AttributeError: return False except OSError as inst: