summaryrefslogtreecommitdiffstats
path: root/packaging/sdist/check-link-behavior.py
diff options
context:
space:
mode:
Diffstat (limited to 'packaging/sdist/check-link-behavior.py')
-rwxr-xr-xpackaging/sdist/check-link-behavior.py51
1 files changed, 51 insertions, 0 deletions
diff --git a/packaging/sdist/check-link-behavior.py b/packaging/sdist/check-link-behavior.py
new file mode 100755
index 0000000..34e0502
--- /dev/null
+++ b/packaging/sdist/check-link-behavior.py
@@ -0,0 +1,51 @@
+#!/usr/bin/env python
+"""Checks for link behavior required for sdist to retain symlinks."""
+
+from __future__ import (absolute_import, division, print_function)
+
+__metaclass__ = type
+
+import os
+import platform
+import shutil
+import sys
+import tempfile
+
+
+def main():
+ """Main program entry point."""
+ temp_dir = tempfile.mkdtemp()
+
+ target_path = os.path.join(temp_dir, 'file.txt')
+ symlink_path = os.path.join(temp_dir, 'symlink.txt')
+ hardlink_path = os.path.join(temp_dir, 'hardlink.txt')
+
+ try:
+ with open(target_path, 'w'):
+ pass
+
+ os.symlink(target_path, symlink_path)
+ os.link(symlink_path, hardlink_path)
+
+ if not os.path.islink(symlink_path):
+ abort('Symbolic link not created.')
+
+ if not os.path.islink(hardlink_path):
+ # known issue on MacOS (Darwin)
+ abort('Hard link of symbolic link created as a regular file.')
+ finally:
+ shutil.rmtree(temp_dir)
+
+
+def abort(reason):
+ """
+ :type reason: str
+ """
+ sys.exit('ERROR: %s\n'
+ 'This will prevent symbolic links from being preserved in the resulting tarball.\n'
+ 'Aborting creation of sdist on platform: %s'
+ % (reason, platform.system()))
+
+
+if __name__ == '__main__':
+ main()