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>
tags/v0.11.1
Robin Rosenberg 13 years ago
parent
commit
240769e023

+ 42
- 0
org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java 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 @@ 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;
}
}

+ 5
- 33
org.eclipse.jgit/src/org/eclipse/jgit/util/FS_Win32_Cygwin.java 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 @@ 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