diff --git a/src/main.rs b/src/main.rs index dc4b85e3..c071b8a1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -348,7 +348,7 @@ fn run() -> Result<()> { runner.execute(Step::Go, "gup", || go::run_go_gup(run_type))?; runner.execute(Step::Emacs, "Emacs", || emacs.upgrade(&ctx))?; runner.execute(Step::Opam, "opam", || generic::run_opam_update(&ctx))?; - runner.execute(Step::Vcpkg, "vcpkg", || generic::run_vcpkg_update(run_type))?; + runner.execute(Step::Vcpkg, "vcpkg", || generic::run_vcpkg_update(&ctx))?; runner.execute(Step::Pipx, "pipx", || generic::run_pipx_update(run_type))?; runner.execute(Step::Conda, "conda", || generic::run_conda_update(&ctx))?; runner.execute(Step::Pip3, "pip3", || generic::run_pip3_update(run_type))?; diff --git a/src/steps/generic.rs b/src/steps/generic.rs index cb7c64fd..375702a9 100644 --- a/src/steps/generic.rs +++ b/src/steps/generic.rs @@ -260,14 +260,27 @@ pub fn run_opam_update(ctx: &ExecutionContext) -> Result<()> { Ok(()) } -pub fn run_vcpkg_update(run_type: RunType) -> Result<()> { +pub fn run_vcpkg_update(ctx: &ExecutionContext) -> Result<()> { let vcpkg = utils::require("vcpkg")?; print_separator("vcpkg"); - run_type - .execute(vcpkg) - .args(["upgrade", "--no-dry-run"]) - .status_checked() + #[cfg(unix)] + let is_root_install = !&vcpkg.starts_with("/home"); + + #[cfg(not(unix))] + let is_root_install = false; + + let mut command = if is_root_install { + ctx.run_type().execute(&vcpkg) + } else { + let mut c = ctx + .run_type() + .execute(ctx.sudo().as_ref().ok_or(TopgradeError::SudoRequired)?); + c.arg(&vcpkg); + c + }; + + command.args(["upgrade", "--no-dry-run"]).status_checked() } pub fn run_pipx_update(run_type: RunType) -> Result<()> {