mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
The path that the tests are using here are extremely long, and can easily exceed the 261 character limit on Windows. Apply some workarounds to support long paths.
52 lines
1.3 KiB
Python
52 lines
1.3 KiB
Python
#!/usr/bin/env python
|
|
"""
|
|
Renames files or directories with "module-triple-here" in their names to use
|
|
the indicated module triples instead.
|
|
"""
|
|
|
|
from __future__ import print_function
|
|
|
|
import os
|
|
import platform
|
|
import shutil
|
|
import sys
|
|
|
|
if len(sys.argv) < 3:
|
|
print('Too few args to ' + sys.argv[0])
|
|
print('Usage: rewrite-module-triples.py <root-dir> <module-triple>...')
|
|
sys.exit(1)
|
|
|
|
root_dir = sys.argv[1]
|
|
triples = sys.argv[2:]
|
|
|
|
|
|
def rewritten_names(name):
|
|
if 'module-triple-here' not in name:
|
|
return []
|
|
|
|
return [name.replace('module-triple-here', triple) for triple in triples]
|
|
|
|
|
|
def rewrite(parent, names, copy_fn, rm_fn):
|
|
for name in names:
|
|
new_names = rewritten_names(name)
|
|
if not new_names:
|
|
continue
|
|
|
|
path = os.path.join(parent, name)
|
|
|
|
for new_name in new_names:
|
|
new_path = os.path.join(parent, new_name)
|
|
if platform.system() == 'Windows':
|
|
copy_fn(u'\\'.join([u'\\\\?', os.path.normpath(path)]),
|
|
u'\\'.join([u'\\\\?', os.path.normpath(new_path)]))
|
|
else:
|
|
copy_fn(path, new_path)
|
|
|
|
rm_fn(path)
|
|
|
|
|
|
for parent, dirs, files in os.walk(root_dir, topdown=False):
|
|
rewrite(parent, dirs, shutil.copytree, shutil.rmtree)
|
|
rewrite(parent, files, shutil.copyfile, os.remove)
|