flake-update-diff/flupdt/flake_eval.py

27 lines
828 B
Python
Raw Normal View History

#!/usr/bin/env python3
import logging
from typing import Optional
from rad_development_python import bash_wrapper
import re
drv_re = re.compile(r".*(/nix/store/.*\.drv).*")
def evaluate_output(path: str, output: str) -> Optional[str]:
logging.info(f"evaluating {output}")
out = bash_wrapper(f"nix eval {path}#{output}")
logging.debug(out[0])
logging.debug(out[1])
logging.debug(out[2])
if out[2] != 0:
logging.warning(f"output {output} did not evaluate correctly")
return None
else:
drv_match = drv_re.match(out[0])
if drv_match is None:
out_msg = "derivation succeeded but output derivation does not contain a derivation"
raise RuntimeError(out_msg)
drv = drv_match.group(1)
logging.debug(f"derivation evaluated to {drv}")