mirror of https://github.com/python/cpython.git
61 lines
1.6 KiB
Python
Executable File
61 lines
1.6 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import os
|
|
from pathlib import Path
|
|
|
|
CURRENT_DIR = Path(__file__).parent
|
|
MISC_DIR = CURRENT_DIR.parent
|
|
REPO_ROOT = MISC_DIR.parent
|
|
LIB_DIR = REPO_ROOT / "Lib"
|
|
FILE_LIST = CURRENT_DIR / "typed-stdlib.txt"
|
|
|
|
parser = argparse.ArgumentParser(prog="make_symlinks.py")
|
|
parser.add_argument(
|
|
"--symlink",
|
|
action="store_true",
|
|
help="Create symlinks",
|
|
)
|
|
parser.add_argument(
|
|
"--clean",
|
|
action="store_true",
|
|
help="Delete any pre-existing symlinks",
|
|
)
|
|
|
|
args = parser.parse_args()
|
|
|
|
if args.clean:
|
|
for entry in CURRENT_DIR.glob("*"):
|
|
if entry.is_symlink():
|
|
entry_at_root = entry.relative_to(REPO_ROOT)
|
|
print(f"removing pre-existing {entry_at_root}")
|
|
entry.unlink()
|
|
|
|
for link in FILE_LIST.read_text().splitlines():
|
|
link = link.strip()
|
|
if not link or link.startswith('#'):
|
|
continue
|
|
|
|
src = LIB_DIR / link
|
|
dst = CURRENT_DIR / link
|
|
src_at_root = src.relative_to(REPO_ROOT)
|
|
dst_at_root = dst.relative_to(REPO_ROOT)
|
|
if (
|
|
dst.is_symlink()
|
|
and src.resolve(strict=True) == dst.resolve(strict=True)
|
|
):
|
|
continue
|
|
|
|
if not args.symlink and args.clean:
|
|
# when the user called --clean without --symlink, don't report missing
|
|
# symlinks that we just deleted ourselves
|
|
continue
|
|
|
|
# we specifically want to create relative-path links with ..
|
|
src_rel = os.path.relpath(src, CURRENT_DIR)
|
|
action = "symlinking" if args.symlink else "missing symlink to"
|
|
print(f"{action} {src_at_root} at {dst_at_root}")
|
|
if args.symlink:
|
|
os.symlink(src_rel, dst)
|