Browse Source

Refactor exec of a command and reading one line into utility

Change-Id: Ia9e5afe7f29c3e5e74b8d226441ed429fb229c82
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
stable-0.11
Robin Rosenberg 14 years ago committed by Shawn O. Pearce
parent
commit
240769e023
  1. 42
      org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java
  2. 38
      org.eclipse.jgit/src/org/eclipse/jgit/util/FS_Win32_Cygwin.java

42
org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java

@ -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 @@ public abstract class FS {
}
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;
}
}

38
org.eclipse.jgit/src/org/eclipse/jgit/util/FS_Win32_Cygwin.java

@ -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 @@ class FS_Win32_Cygwin extends FS_Win32 {
}
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);
}

Loading…
Cancel
Save