1
0
mirror of https://github.com/nicoverbruggen/phpmon.git synced 2025-11-06 04:40:07 +01:00

🏗 Keep track of Homebrew error log

This commit is contained in:
2023-05-11 22:21:44 +02:00
parent 67ec63212c
commit 458b952787
5 changed files with 18 additions and 5 deletions

View File

@@ -45,4 +45,5 @@ struct BrewCommandProgress {
struct BrewCommandError: Error { struct BrewCommandError: Error {
let error: String let error: String
let log: [String]
} }

View File

@@ -109,11 +109,14 @@ class InstallAndUpgradeCommand: BrewCommand {
} }
private func run(_ command: String, _ onProgress: @escaping (BrewCommandProgress) -> Void) async throws { private func run(_ command: String, _ onProgress: @escaping (BrewCommandProgress) -> Void) async throws {
var loggedMessages: [String] = []
let (process, _) = try! await Shell.attach( let (process, _) = try! await Shell.attach(
command, command,
didReceiveOutput: { text, _ in didReceiveOutput: { text, _ in
if !text.isEmpty { if !text.isEmpty {
Log.perf(text) Log.perf(text)
loggedMessages.append(text)
} }
if let (number, text) = self.reportInstallationProgress(text) { if let (number, text) = self.reportInstallationProgress(text) {
@@ -124,9 +127,10 @@ class InstallAndUpgradeCommand: BrewCommand {
) )
if process.terminationStatus <= 0 { if process.terminationStatus <= 0 {
loggedMessages = []
return return
} else { } else {
throw BrewCommandError(error: "The command failed to run correctly.") throw BrewCommandError(error: "The command failed to run correctly.", log: loggedMessages)
} }
} }

View File

@@ -40,11 +40,14 @@ class RemovePhpVersionCommand: BrewCommand {
return return
} }
var loggedMessages: [String] = []
let (process, _) = try! await Shell.attach( let (process, _) = try! await Shell.attach(
command, command,
didReceiveOutput: { text, _ in didReceiveOutput: { text, _ in
if !text.isEmpty { if !text.isEmpty {
Log.perf(text) Log.perf(text)
loggedMessages.append(text)
} }
}, },
withTimeout: .minutes(5) withTimeout: .minutes(5)
@@ -56,7 +59,7 @@ class RemovePhpVersionCommand: BrewCommand {
await MainMenu.shared.refreshActiveInstallation() await MainMenu.shared.refreshActiveInstallation()
onProgress(.create(value: 1, title: progressTitle, description: "The operation has succeeded.")) onProgress(.create(value: 1, title: progressTitle, description: "The operation has succeeded."))
} else { } else {
throw BrewCommandError(error: "The command failed to run correctly.") throw BrewCommandError(error: "The command failed to run correctly.", log: loggedMessages)
} }
} }
} }

View File

@@ -197,11 +197,14 @@ struct PhpFormulaeView: View {
} }
} }
} }
} catch { } catch let error {
let error = error as! BrewCommandError
let messages = error.log.suffix(5).joined(separator: "\n")
self.setBusyStatus(false) self.setBusyStatus(false)
self.presentErrorAlert( self.presentErrorAlert(
title: "phpman.failures.install.title".localized, title: "phpman.failures.install.title".localized,
description: "phpman.failures.install.desc".localized, description: "phpman.failures.install.desc".localized(messages),
button: "generic.ok".localized button: "generic.ok".localized
) )
} }

View File

@@ -120,7 +120,9 @@ You may be asked for your password during the uninstallation process if file per
"phpman.warnings.removal.button" = "Uninstall"; "phpman.warnings.removal.button" = "Uninstall";
"phpman.failures.install.title" = "Installation failed!"; "phpman.failures.install.title" = "Installation failed!";
"phpman.failures.install.desc" = "Unfortunately, the automatic installation failed. PHP Monitor can only do so much and it's always possible that installations can fail for some unknown reason. At this point I'd recommend checking out the README to find out how to manually install a given PHP version via the Terminal. Remember to restart PHP Monitor (or press the refresh button) when this is done."; "phpman.failures.install.desc" = "Unfortunately, the installation or upgrade failed for some reason. I can't do much about this, but I will show you the last messages that were returned by Homebrew:
%@";
"phpman.uninstall_prevented.title" = "You cannot uninstall the currently active version of PHP via PHP Monitor."; "phpman.uninstall_prevented.title" = "You cannot uninstall the currently active version of PHP via PHP Monitor.";
"phpman.uninstall_prevented.desc" = "In order to prevent issues with PHP Monitor and further crashes, it isn't possible to uninstall the currently linked version of PHP via this UI. You can switch versions and try again, or uninstall this version manually via the terminal.\n\nPlease note that PHP Monitor may crash if you uninstall the currently linked PHP version."; "phpman.uninstall_prevented.desc" = "In order to prevent issues with PHP Monitor and further crashes, it isn't possible to uninstall the currently linked version of PHP via this UI. You can switch versions and try again, or uninstall this version manually via the terminal.\n\nPlease note that PHP Monitor may crash if you uninstall the currently linked PHP version.";