installplan should not copy self binary (#161)
* Make binary copy self, not library * lints
This commit is contained in:
parent
b60c4c84d0
commit
844faa0d20
|
@ -1,4 +1,5 @@
|
|||
use std::{
|
||||
os::unix::prelude::PermissionsExt,
|
||||
path::{Path, PathBuf},
|
||||
process::ExitCode,
|
||||
};
|
||||
|
@ -160,6 +161,9 @@ impl CommandExecute for Install {
|
|||
match install_plan.install(rx1).await {
|
||||
Err(err) => {
|
||||
if !no_confirm {
|
||||
// Attempt to copy self to the store if possible, but since the install failed, this might not work, that's ok.
|
||||
copy_self_to_nix_store().await.ok();
|
||||
|
||||
let mut was_expected = false;
|
||||
if let Some(expected) = err.expected() {
|
||||
was_expected = true;
|
||||
|
@ -210,6 +214,9 @@ impl CommandExecute for Install {
|
|||
}
|
||||
},
|
||||
Ok(_) => {
|
||||
copy_self_to_nix_store()
|
||||
.await
|
||||
.wrap_err("Copying `nix-installer` to `/nix/nix-installer`")?;
|
||||
println!(
|
||||
"\
|
||||
{success}\n\
|
||||
|
@ -229,3 +236,11 @@ impl CommandExecute for Install {
|
|||
Ok(ExitCode::SUCCESS)
|
||||
}
|
||||
}
|
||||
|
||||
#[tracing::instrument(level = "debug")]
|
||||
async fn copy_self_to_nix_store() -> Result<(), std::io::Error> {
|
||||
let path = std::env::current_exe()?;
|
||||
tokio::fs::copy(path, "/nix/nix-installer").await?;
|
||||
tokio::fs::set_permissions("/nix/nix-installer", PermissionsExt::from_mode(0o0755)).await?;
|
||||
Ok(())
|
||||
}
|
||||
|
|
11
src/plan.rs
11
src/plan.rs
|
@ -144,9 +144,7 @@ impl InstallPlan {
|
|||
}
|
||||
|
||||
write_receipt(self.clone()).await?;
|
||||
copy_self_to_nix_store()
|
||||
.await
|
||||
.map_err(|e| NixInstallerError::CopyingSelf(e))?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
@ -288,13 +286,6 @@ fn ensure_version<'de, D: Deserializer<'de>>(d: D) -> Result<Version, D::Error>
|
|||
}
|
||||
}
|
||||
|
||||
#[tracing::instrument(level = "debug")]
|
||||
async fn copy_self_to_nix_store() -> Result<(), std::io::Error> {
|
||||
let path = std::env::current_exe()?;
|
||||
tokio::fs::copy(path, "/nix/nix-installer").await?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use semver::Version;
|
||||
|
|
Loading…
Reference in a new issue