repl: Use a temporary file for the expression

This makes it compatible with Nix 2.3+.
This commit is contained in:
Zhaofeng Li 2022-08-17 11:56:30 -06:00
parent 797297b609
commit 741d5c4fbb

View file

@ -1,4 +1,7 @@
use std::io::Write;
use clap::{ArgMatches, Command as ClapCommand}; use clap::{ArgMatches, Command as ClapCommand};
use tempfile::Builder as TempFileBuilder;
use tokio::process::Command; use tokio::process::Command;
use crate::error::ColmenaError; use crate::error::ColmenaError;
@ -21,12 +24,19 @@ pub async fn run(_global_args: &ArgMatches, local_args: &ArgMatches) -> Result<(
let expr = hive.get_repl_expression(); let expr = hive.get_repl_expression();
let mut expr_file = TempFileBuilder::new()
.prefix("colmena-repl-")
.suffix(".nix")
.tempfile()?;
expr_file.write_all(expr.as_bytes())?;
let status = Command::new("nix") let status = Command::new("nix")
.arg("repl") .arg("repl")
// `nix repl` is expected to be marked as experimental: // `nix repl` is expected to be marked as experimental:
// <https://github.com/NixOS/nix/issues/5604> // <https://github.com/NixOS/nix/issues/5604>
.args(&["--experimental-features", "nix-command flakes"]) .args(&["--experimental-features", "nix-command flakes"])
.args(&["--expr", &expr]) .arg(expr_file.path())
.status() .status()
.await?; .await?;