From f5e304339c10cb37690bfbb2feb2394ef6c987e7 Mon Sep 17 00:00:00 2001 From: Freakness109 Date: Sat, 5 Sep 2020 19:30:37 +0200 Subject: [PATCH] [xaprepare] Implement support for ArchLinux pacman This commit adds support for ArchLinux pacman package manager. It also implements the InitOS function in ConfigAndData/Dependencies/Linux.Arch.cs --- .../Application/Program.ArchLinux.cs | 25 ++++++++++++++++--- .../ConfigAndData/Dependencies/Linux.Arch.cs | 3 +-- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/build-tools/xaprepare/xaprepare/Application/Program.ArchLinux.cs b/build-tools/xaprepare/xaprepare/Application/Program.ArchLinux.cs index d71b0a5b727..9159f8802bb 100644 --- a/build-tools/xaprepare/xaprepare/Application/Program.ArchLinux.cs +++ b/build-tools/xaprepare/xaprepare/Application/Program.ArchLinux.cs @@ -11,19 +11,38 @@ public ArchLinuxProgram (string packageName, string? executableName = null) protected override bool CheckWhetherInstalled () { - throw new NotImplementedException (); + return Utilities.RunCommand ("pacman", "-Q", PackageName); } #pragma warning disable CS1998 public override async Task Install () { - throw new NotImplementedException (); + var runner = new ProcessRunner ("sudo", "pacman", "-S", "--noconfirm", PackageName) { + EchoStandardOutput = true, + EchoStandardError = true, + ProcessTimeout = TimeSpan.FromMinutes (30), + }; + + bool failed = await Task.Run (() => !runner.Run ()); + if (failed) { + Log.Error ($"Installation of {PackageName} timed out"); + failed = true; + } + + if (runner.ExitCode != 0) { + Log.Error ($"Installation failed with error code {runner.ExitCode}"); + failed = true; + } + + return !failed; } #pragma warning restore CS1998 protected override bool DeterminePackageVersion() { - throw new NotImplementedException(); + var output = Utilities.GetStringFromStdout ("pacman", "-Q", PackageName).Split(' '); + CurrentVersion = output.Length == 2 ? output[1] : null; + return !String.IsNullOrEmpty (CurrentVersion); } } } diff --git a/build-tools/xaprepare/xaprepare/ConfigAndData/Dependencies/Linux.Arch.cs b/build-tools/xaprepare/xaprepare/ConfigAndData/Dependencies/Linux.Arch.cs index 7faf872342d..3a50773eea8 100644 --- a/build-tools/xaprepare/xaprepare/ConfigAndData/Dependencies/Linux.Arch.cs +++ b/build-tools/xaprepare/xaprepare/ConfigAndData/Dependencies/Linux.Arch.cs @@ -53,8 +53,7 @@ protected override bool InitOS () if (!base.InitOS ()) return false; - Log.Todo ("Implement"); - return false; + return true; } }; }