From 2e8930cf1d31df9b9da58ced6bd5b0aff8c7980f Mon Sep 17 00:00:00 2001 From: ahuston-0 Date: Mon, 26 May 2025 19:52:59 -0400 Subject: [PATCH] allow IFD in nix flake show Signed-off-by: ahuston-0 --- flupdt/cli.py | 5 +++++ flupdt/flake_show.py | 6 ++++-- flupdt/main.py | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/flupdt/cli.py b/flupdt/cli.py index a99e9b4..db658b7 100644 --- a/flupdt/cli.py +++ b/flupdt/cli.py @@ -21,6 +21,11 @@ def parse_inputs() -> argparse.Namespace: action="store_true", help="whether to compare two drv sets, must provide two evaluation jsons to compare", ) + parser.add_argument( + "--allow-import-from-derivation", + action="store_true", + help="whether to allow IFD during certain actions (ex. nix flake show)", + ) parser.add_argument( "--compare-pre-json", metavar="pre-json-path", diff --git a/flupdt/flake_show.py b/flupdt/flake_show.py index 655b8f9..2d626b7 100644 --- a/flupdt/flake_show.py +++ b/flupdt/flake_show.py @@ -71,7 +71,7 @@ def get_derivations_from_check(nix_path: str, path_to_flake: str) -> list[str]: return derivations -def get_derivations(path_to_flake: str) -> list[str]: +def get_derivations(path_to_flake: str, *, allow_import_from_derivation: False = False) -> list[str]: """Gets all derivations present in a flake. :param path_to_flake: path to flake to be checked @@ -83,7 +83,9 @@ def get_derivations(path_to_flake: str) -> list[str]: if nix_path is None: status_msg = "nix is not available in the PATH, please verify that it is installed" raise RuntimeError(status_msg) - flake_show = bash_wrapper(f"{nix_path} flake show --json --accept-flake-path", path=path_to_flake) + cmd = f"{nix_path} flake show --json --accept-flake-path" + cmd += " --allow-import-from-derivation" if allow_import_from_derivation else "" + flake_show = bash_wrapper(cmd, path=path_to_flake) if flake_show[2] != 0: logger.error("flake show returned non-zero exit code") logger.warning("falling back to full evaluation via nix flake check") diff --git a/flupdt/main.py b/flupdt/main.py index 151f4de..53e48cb 100755 --- a/flupdt/main.py +++ b/flupdt/main.py @@ -99,7 +99,7 @@ def build_or_eval(args: Namespace) -> None: """ flake_path = args.flake_path derivations, hydra_jobs = partition( - lambda s: s.startswith("hydraJobs"), get_derivations(flake_path) + lambda s: s.startswith("hydraJobs"), get_derivations(flake_path, args["allow-import-from-derivation"]) ) derivations, hydra_jobs = list(derivations), list(hydra_jobs) logger.info(f"derivations: {list(derivations)}")