[yocto] [PATCH] Capture and display bitbake errors
Ioana Grigoropol
ioanax.grigoropol at intel.com
Fri Jan 25 04:08:52 PST 2013
- if an error has occured when trying to initializes the bitbake session, this should be display appropriately
- when creating a new Bitbake project, if an error occured while initializing bitbake environment (bitbake -e), we should:
- display the error in the wizard
- prevent the new project creation
- recreate the console command handler
Signed-off-by: Ioana Grigoropol <ioanax.grigoropol at intel.com>
---
.../src/org/yocto/bc/bitbake/BBSession.java | 21 ++++++++++++++++++-
.../src/org/yocto/bc/bitbake/ShellSession.java | 4 ++++
.../yocto/bc/ui/wizards/install/InstallWizard.java | 22 +++++++++++++-------
.../BBConfigurationInitializeOperation.java | 22 +++++++++++++++++++-
.../newproject/CreateBBCProjectOperation.java | 5 +++++
5 files changed, 65 insertions(+), 9 deletions(-)
diff --git a/plugins/org.yocto.bc.ui/src/org/yocto/bc/bitbake/BBSession.java b/plugins/org.yocto.bc.ui/src/org/yocto/bc/bitbake/BBSession.java
index 8a8de22..892bcc8 100644
--- a/plugins/org.yocto.bc.ui/src/org/yocto/bc/bitbake/BBSession.java
+++ b/plugins/org.yocto.bc.ui/src/org/yocto/bc/bitbake/BBSession.java
@@ -76,12 +76,14 @@ public class BBSession implements IBBSessionListener, IModelElement, Map {
protected Map<?,?> properties = null;
protected List <URI> depends = null;
protected boolean initialized = false;
+ protected boolean errorOccured = false;
protected MessageConsole sessionConsole;
private final ReentrantReadWriteLock rwlock = new ReentrantReadWriteLock();
private final Lock rlock = rwlock.readLock();
private final Lock wlock = rwlock.writeLock();
protected String parsingCmd;
private boolean silent = false;
+ private String errorLines = "";
public BBSession(ShellSession ssession, URI projectRoot) throws IOException {
shell = ssession;
@@ -398,7 +400,15 @@ public class BBSession implements IBBSessionListener, IModelElement, Map {
//FIXME : wait for bitbake to finish
properties = parseBBEnvironment(result);
- initialized = true;
+ if (properties.size() == 0) { // there was an error in sourcing bitbake environment
+ shell.printError(errorLines);
+ errorOccured = true;
+ } else {
+ errorLines = "";
+ errorOccured = false;
+ initialized = true;
+ }
+
//FIXME: cleanup BB env file
}
} finally {
@@ -468,6 +478,7 @@ public class BBSession implements IBBSessionListener, IModelElement, Map {
Stack blockStack = new Stack();
while ((line = reader.readLine()) != null) {
+ errorLines += line;
String trimmed = line.trim();
if (trimmed.length() == 0 || line.startsWith("#")) {
// weed out the blank and comment lines
@@ -781,4 +792,12 @@ public class BBSession implements IBBSessionListener, IModelElement, Map {
return pinfo;
}
+ public boolean errorOccured() {
+ return errorOccured;
+ }
+
+ public String getErrorLines() {
+ return errorLines;
+ }
+
}
diff --git a/plugins/org.yocto.bc.ui/src/org/yocto/bc/bitbake/ShellSession.java b/plugins/org.yocto.bc.ui/src/org/yocto/bc/bitbake/ShellSession.java
index 6603bfb..365c832 100644
--- a/plugins/org.yocto.bc.ui/src/org/yocto/bc/bitbake/ShellSession.java
+++ b/plugins/org.yocto.bc.ui/src/org/yocto/bc/bitbake/ShellSession.java
@@ -218,4 +218,8 @@ synchronized
interrupt = true;
}
+ public void printError(String errorLines) {
+ RemoteHelper.getCommandHandler(projectInfo.getConnection()).response(errorLines, true);
+ }
+
}
\ No newline at end of file
diff --git a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/wizards/install/InstallWizard.java b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/wizards/install/InstallWizard.java
index 100eee3..624cd11 100644
--- a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/wizards/install/InstallWizard.java
+++ b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/wizards/install/InstallWizard.java
@@ -7,6 +7,7 @@ import java.util.Map;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
+import org.eclipse.dstore.core.model.CommandHandler;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.IWizardContainer;
import org.eclipse.jface.wizard.WizardPage;
@@ -57,6 +58,7 @@ public class InstallWizard extends FiniteStateWizard implements IWorkbenchWizard
private Map<String, Object> model;
private MessageConsole console;
+ private OptionsPage optionsPage;
public InstallWizard() {
this.model = new Hashtable<String, Object>();
@@ -89,7 +91,8 @@ public class InstallWizard extends FiniteStateWizard implements IWorkbenchWizard
*/
@Override
public void addPages() {
- addPage(new OptionsPage(model));
+ optionsPage = new OptionsPage(model);
+ addPage(optionsPage);
}
@Override
@@ -110,9 +113,9 @@ public class InstallWizard extends FiniteStateWizard implements IWorkbenchWizard
}
IRemoteConnection remoteConnection = ((IRemoteConnection)model.get(InstallWizard.SELECTED_CONNECTION));
IRemoteServices remoteServices = ((IRemoteServices)model.get(InstallWizard.SELECTED_REMOTE_SERVICE));
- final IHost connection = RemoteHelper.getRemoteConnectionByName(remoteConnection.getName());
- final CommandResponseHandler cmdHandler = RemoteHelper.getCommandHandler(connection);
- final IWizardContainer container = this.getContainer();
+ IHost connection = RemoteHelper.getRemoteConnectionByName(remoteConnection.getName());
+ CommandResponseHandler cmdHandler = new CommandResponseHandler(RemoteHelper.getConsole(connection));
+ IWizardContainer container = this.getContainer();
if (((Boolean)options.get(GIT_CLONE)).booleanValue()) {
String cmd = "/usr/bin/git clone --progress";
String args = "git://git.yoctoproject.org/poky.git " + uri.getPath();
@@ -147,11 +150,16 @@ public class InstallWizard extends FiniteStateWizard implements IWorkbenchWizard
pinfo.setRemoteServices(remoteServices);
final ConsoleWriter cw = new ConsoleWriter();
-// final ProjectInfo pInfoFinal = pinfo;
- container.run(false, false, new BBConfigurationInitializeOperation(pinfo, null));
+ BBConfigurationInitializeOperation configInitOp = new BBConfigurationInitializeOperation(pinfo, null);
+ container.run(false, false, configInitOp);
console = RemoteHelper.getConsole(connection);
console.newMessageStream().println(cw.getContents());
-
+
+ if (configInitOp.isErrorOccured()) {
+ optionsPage.setErrorMessage(configInitOp.getErrorMessage());
+ return false;
+ }
+
model.put(InstallWizard.KEY_PINFO, pinfo);
Activator.putProjInfo(pinfo.getOEFSURI(), pinfo);
diff --git a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/wizards/newproject/BBConfigurationInitializeOperation.java b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/wizards/newproject/BBConfigurationInitializeOperation.java
index 5dd8944..8ced7a6 100644
--- a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/wizards/newproject/BBConfigurationInitializeOperation.java
+++ b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/wizards/newproject/BBConfigurationInitializeOperation.java
@@ -25,6 +25,16 @@ public class BBConfigurationInitializeOperation implements IRunnableWithProgress
private final ProjectInfo pinfo;
private final Writer writer;
+ private boolean errorOccured = false;
+ private String errorMessage = "";
+
+ public boolean isErrorOccured() {
+ return errorOccured;
+ }
+
+ public void setErrorOccured(boolean errorOccured) {
+ this.errorOccured = errorOccured;
+ }
public BBConfigurationInitializeOperation(ProjectInfo pinfo) {
this.pinfo = pinfo;
@@ -47,9 +57,19 @@ public class BBConfigurationInitializeOperation implements IRunnableWithProgress
session.initialize();
monitor.worked(90);
monitor.done();
- System.out.println("Bitbake session initialized successfully.");
+ errorOccured = session.errorOccured();
+ errorMessage = session.getErrorLines();
+ if (!errorOccured) {
+ System.out.println("Bitbake session initialized successfully.");
+ errorMessage = "";
+ } else
+ System.out.println("An error occured and Bitbake session was not initialized.");
} catch (Exception e) {
throw new InvocationTargetException(e);
}
}
+
+ public String getErrorMessage() {
+ return errorMessage;
+ }
}
diff --git a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/wizards/newproject/CreateBBCProjectOperation.java b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/wizards/newproject/CreateBBCProjectOperation.java
index 338c2e6..e265e23 100644
--- a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/wizards/newproject/CreateBBCProjectOperation.java
+++ b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/wizards/newproject/CreateBBCProjectOperation.java
@@ -44,6 +44,7 @@ public class CreateBBCProjectOperation extends WorkspaceModifyOperation {
public static final QualifiedName BBC_PROJECT_INIT = new QualifiedName(null, "BBC_PROJECT_INIT");
public static void addNatureToProject(IProject proj, String nature_id, IProgressMonitor monitor) throws CoreException {
+ try {
IProjectDescription desc = proj.getDescription();
Vector<String> natureIds = new Vector<String>();
@@ -52,6 +53,10 @@ public class CreateBBCProjectOperation extends WorkspaceModifyOperation {
desc.setNatureIds(natureIds.toArray(new String[natureIds.size()]));
proj.setDescription(desc, monitor);
+ } catch (Exception e) {
+ //this should not happen
+ e.printStackTrace();
+ }
}
private ProjectInfo projInfo;
--
1.7.9.5
More information about the yocto
mailing list