Change-Id: Ia9e5afe7f29c3e5e74b8d226441ed429fb229c82 Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>tags/v0.11.1
@@ -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; | |||
} | |||
} |
@@ -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); | |||
} | |||