From 9553be04e4ed637baae7aaa66d9ffddb93fdf972 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Sch=C3=B6nauer?= <37108907+DottoDev@users.noreply.github.com> Date: Thu, 15 Dec 2022 11:39:25 +0000 Subject: [PATCH] Fixes vcpkg when installed as root (#266) --- src/main.rs | 2 +- src/steps/generic.rs | 23 ++++++++++++++++++----- 2 files changed, 19 insertions(+), 6 deletions(-) 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<()> {