Execute-elevated (#892)
* Introduce the execute elevated method (fix #885) * fmt * Fix nix with doas * Bad import
This commit is contained in:
committed by
GitHub
parent
5de33a91d1
commit
5ecf8300ef
@@ -1,9 +1,11 @@
|
|||||||
#![allow(dead_code)]
|
#![allow(dead_code)]
|
||||||
use crate::config::Config;
|
|
||||||
use crate::executor::RunType;
|
use crate::executor::RunType;
|
||||||
use crate::git::Git;
|
use crate::git::Git;
|
||||||
|
use crate::utils::require_option;
|
||||||
|
use crate::{config::Config, executor::Executor};
|
||||||
|
use anyhow::Result;
|
||||||
use directories::BaseDirs;
|
use directories::BaseDirs;
|
||||||
use std::path::PathBuf;
|
use std::path::{Path, PathBuf};
|
||||||
|
|
||||||
pub struct ExecutionContext<'a> {
|
pub struct ExecutionContext<'a> {
|
||||||
run_type: RunType,
|
run_type: RunType,
|
||||||
@@ -30,6 +32,22 @@ impl<'a> ExecutionContext<'a> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn execute_elevated(&self, command: &Path, interactive: bool) -> Result<Executor> {
|
||||||
|
let sudo = require_option(self.sudo.clone(), "Sudo is required for this operation".into())?;
|
||||||
|
let mut cmd = self.run_type.execute(&sudo);
|
||||||
|
|
||||||
|
if sudo.ends_with("sudo") {
|
||||||
|
cmd.arg("--preserve-env=DIFFPROG");
|
||||||
|
}
|
||||||
|
|
||||||
|
if interactive {
|
||||||
|
cmd.arg("-i");
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd.arg(command);
|
||||||
|
Ok(cmd)
|
||||||
|
}
|
||||||
|
|
||||||
pub fn run_type(&self) -> RunType {
|
pub fn run_type(&self) -> RunType {
|
||||||
self.run_type
|
self.run_type
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -547,11 +547,7 @@ pub fn run_config_update(ctx: &ExecutionContext) -> Result<()> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
print_separator("Configuration update");
|
print_separator("Configuration update");
|
||||||
ctx.run_type()
|
ctx.execute_elevated(&pacdiff, false)?.check_run()?;
|
||||||
.execute(sudo)
|
|
||||||
.arg("--preserve-env=DIFFPROG")
|
|
||||||
.arg(pacdiff)
|
|
||||||
.check_run()?;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ use crate::execution_context::ExecutionContext;
|
|||||||
#[cfg(target_os = "macos")]
|
#[cfg(target_os = "macos")]
|
||||||
use crate::executor::CommandExt;
|
use crate::executor::CommandExt;
|
||||||
use crate::executor::{Executor, ExecutorExitStatus, RunType};
|
use crate::executor::{Executor, ExecutorExitStatus, RunType};
|
||||||
use crate::terminal::{print_separator, print_warning};
|
use crate::terminal::print_separator;
|
||||||
use crate::utils::{require, require_option, PathExt};
|
use crate::utils::{require, require_option, PathExt};
|
||||||
use crate::Step;
|
use crate::Step;
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
@@ -232,14 +232,7 @@ pub fn run_nix(ctx: &ExecutionContext) -> Result<()> {
|
|||||||
let run_type = ctx.run_type();
|
let run_type = ctx.run_type();
|
||||||
|
|
||||||
if multi_user {
|
if multi_user {
|
||||||
if let Some(sudo) = ctx.sudo() {
|
ctx.execute_elevated(&nix, true)?.arg("upgrade-nix").check_run()?;
|
||||||
run_type
|
|
||||||
.execute(&sudo)
|
|
||||||
.args(&["-i", "nix", "upgrade-nix"])
|
|
||||||
.check_run()?;
|
|
||||||
} else {
|
|
||||||
print_warning("Need sudo to upgrade Nix");
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
run_type.execute(&nix).arg("upgrade-nix").check_run()?;
|
run_type.execute(&nix).arg("upgrade-nix").check_run()?;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user