aboutsummaryrefslogtreecommitdiff
path: root/Sources/phbar/Models/Runner.swift
diff options
context:
space:
mode:
authorTommaso Negri <me@tommasongr.com>2026-08-09 23:58:42 +0200
committerTommaso Negri <me@tommasongr.com>2026-08-09 23:58:44 +0200
commitd59b22e557fa5d69ea6be725a7e5bcd829588225 (patch)
tree618e20ef2b648e46eac3d51e14b8e0fcc1faba3c /Sources/phbar/Models/Runner.swift
parent62ce97dcb63d61c8db739c1b32bd387042ca66a0 (diff)
downloadbar-d59b22e557fa5d69ea6be725a7e5bcd829588225.tar.gz
bar-d59b22e557fa5d69ea6be725a7e5bcd829588225.zip
rename project and add documentation guides
Diffstat (limited to 'Sources/phbar/Models/Runner.swift')
-rw-r--r--Sources/phbar/Models/Runner.swift72
1 files changed, 0 insertions, 72 deletions
diff --git a/Sources/phbar/Models/Runner.swift b/Sources/phbar/Models/Runner.swift
deleted file mode 100644
index be4dbff..0000000
--- a/Sources/phbar/Models/Runner.swift
+++ /dev/null
@@ -1,72 +0,0 @@
-import Foundation
-
-/// Runs a shell command and returns its stdout as separate lines.
-///
-/// Blocking — always call from a background context (e.g. `Task.detached`).
-enum Runner {
- /// Run a command and returns stdout as an array of separated lines.
- /// - Parameters:
- /// - command: The command to run.
- /// - env: An optional dictionary of strings to merge into
- /// the process environment.
- ///
- /// - Returns: An array of the text lines printed to stdout.
- static func run(_ command: String, env: [String: String] = [:]) -> [String] {
- let process = Process()
- process.executableURL = URL(fileURLWithPath: "/bin/sh")
- process.arguments = ["-c", command]
-
- var environment = ProcessInfo.processInfo.environment
- environment.merge(env) { _, new in new }
- process.environment = environment
-
- let stdout = Pipe()
- let stderr = Pipe()
- process.standardOutput = stdout
- process.standardError = stderr
-
- guard (try? process.run()) != nil else {
- return ["ERROR"]
- }
-
- let data = stdout.fileHandleForReading.readDataToEndOfFile()
- let errData = stderr.fileHandleForReading.readDataToEndOfFile()
- process.waitUntilExit()
-
- guard process.terminationStatus == 0 else {
- write(errData, to: .standardError)
- return ["ERROR"]
- }
-
- guard let string = String(data: data, encoding: .utf8) else {
- return [""]
- }
-
- return parse(string)
- }
-
- /// Split output into lines. A single trailing newline
- /// (from a final `\n`) is dropped; blank lines elsewhere
- /// are kept so a script can emit intentional gaps.
- static func parse(_ text: String) -> [String] {
- var lines = text.components(separatedBy: "\n")
- if lines.last == "" { lines.removeLast() }
- return lines
- }
-
- /// Write data to the provided handle.
- /// - Parameters:
- /// - data: The data to write.
- /// - handle: The handle to which data should be written.
- static func write(_ data: Data, to handle: FileHandle) {
- handle.write(data)
- }
-
- /// Write string to the provided handle.
- /// - Parameters:
- /// - string: The string to write.
- /// - handle: The handle to which data should be written.
- static func write(_ string: String, to handle: FileHandle) {
- write(Data(string.utf8), to: handle)
- }
-}