diff options
author | Robin Rosenberg <robin.rosenberg@dewire.com> | 2010-12-28 17:15:12 +0100 |
---|---|---|
committer | Shawn O. Pearce <spearce@spearce.org> | 2010-12-30 12:41:22 -0800 |
commit | 240769e023c4ea6c8394c25d58fdca7f0bb82948 (patch) | |
tree | cdb71c9fea3725b35e01833c108f4997c12a37a2 | |
parent | 14b358a6fbe2aa9f04a1bb6a27812458af6a755e (diff) | |
download | jgit-240769e023c4ea6c8394c25d58fdca7f0bb82948.tar.gz jgit-240769e023c4ea6c8394c25d58fdca7f0bb82948.zip |
Refactor exec of a command and reading one line into utility
Change-Id: Ia9e5afe7f29c3e5e74b8d226441ed429fb229c82
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java | 42 | ||||
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/util/FS_Win32_Cygwin.java | 38 |
2 files changed, 47 insertions, 33 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java index 2287f68fa2..0a3fad001b 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java +++ b/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; + } } diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/FS_Win32_Cygwin.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/FS_Win32_Cygwin.java index 0af955f945..15da505f5d 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/util/FS_Win32_Cygwin.java +++ b/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); } |