import os import re from util.exceptions import StepFailedError from termcolor import colored HOME = os.getenv("HOME") OVERWRITE_FILES = os.getenv("OVERWRITE_FILES") def run_step(step): step_type = step["=="] if step_type == "run": do_run(step["command"]) elif step_type == "link": do_link(step["from"], step["to"]) def do_run(command): print(f"! {command}") if not os.system(command) == 0: raise StepFailedError("Non-zero return code") def do_link(source, destination): destination = re.sub(r"^~/", HOME + "/", destination) print(f"Linking {source} -> {destination}") if os.path.exists(destination): if OVERWRITE_FILES == "1": os.remove(destination) print(colored(" (File overwritten)", "yellow")) else: print(colored(" (File already exists)", "yellow")) return try: os.link(source, destination) except OSError as e: raise StepFailedError("Link raised exeption: " + str(e)) from e except Exception as e: raise StepFailedError("Link raised exeption: " + str(e)) from e