mirror of https://github.com/ansible/ansible.git
Add link check to `make sdist`.
This will cause `make sdist` to fail on platforms which create hard links of symbolic links as regular files, such as MacOS (Darwin). This prevents accidental creation of an sdist tarball without the necessary symbolic links.pull/46939/head
parent
e43869cca9
commit
19c0511f57
@ -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()
|
Loading…
Reference in New Issue