anchor.diff:    }
   }
   
  -class RunCommandError implements Exception {
  +class RunCommandError extends ProcessException {
     final String stdout;
     final String stderr;
  -  RunCommandError(this.stdout, this.stderr);
  +
  +  RunCommandError(String executable, List<String> arguments, int errorCode,
  +      this.stdout, this.stderr)
  +      : super(executable, arguments, '', errorCode);
  +
  +  String toString() {
  +    var buffer = new StringBuffer(super.toString());
  +    if (stdout != null && stdout.isNotEmpty) {
  +      buffer.writeln();
  +      buffer.writeln('stdout:');
  +      buffer.write(stdout.trim());
  +    }
  +
  +    if (stderr != null && stderr.isNotEmpty) {
  +      buffer.writeln();
  +      buffer.writeln('stderr:');
  +      buffer.write(stderr.trim());
  +    }
  +
  +    return buffer.toString();
  +  }
   }
  
positive.code:           ]);
            await _archivePackage(logs, package);
          } on RunCommandError catch (e, s) {
            _addLog(logs, Level.WARNING,
                "Got RunCommandError exception,\nstdout: ${e.stdout},\nstderr: ${e.stderr}");
            erroredPackages.add(package);
          } catch (e, s) {
            var chain = new Chain.forTrace(s).terse;
  
negative.code:   }
  
    Future _runCommand(
        List<LogRecord> logs, String command, List<String> arguments,
        {String workingDirectory, Duration duration}) async {
      _addLog(logs, Level.INFO, "Running '$command ${arguments.join(" ")}'");
  
  