# HG changeset patch # User Augie Fackler # Date 1449262786 18000 # Node ID b0d90fef16b616632bcc4d96eef0a4e778eb530b # Parent 054cd38a2f19008ec2a95fb31586e76fb38c309e posix: work around "posix" systems without os.link available (issue4974) Some platforms (see bug, notably a terminal emulator on Android) ship with os.link removed from Python to try and cater to other tools that expect os.link to exist iff hardlinks are supported on that platform. As a workaround for this madness, include a fallback path for when we're on a "posix" platform but lack os.link. diff -r 054cd38a2f19 -r b0d90fef16b6 mercurial/posix.py --- a/mercurial/posix.py Thu Dec 03 13:14:20 2015 -0800 +++ b/mercurial/posix.py Fri Dec 04 15:59:46 2015 -0500 @@ -29,7 +29,16 @@ posixfile = open normpath = os.path.normpath samestat = os.path.samestat -oslink = os.link +try: + oslink = os.link +except AttributeError: + # Some platforms build Python without os.link on systems that are + # vaguely unix-like but don't have hardlink support. For those + # poor souls, just say we tried and that it failed so we fall back + # to copies. + def oslink(src, dst): + raise OSError(errno.EINVAL, + 'hardlinks not supported: %s to %s' % (src, dst)) unlink = os.unlink rename = os.rename removedirs = os.removedirs