mirror of
https://github.com/XcodesOrg/XcodesApp.git
synced 2026-04-26 14:57:37 +00:00
Convert Current.shell to Combine
This commit is contained in:
parent
f00ae396a6
commit
245780023b
2 changed files with 8 additions and 32 deletions
|
|
@ -24,13 +24,13 @@ public struct Environment {
|
||||||
public var Current = Environment()
|
public var Current = Environment()
|
||||||
|
|
||||||
public struct Shell {
|
public struct Shell {
|
||||||
public var unxip: (URL) -> Promise<ProcessOutput> = { Process.run(Path.root.usr.bin.xip, workingDirectory: $0.deletingLastPathComponent(), "--expand", "\($0.path)") }
|
public var unxip: (URL) -> AnyPublisher<ProcessOutput, Error> = { Process.run(Path.root.usr.bin.xip, workingDirectory: $0.deletingLastPathComponent(), "--expand", "\($0.path)") }
|
||||||
public var spctlAssess: (URL) -> Promise<ProcessOutput> = { Process.run(Path.root.usr.sbin.spctl, "--assess", "--verbose", "--type", "execute", "\($0.path)") }
|
public var spctlAssess: (URL) -> AnyPublisher<ProcessOutput, Error> = { Process.run(Path.root.usr.sbin.spctl, "--assess", "--verbose", "--type", "execute", "\($0.path)") }
|
||||||
public var codesignVerify: (URL) -> Promise<ProcessOutput> = { Process.run(Path.root.usr.bin.codesign, "-vv", "-d", "\($0.path)") }
|
public var codesignVerify: (URL) -> AnyPublisher<ProcessOutput, Error> = { Process.run(Path.root.usr.bin.codesign, "-vv", "-d", "\($0.path)") }
|
||||||
public var buildVersion: () -> Promise<ProcessOutput> = { Process.run(Path.root.usr.bin.sw_vers, "-buildVersion") }
|
public var buildVersion: () -> AnyPublisher<ProcessOutput, Error> = { Process.run(Path.root.usr.bin.sw_vers, "-buildVersion") }
|
||||||
public var xcodeBuildVersion: (InstalledXcode) -> Promise<ProcessOutput> = { Process.run(Path.root.usr.libexec.PlistBuddy, "-c", "Print :ProductBuildVersion", "\($0.path.string)/Contents/version.plist") }
|
public var xcodeBuildVersion: (InstalledXcode) -> AnyPublisher<ProcessOutput, Error> = { Process.run(Path.root.usr.libexec.PlistBuddy, "-c", "Print :ProductBuildVersion", "\($0.path.string)/Contents/version.plist") }
|
||||||
public var getUserCacheDir: () -> Promise<ProcessOutput> = { Process.run(Path.root.usr.bin.getconf, "DARWIN_USER_CACHE_DIR") }
|
public var getUserCacheDir: () -> AnyPublisher<ProcessOutput, Error> = { Process.run(Path.root.usr.bin.getconf, "DARWIN_USER_CACHE_DIR") }
|
||||||
public var touchInstallCheck: (String, String, String) -> Promise<ProcessOutput> = { Process.run(Path.root.usr.bin/"touch", "\($0)com.apple.dt.Xcode.InstallCheckCache_\($1)_\($2)") }
|
public var touchInstallCheck: (String, String, String) -> AnyPublisher<ProcessOutput, Error> = { Process.run(Path.root.usr.bin/"touch", "\($0)com.apple.dt.Xcode.InstallCheckCache_\($1)_\($2)") }
|
||||||
|
|
||||||
public var xcodeSelectPrintPath: () -> AnyPublisher<ProcessOutput, Error> = { Process.run(Path.root.usr.bin.join("xcode-select"), "-p") }
|
public var xcodeSelectPrintPath: () -> AnyPublisher<ProcessOutput, Error> = { Process.run(Path.root.usr.bin.join("xcode-select"), "-p") }
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,31 +4,7 @@ import Path
|
||||||
|
|
||||||
public typealias ProcessOutput = (status: Int32, out: String, err: String)
|
public typealias ProcessOutput = (status: Int32, out: String, err: String)
|
||||||
|
|
||||||
extension Process {
|
extension Process {
|
||||||
@discardableResult
|
|
||||||
static func run(_ executable: Path, workingDirectory: URL? = nil, input: String? = nil, _ arguments: String...) -> Promise<ProcessOutput> {
|
|
||||||
return run(executable.url, workingDirectory: workingDirectory, input: input, arguments)
|
|
||||||
}
|
|
||||||
|
|
||||||
@discardableResult
|
|
||||||
static func run(_ executable: URL, workingDirectory: URL? = nil, input: String? = nil, _ arguments: [String]) -> Promise<ProcessOutput> {
|
|
||||||
let process = Process()
|
|
||||||
process.currentDirectoryURL = workingDirectory ?? executable.deletingLastPathComponent()
|
|
||||||
process.executableURL = executable
|
|
||||||
process.arguments = arguments
|
|
||||||
if let input = input {
|
|
||||||
let inputPipe = Pipe()
|
|
||||||
process.standardInput = inputPipe.fileHandleForReading
|
|
||||||
inputPipe.fileHandleForWriting.write(Data(input.utf8))
|
|
||||||
inputPipe.fileHandleForWriting.closeFile()
|
|
||||||
}
|
|
||||||
return process.launch(.promise).map { std in
|
|
||||||
let output = String(data: std.out.fileHandleForReading.readDataToEndOfFile(), encoding: .utf8) ?? ""
|
|
||||||
let error = String(data: std.err.fileHandleForReading.readDataToEndOfFile(), encoding: .utf8) ?? ""
|
|
||||||
return (process.terminationStatus, output, error)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@discardableResult
|
@discardableResult
|
||||||
static func run(_ executable: Path, workingDirectory: URL? = nil, input: String? = nil, _ arguments: String...) -> AnyPublisher<ProcessOutput, Error> {
|
static func run(_ executable: Path, workingDirectory: URL? = nil, input: String? = nil, _ arguments: String...) -> AnyPublisher<ProcessOutput, Error> {
|
||||||
return run(executable.url, workingDirectory: workingDirectory, input: input, arguments)
|
return run(executable.url, workingDirectory: workingDirectory, input: input, arguments)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue