src/jdk.jpackage/share/classes/jdk/jpackage/internal/IOUtils.java
branchJDK-8200758-branch
changeset 58417 67ffaf3a2b75
parent 58301 e0efb29609bd
child 58696 61c44899b4eb
--- a/src/jdk.jpackage/share/classes/jdk/jpackage/internal/IOUtils.java	Mon Sep 30 19:11:19 2019 -0400
+++ b/src/jdk.jpackage/share/classes/jdk/jpackage/internal/IOUtils.java	Mon Sep 30 19:33:13 2019 -0400
@@ -26,8 +26,6 @@
 package jdk.jpackage.internal;
 
 import java.io.*;
-import java.net.URL;
-import java.util.Arrays;
 import java.nio.channels.FileChannel;
 import java.nio.file.FileVisitResult;
 import java.nio.file.Files;
@@ -150,37 +148,20 @@
         exec(pb, false, null);
     }
 
-    public static void exec(ProcessBuilder pb, boolean testForPresenseOnly,
+    static void exec(ProcessBuilder pb, boolean testForPresenseOnly,
             PrintStream consumer) throws IOException {
-        pb.redirectErrorStream(true);
-        Log.verbose("Running "
-                + Arrays.toString(pb.command().toArray(new String[0]))
-                + (pb.directory() != null ? (" in " + pb.directory()) : ""));
-        Process p = pb.start();
-        InputStreamReader isr = new InputStreamReader(p.getInputStream());
-        BufferedReader br = new BufferedReader(isr);
-        String lineRead;
-        String output = "";
-        while ((lineRead = br.readLine()) != null) {
+        List<String> output = new ArrayList<>();
+        Executor exec = Executor.of(pb).setOutputConsumer(lines -> {
+            lines.forEach(output::add);
             if (consumer != null) {
-                consumer.print(lineRead + '\n');
-            } else {
-               Log.verbose(lineRead);
+                output.forEach(consumer::println);
             }
-            output += lineRead;
-        }
-        try {
-            int ret = p.waitFor();
-            if (ret != 0 && !(testForPresenseOnly && ret != 127)) {
-                throw new IOException("Exec failed with code "
-                        + ret + " command ["
-                        + Arrays.toString(pb.command().toArray(new String[0]))
-                        + " in " + (pb.directory() != null ?
-                                pb.directory().getAbsolutePath() :
-                                "unspecified directory")
-                        + " output: " + output);
-            }
-        } catch (InterruptedException ex) {
+        });
+
+        if (testForPresenseOnly) {
+            exec.execute();
+        } else {
+            exec.executeExpectSuccess();
         }
     }