[yocto] [PATCH 3/3] [PATCH] Processes that execute shell commands block the Yocto-BSP interface
Zhang, Jessica
jessica.zhang at intel.com
Thu Aug 16 17:30:31 PDT 2012
Hi Ioana,
The patch is missing signed-off
Thanks,
Jessica
-----Original Message-----
From: yocto-bounces at yoctoproject.org [mailto:yocto-bounces at yoctoproject.org] On Behalf Of Ioana Grigoropol
Sent: Thursday, August 16, 2012 8:14 AM
To: yocto at yoctoproject.org
Cc: Grigoropol, IoanaX
Subject: [yocto] [PATCH 3/3] [PATCH] Processes that execute shell commands block the Yocto-BSP interface
- send processes that execute shell commands in the background and show
progress dialog
- retrieve status of the background executions & items collected
Signed-off-by: Ioana Grigoropol <ioanax.grigoropol at intel.com>
---
.../sdk/remotetools/wizards/bsp/MainPage.java | 1 -
.../remotetools/wizards/bsp/PropertiesPage.java | 196 ++++++++++++--------
2 files changed, 123 insertions(+), 74 deletions(-)
diff --git a/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/wizards/bsp/MainPage.java b/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/wizards/bsp/MainPage.java
index e5a21d1..bd80ed4 100644
--- a/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/wizards/bsp/MainPage.java
+++ b/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/wi
+++ zards/bsp/MainPage.java
@@ -313,7 +313,6 @@ public class MainPage extends WizardPage {
// system.property usually points to the location from where eclipse was started
String createBuildDirCmd = "cd " + metadataDir + ";source " + metadataDir + "/oe-init-build-env " + buildLoc;
- System.out.println(createBuildDirCmd);
try {
ProcessBuilder builder = new ProcessBuilder(new String[] {"sh", "-c", createBuildDirCmd});
Process proc = builder.start();
diff --git a/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/wizards/bsp/PropertiesPage.java b/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/wizards/bsp/PropertiesPage.java
index 4661b37..38af7b9 100644
--- a/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/wizards/bsp/PropertiesPage.java
+++ b/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/wi
+++ zards/bsp/PropertiesPage.java
@@ -11,7 +11,6 @@
package org.yocto.sdk.remotetools.wizards.bsp;
import java.io.BufferedReader;
-import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Enumeration;
@@ -19,7 +18,10 @@ import java.util.HashSet; import java.util.Hashtable; import java.util.Iterator;
+import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
@@ -59,6 +61,9 @@ public class PropertiesPage extends WizardPage {
private static final String NEW_KBRANCH_NAME = "new_kbranch";
private static final String QARCH_NAME = "qemuarch";
+ private static final String KERNEL_CHOICES = "choices";
+ private static final String KERNEL_BRANCHES = "branches";
+
private Hashtable<YoctoBspPropertyElement, Control> propertyControlMap;
HashSet<YoctoBspPropertyElement> properties;
private Composite composite;
@@ -81,9 +86,8 @@ public class PropertiesPage extends WizardPage {
}
public void onEnterPage(YoctoBspElement element) {
- String[] values;
if (!element.getValidPropertiesFile()) {
- setErrorMessage("There's no valid properties file created, please choose \"Back\" to reselect kernel architectur!");
+ setErrorMessage("There's no valid properties file created, please
+choose \"Back\" to reselect kernel architecture!");
return;
}
@@ -131,9 +135,7 @@ public class PropertiesPage extends WizardPage {
newButton.setSelection(true);
existingButton.setSelection(false);
- values = getValues(KERNEL_CHOICE);
- if (values != null)
- kcCombo.setItems(values);
+ updateKernelValues(KERNEL_CHOICES, KERNEL_CHOICE);
}
try {
@@ -194,10 +196,9 @@ public class PropertiesPage extends WizardPage {
new Label (choiceContainer, SWT.NONE).setText(name+":");
Combo combo = new Combo(choiceContainer, SWT.BORDER | SWT.READ_ONLY);
combo.setLayout(new FillLayout());
-
- values = getValues(name);
- if (values != null)
- combo.setItems(values);
+
+ updateKernelValues(KERNEL_CHOICES, name);
+
propertyControlMap.put(propElem, (Control)combo);
}
}
@@ -375,7 +376,6 @@ public class PropertiesPage extends WizardPage {
}
private void controlChanged(Widget widget) {
setErrorMessage(null);
- String kb_property;
String kernel_choice = kcCombo.getText();
if ((kernel_choice == null) || (kernel_choice.isEmpty())) { @@ -387,90 +387,140 @@ public class PropertiesPage extends WizardPage {
existingButton.setSelection(false);
kbCombo.removeAll();
- kb_property = "\\\"" + kernel_choice + "\\\"."+NEW_KBRANCH_NAME;
- String[] values = getValues(kb_property);
- if (values != null)
- kbCombo.setItems(values);
- }
- if (widget == kbCombo) {
+ updateKernelValues(KERNEL_BRANCHES, "\\\"" + kernel_choice + "\\\"." + NEW_KBRANCH_NAME);
+ } else if (widget == kbCombo) {
setErrorMessage(null);
- }
- if (widget == newButton) {
+ } else if (widget == newButton) {
boolean newBranch = newButton.getSelection();
if (newBranch) {
- kb_property = "\"" + kernel_choice + "\"."+NEW_KBRANCH_NAME;
- String[] values = getValues(kb_property);
- if (values != null)
- kbCombo.setItems(values);
+ updateKernelValues(KERNEL_BRANCHES, "\"" + kernel_choice + "\"." +
+NEW_KBRANCH_NAME);
} else {
- kb_property = "\"" + kernel_choice + "\"."+EXISTING_KBRANCH_NAME;
- String[] values = getValues(kb_property);
- if (values != null)
- kbCombo.setItems(values);
+ updateKernelValues(KERNEL_BRANCHES, "\"" + kernel_choice + "\"." +
+EXISTING_KBRANCH_NAME);
}
- }
- if (widget == existingButton) {
+ } else if (widget == existingButton) {
boolean existingBranch = existingButton.getSelection();
if (existingBranch) {
- kb_property = "\"" + kernel_choice + "\"."+EXISTING_KBRANCH_NAME;
- String[] values = getValues(kb_property);
- if (values != null)
- kbCombo.setItems(values);
+ updateKernelValues(KERNEL_BRANCHES, "\"" + kernel_choice + "\"." +
+EXISTING_KBRANCH_NAME);
}
}
canFlipToNextPage();
getWizard().getContainer().updateButtons();
}
- private String[] getValues(String property) {
- ArrayList<String> values = new ArrayList<String>();
+ private void updateKernelValues(final String value, String property) {
+ final ValuesGetter runnable = new ValuesGetter(property);
- String build_dir = "";
- if ((bspElem.getBuildLoc() == null) || bspElem.getBuildLoc().isEmpty())
- build_dir = bspElem.getMetadataLoc()+"/build";
- else
- build_dir = bspElem.getBuildLoc();
-
- String values_cmd = "export BUILDDIR=" + build_dir + ";"+bspElem.getMetadataLoc() + "/scripts/" + VALUES_CMD_PREFIX + bspElem.getKarch() + VALUES_CMD_SURFIX + property;
-
+ ProgressMonitorDialog dialog = new ProgressMonitorDialog(getShell());
try {
- Runtime rt = Runtime.getRuntime();
+ dialog.run(true, true, new IRunnableWithProgress(){
+ public void run(IProgressMonitor monitor) {
+ monitor.beginTask("Loading Kernel " + value + " ...", 100);
+ runnable.run();
+ monitor.done();
+ }
+ });
+ } catch (Exception e) {
+ runnable.getBspAction().setMessage(e.getMessage());
+ }
+
+ BSPAction action = runnable.getBspAction();
+ if (action.getItems() != null) {
+ if (value == KERNEL_CHOICES)
+ kcCombo.setItems(action.getItems());
+ else if (value == KERNEL_BRANCHES)
+ kbCombo.setItems(action.getItems());
+ } else if (action.getMessage() != null)
+ MessageDialog.openError(getShell(), "Yocto-BSP", action.getMessage());
+ }
- Process proc = rt.exec(new String[] {"sh", "-c", values_cmd});
- InputStream stdin = proc.getInputStream();
- InputStreamReader isr = new InputStreamReader(stdin);
- BufferedReader br = new BufferedReader(isr);
- String line = null;
- String error_message = "";
+ class ValuesGetter implements Runnable {
+ private String property;
+ private BSPAction bspAction;
+
+ public ValuesGetter(String property) {
+ this.property = property;
+ this.bspAction = new BSPAction(null, null);
+ }
+
+ public void run() {
+ ArrayList<String> values = new ArrayList<String>();
+
+ String build_dir = "";
+ if ((bspElem.getBuildLoc() == null) || bspElem.getBuildLoc().isEmpty())
+ build_dir = bspElem.getMetadataLoc()+"/build";
+ else
+ build_dir = bspElem.getBuildLoc();
- while ( (line = br.readLine()) != null) {
- if (!line.startsWith("[")) {
- error_message = error_message + line;
- continue;
+ String values_cmd = "export BUILDDIR=" + build_dir + ";" + bspElem.getMetadataLoc() + "/scripts/" + VALUES_CMD_PREFIX + bspElem.getKarch() + VALUES_CMD_SURFIX + property;
+ try {
+ ProcessBuilder builder = new ProcessBuilder(new String[] {"sh", "-c", values_cmd});
+ builder.redirectErrorStream(true);
+ Process process = builder.start();
+ BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
+ String line = null;
+ String error_message = "";
+ while ( (line = br.readLine()) != null) {
+ if (!line.startsWith("[")) {
+ error_message += line + "\n";
+ continue;
+ }
+ String[] items = line.split(",");
+
+ String value = items[0];
+ value = value.replace("[\"", "");
+ value = value.replaceAll("\"$", "");
+ values.add(value);
}
- String[] items = line.split(",");
-
- String value = items[0];
- value = value.replace("[\"", "");
- value = value.replaceAll("\"$", "");
- values.add(value);
+ int exitVal = process.waitFor();
+ if (exitVal != 0) {
+ bspAction.setMessage(error_message);
+ bspAction.setItems(null);
+ }
+ } catch (Exception e) {
+ bspAction.setItems(null);
+ bspAction.setMessage(e.getMessage());
+ }
+ if (!values.isEmpty()) {
+ bspAction.setItems(values.toArray(new String[values.size()]));
+ bspAction.setMessage(null);
}
- int exitVal = proc.waitFor();
- if (exitVal != 0) {
- MessageDialog.openError(getShell(),"Yocto-BSP", error_message);
- return null;
- }
- } catch (Throwable t) {
- t.printStackTrace();
}
- if (!values.isEmpty()) {
- String[] vitems = new String[values.size()];
- vitems = values.toArray(vitems);
- return vitems;
- } else
- return null;
+
+ public BSPAction getBspAction() {
+ return bspAction;
+ }
+
+ public void setBspAction(BSPAction bspAction) {
+ this.bspAction = bspAction;
+ }
+ }
+
+ class BSPAction {
+ private String[] items;
+ private String message;
+
+ BSPAction(String[] items, String message){
+ this.setItems(items);
+ this.setMessage(message);
+ }
+
+ public String[] getItems() {
+ return items;
+ }
+
+ public void setItems(String[] items) {
+ this.items = items;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
}
}
--
1.7.9.5
_______________________________________________
yocto mailing list
yocto at yoctoproject.org
https://lists.yoctoproject.org/listinfo/yocto
More information about the yocto
mailing list