Merge pull request #9 from gspencergoog/pool_fail_ok

Add failOk to WorkerJob to avoid printing failure messages for failed jobs.
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9a06f22..6eca3d2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,10 @@
 # Change Log for `process_runner`
 
+## 2.0.5
+
+* Added `WorkerJob.failOk` so that failure message of failed worker jobs is
+  suppressed by default, but can be turned on.
+
 ## 2.0.4
 
 * Added `printOutputDefault` to the `ProcessRunner` constructor, and updated
diff --git a/lib/src/process_pool.dart b/lib/src/process_pool.dart
index 7d96c89..a0256f1 100644
--- a/lib/src/process_pool.dart
+++ b/lib/src/process_pool.dart
@@ -4,7 +4,7 @@
 
 import 'dart:async';
 import 'dart:convert' show Encoding;
-import 'dart:io' show Directory, Platform, stdout, SystemEncoding;
+import 'dart:io' show Directory, Platform, stdout, SystemEncoding, stderr;
 
 import 'package:async/async.dart' show StreamGroup;
 
@@ -22,7 +22,10 @@
     this.printOutput = false,
     this.stdin,
     this.stdinRaw,
-  }) : name = name ?? command.join(' ');
+    this.failOk = true,
+  })  : assert(failOk != null),
+        assert(printOutput != null),
+        name = name ?? command.join(' ');
 
   /// The name of the job.
   ///
@@ -54,6 +57,12 @@
   /// Whether or not this command should print it's stdout when it runs.
   final bool printOutput;
 
+  /// Whether or not failure of this job should print a message to stderr or
+  /// not.
+  ///
+  /// Defaults to true, since the [result] will contain the exit code.
+  final bool failOk;
+
   /// Once the job is complete, this contains the result of the job.
   ///
   /// The [stderr], [stdout], and [output] accessors will decode their raw
@@ -174,10 +183,13 @@
         workingDirectory: job.workingDirectory,
         printOutput: job.printOutput,
         stdin: job.stdinRaw ?? (job.stdin != null ? encoding.encoder.bind(job.stdin) : null),
+        failOk: false, // Must be false so that we can catch the exception below.
       );
       _completedJobs.add(job);
     } on ProcessRunnerException catch (e) {
-      print('\nJob $job failed: $e');
+      if (!job.failOk) {
+        stderr.writeln('\nJob $job failed: $e');
+      }
       _failedJobs.add(job);
     } finally {
       _inProgressJobs--;
diff --git a/pubspec.yaml b/pubspec.yaml
index 6098819..1476a39 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -3,7 +3,7 @@
 # found in the LICENSE file.
 
 name: process_runner
-version: 2.0.4
+version: 2.0.5
 description: A process invocation astraction for Dart that manages a multiprocess queue.
 homepage: https://github.com/google/process_runner