From ccbfaa6901418363c2b79947b1ad1da33beeced3 Mon Sep 17 00:00:00 2001 From: Klaus Aehlig Date: Thu, 10 Oct 2024 15:33:22 +0200 Subject: bootstrap traversing: for explicit trees, create closed directories ... by recursively copying and resolving sybolic links. In this way, references within a tree (e.g., #include "../Something.hpp") do not confuse the compiler, as opposed to directory symlinks. Neverthess, by doing this copying only for tree constructors, we still keep the overhead acceptable. --- bin/bootstrap-traverser.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'bin/bootstrap-traverser.py') diff --git a/bin/bootstrap-traverser.py b/bin/bootstrap-traverser.py index 46388cde..30187078 100755 --- a/bin/bootstrap-traverser.py +++ b/bin/bootstrap-traverser.py @@ -16,6 +16,7 @@ import hashlib import json import os +import shutil import subprocess import sys from typing import Any, Dict, List, Optional, cast @@ -79,12 +80,14 @@ def build_tree(desc: Json, *, config: Json, root: str, graph: Json) -> str: tree_dir = os.path.normpath(os.path.join(root, "TREE", tree_id)) if os.path.isdir(tree_dir): return tree_dir + tree_dir_tmp = tree_dir + ".tmp" tree_desc = graph["trees"][tree_id] for location, desc in tree_desc.items(): link(cast(str, build(desc, config=config, root=root, graph=graph)), - os.path.join(tree_dir, location)) + os.path.join(tree_dir_tmp, location)) # correctly handle the empty tree - os.makedirs(tree_dir, exist_ok=True) + os.makedirs(tree_dir_tmp, exist_ok=True) + shutil.copytree(tree_dir_tmp, tree_dir) return tree_dir -- cgit v1.2.3