[yocto] [PATCH] [eclipse-poky][master]Capture error output of crosstap command
Zhang, Jessica
jessica.zhang at intel.com
Wed Apr 17 13:17:59 PDT 2013
Merged to eclipse-poky master and dylan.
Thanks,
Jessica
-----Original Message-----
From: yocto-bounces at yoctoproject.org [mailto:yocto-bounces at yoctoproject.org] On Behalf Of Ioana Grigoropol
Sent: Tuesday, April 16, 2013 6:32 AM
To: yocto at yoctoproject.org
Subject: [yocto] [PATCH] [eclipse-poky][master]Capture error output of crosstap command
- when running a command using system tap plugin make sure to read all output from standard and error output and display it accordingly
[Yocto #4270]
Signed-off-by: Ioana Grigoropol <ioanax.grigoropol at intel.com>
---
.../org/yocto/sdk/remotetools/ShellSession.java | 79 ++++++++++++--------
1 file changed, 48 insertions(+), 31 deletions(-)
diff --git a/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/ShellSession.java b/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/ShellSession.java
index bf41d3f..bd1cb38 100644
--- a/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/ShellSession.java
+++ b/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/Sh
+++ ellSession.java
@@ -18,6 +18,7 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter;
+import java.lang.reflect.InvocationTargetException;
public class ShellSession {
/**
@@ -149,43 +150,59 @@ public class ShellSession {
}
return sb.toString();
}
-
+
synchronized
public void execute(String command) throws IOException {
interrupt = false;
String errorMessage = null;
- InputStream errIs = process.getErrorStream();
- if (errIs.available() > 0) {
- clearErrorStream(errIs);
- }
sendToProcessAndTerminate(command);
-
- BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
- String std = null;
-
- do {
- if (errIs.available() > 0) {
- byte[] msg = new byte[errIs.available()];
-
- errIs.read(msg, 0, msg.length);
- String msg_str = new String(msg);
-
- out.write(msg_str);
- out.write(LT);
- if (!msg_str.contains("WARNING"))
- errorMessage = msg_str;
- }
-
- std = br.readLine();
-
- if (std != null && !std.endsWith(TERMINATOR)) {
- out.write(std);
- out.write(LT);
- }
-
- } while (!std.endsWith(TERMINATOR) && !interrupt);
-
+ boolean cancel = false;
+ try {
+ InputStream is = process.getInputStream();
+ InputStream es = process.getErrorStream();
+ String info;
+ while (!cancel) {
+ info = null;
+ StringBuffer buffer = new StringBuffer();
+ int c;
+ while (is.available() > 0) {
+ c = is.read();
+ char ch = (char) c;
+ buffer.append(ch);
+ if (ch == '\n') {
+ info = buffer.toString();
+ if (!info.trim().endsWith(TERMINATOR)) {
+ out.write(info);
+ out.write(LT);
+ buffer.delete(0, buffer.length());
+ } else {
+ cancel = true;
+ break;
+ }
+ }
+ }
+ while (es.available() > 0) {
+ c = es.read();
+ char ch = (char) c;
+ buffer.append(ch);
+ if (ch == '\n') {
+ info = buffer.toString();
+ if (!info.contains("WARNING"))
+ errorMessage += info;
+ out.write(info);
+ out.write(LT);
+ buffer.delete(0, buffer.length());
+ }
+ }
+ }
+ } catch (IOException e) {
+ try {
+ throw new InvocationTargetException(e);
+ } catch (InvocationTargetException e1) {
+ e1.printStackTrace();
+ }
+ }
out.flush();
if (errorMessage != null) {
throw new IOException(errorMessage);
--
1.7.9.5
_______________________________________________
yocto mailing list
yocto at yoctoproject.org
https://lists.yoctoproject.org/listinfo/yocto
More information about the yocto
mailing list