Skip to content

Commit 5fbadcd

Browse files
committed
Merge pull request #53 from younata/master
TaskError should report which task failed
2 parents 27deb38 + 9d0b2be commit 5fbadcd

File tree

3 files changed

+18
-6
lines changed

3 files changed

+18
-6
lines changed

ReactiveTask/Errors.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import ReactiveCocoa
1212
/// An error originating from ReactiveTask.
1313
public enum TaskError: ErrorType {
1414
/// A shell task exited unsuccessfully.
15-
case ShellTaskFailed(exitCode: Int32, standardError: String?)
15+
case ShellTaskFailed(Task, exitCode: Int32, standardError: String?)
1616

1717
/// An error was returned from a POSIX API.
1818
case POSIXError(Int32)
@@ -21,8 +21,8 @@ public enum TaskError: ErrorType {
2121
extension TaskError: CustomStringConvertible {
2222
public var description: String {
2323
switch self {
24-
case let .ShellTaskFailed(exitCode, standardError):
25-
var description = "A shell task failed with exit code \(exitCode)"
24+
case let .ShellTaskFailed(task, exitCode, standardError):
25+
var description = "A shell task (\(task)) failed with exit code \(exitCode)"
2626
if let standardError = standardError {
2727
description += ":\n\(standardError)"
2828
}

ReactiveTask/Task.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -461,8 +461,8 @@ public func launchTask(task: Task, standardInput: SignalProducer<NSData, NoError
461461
rawTask.standardError = stderrPipe.writeHandle
462462

463463
dispatch_group_enter(group)
464-
rawTask.terminationHandler = { task in
465-
let terminationStatus = task.terminationStatus
464+
rawTask.terminationHandler = { nstask in
465+
let terminationStatus = nstask.terminationStatus
466466
if terminationStatus == EXIT_SUCCESS {
467467
// Wait for stderr to finish, then pass
468468
// through stdout.
@@ -477,7 +477,7 @@ public func launchTask(task: Task, standardInput: SignalProducer<NSData, NoError
477477
.then(stderrAggregated)
478478
.flatMap(.Concat) { data -> SignalProducer<TaskEvent<NSData>, TaskError> in
479479
let errorString = (data.length > 0 ? NSString(data: data, encoding: NSUTF8StringEncoding) as? String : nil)
480-
return SignalProducer(error: .ShellTaskFailed(exitCode: terminationStatus, standardError: errorString))
480+
return SignalProducer(error: .ShellTaskFailed(task, exitCode: terminationStatus, standardError: errorString))
481481
}
482482
.start(observer)
483483
}

ReactiveTaskTests/TaskSpec.swift

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,5 +80,17 @@ class TaskSpec: QuickSpec {
8080
expect(NSString(data: data, encoding: NSUTF8StringEncoding)).to(equal("bar\nbuzz\nfoo\nfuzz\n"))
8181
}
8282
}
83+
84+
it("should error correctly") {
85+
let task = Task("/usr/bin/stat", arguments: [ "not-a-real-file" ])
86+
let result = launchTask(task)
87+
.wait()
88+
89+
expect(result).notTo(beNil())
90+
expect(result.error).toNot(beNil())
91+
if let error = result.error {
92+
expect(error.description) == "A shell task (/usr/bin/stat not-a-real-file) failed with exit code 1:\nstat: not-a-real-file: stat: No such file or directory\n"
93+
}
94+
}
8395
}
8496
}

0 commit comments

Comments
 (0)