Change-Id: Ia9e5afe7f29c3e5e74b8d226441ed429fb229c82 Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>tags/v0.11.1
package org.eclipse.jgit.util; | package org.eclipse.jgit.util; | ||||
import java.io.BufferedReader; | |||||
import java.io.File; | import java.io.File; | ||||
import java.io.IOException; | |||||
import java.io.InputStreamReader; | |||||
import java.security.AccessController; | import java.security.AccessController; | ||||
import java.security.PrivilegedAction; | import java.security.PrivilegedAction; | ||||
} | } | ||||
return null; | 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; | |||||
} | |||||
} | } |
package org.eclipse.jgit.util; | package org.eclipse.jgit.util; | ||||
import java.io.BufferedReader; | |||||
import java.io.File; | import java.io.File; | ||||
import java.io.IOException; | |||||
import java.io.InputStreamReader; | |||||
import java.security.AccessController; | import java.security.AccessController; | ||||
import java.security.PrivilegedAction; | import java.security.PrivilegedAction; | ||||
} | } | ||||
public File resolve(final File dir, final String pn) { | 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); | return super.resolve(dir, pn); | ||||
} | } | ||||