public String call()

in appengine-plugins-core/src/main/java/com/google/cloud/tools/managedcloudsdk/command/CommandCaller.java [44:88]


  public String call(
      List<String> command,
      @Nullable Path workingDirectory,
      @Nullable Map<String, String> environment)
      throws CommandExitException, CommandExecutionException, InterruptedException {
    ProcessExecutor processExecutor = processExecutorSupplier.get();

    AsyncStreamSaver stdOutSaver = streamSaverFactory.newSaver();
    AsyncStreamSaver stdErrSaver = streamSaverFactory.newSaver();

    try {
      int exitCode =
          processExecutor.run(command, workingDirectory, environment, stdOutSaver, stdErrSaver);
      if (exitCode != 0) {
        String stdOut;
        String stdErr;
        try {
          stdOut = stdOutSaver.getResult().get();
        } catch (InterruptedException ignored) {
          stdOut = "stdout collection interrupted";
        }
        try {
          stdErr = stdErrSaver.getResult().get();
        } catch (InterruptedException ignored) {
          stdErr = "stderr collection interrupted";
        }
        throw new CommandExitException(exitCode, stdOut + "\n" + stdErr);
      }
      return stdOutSaver.getResult().get();
    } catch (IOException | ExecutionException ex) {
      String stdOut;
      String stdErr;
      try {
        stdOut = stdOutSaver.getResult().get();
      } catch (InterruptedException | ExecutionException ignored) {
        stdOut = "stdout collection interrupted";
      }
      try {
        stdErr = stdErrSaver.getResult().get();
      } catch (InterruptedException | ExecutionException ignored) {
        stdErr = "stderr collection interrupted";
      }
      throw new CommandExecutionException(stdOut + "\n" + stdErr, ex);
    }
  }