def eval_repo(repo: Repo, repo_path: Path) -> None:
    with tempfile.TemporaryDirectory() as d:
        eval_path = Path(d).joinpath('default.nix')
        with open(eval_path, 'w') as f:
            f.write(f'''
                    with import <nixpkgs> {{}};
import {EVALREPO_PATH} {{
  name = "{repo.name}";
  url = "{repo.url}";
  src = {repo_path.joinpath(repo.file)};
  inherit pkgs lib;
}}
''')
        cmd = ['nix-env', '-f', str(eval_path), '-qa', '*', '--meta', '--xml', '--allowed-uris', 'https://static.rust-lang.org', '--option', 'restrict-eval', 'true', '--option', 'allow-import-from-derivation', 'true', '--drv-path', '--show-trace', '-I', f'nixpkgs={nixpkgs_path()}', '-I', str(repo_path), '-I', str(eval_path), '-I', str(EVALREPO_PATH)]
        logger.info(f'Evaluate repository {repo.name}')
        env = dict(PATH=os.environ['PATH'], NIXPKGS_ALLOW_UNSUPPORTED_SYSTEM='1')
        proc = subprocess.Popen(cmd, env=env, stdout=subprocess.DEVNULL)
        try:
            res = proc.wait(10)
        except subprocess.TimeoutExpired:
            raise EvalError(f'evaluation for {repo.name} timed out of after 10 seconds')
        if (res != 0):
            raise EvalError(f'''{repo.name} does not evaluate:
$ {' '.join(cmd)}''')
def eval_repo(repo: Repo, repo_path: Path) -> None:
    with tempfile.TemporaryDirectory() as d:
        eval_path = Path(d).joinpath('default.nix')
        with open(eval_path, 'w') as f:
            f.write(f'
                    with import <nixpkgs> {{}};
import {EVALREPO_PATH} {{
  name = "{repo.name}";
  url = "{repo.url}";
  src = {repo_path.joinpath(repo.file)};
  inherit pkgs lib;
}}
')
        cmd = ['nix-env', '-f', str(eval_path), '-qa', '*', '--meta', '--xml', '--allowed-uris', 'https://static.rust-lang.org', '--option', 'restrict-eval', 'true', '--option', 'allow-import-from-derivation', 'true', '--drv-path', '--show-trace', '-I', f'nixpkgs={nixpkgs_path()}', '-I', str(repo_path), '-I', str(eval_path), '-I', str(EVALREPO_PATH)]
        logger.info(f'Evaluate repository {repo.name}')
        env = dict(PATH=os.environ['PATH'], NIXPKGS_ALLOW_UNSUPPORTED_SYSTEM='1')
        proc = subprocess.Popen(cmd, env=env, stdout=subprocess.DEVNULL)
        try:
            res = proc.wait(10)
        except subprocess.TimeoutExpired:
            raise EvalError(f'evaluation for {repo.name} timed out of after 10 seconds')
        if (res != 0):
            raise EvalError(f'{repo.name} does not evaluate:
$ {' '.join(cmd)}')