Refactor exec of a command and reading one line into utility

Change-Id: Ia9e5afe7f29c3e5e74b8d226441ed429fb229c82
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
This commit is contained in:
Robin Rosenberg 2010-12-28 17:15:12 +01:00 committed by Shawn O. Pearce
parent 14b358a6fb
commit 240769e023
2 changed files with 47 additions and 33 deletions

View File

@ -43,7 +43,10 @@
package org.eclipse.jgit.util;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.security.AccessController;
import java.security.PrivilegedAction;
@ -210,4 +213,43 @@ static File searchPath(final String path, final String... lookFor) {
}
return null;
}
/**
* Execute a command and return a single line of output as a String
*
* @param dir
* Working directory for the command
* @param command
* as component array
* @param encoding
* @return the one-line output of the command
*/
protected static String readPipe(File dir, String[] command, String encoding) {
try {
final Process p = Runtime.getRuntime().exec(command, null, dir);
final BufferedReader lineRead = new BufferedReader(
new InputStreamReader(p.getInputStream(), encoding));
String r = null;
try {
r = lineRead.readLine();
} finally {
p.getOutputStream().close();
p.getErrorStream().close();
lineRead.close();
}
for (;;) {
try {
if (p.waitFor() == 0 && r != null && r.length() > 0)
return r;
break;
} catch (InterruptedException ie) {
// Stop bothering me, I have a zombie to reap.
}
}
} catch (IOException e) {
// ignore
}
return null;
}
}

View File

@ -43,10 +43,7 @@
package org.eclipse.jgit.util;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.security.AccessController;
import java.security.PrivilegedAction;
@ -69,36 +66,11 @@ public String run() {
}
public File resolve(final File dir, final String pn) {
try {
final Process p;
p = Runtime.getRuntime().exec(
new String[] { cygpath, "--windows", "--absolute", pn },
null, dir);
p.getOutputStream().close();
final BufferedReader lineRead = new BufferedReader(
new InputStreamReader(p.getInputStream(), "UTF-8"));
String r = null;
try {
r = lineRead.readLine();
} finally {
lineRead.close();
}
for (;;) {
try {
if (p.waitFor() == 0 && r != null && r.length() > 0)
return new File(r);
break;
} catch (InterruptedException ie) {
// Stop bothering me, I have a zombie to reap.
}
}
} catch (IOException ioe) {
// Fall through and use the default return.
//
}
String w = readPipe(dir, //
new String[] { cygpath, "--windows", "--absolute", pn }, //
"UTF-8");
if (w != null)
return new File(w);
return super.resolve(dir, pn);
}