changeset 27236:b0d90fef16b6

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.
author Augie Fackler <augie@google.com>
date Fri, 04 Dec 2015 15:59:46 -0500
parents 054cd38a2f19
children c08814b48ae5
files mercurial/posix.py
diffstat 1 files changed, 10 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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