[yocto] [PATCH v2] [eclipse-poky][branch:windows-build]Performance fix for Windows implementation

Ioana Grigoropol ioanax.grigoropol at intel.com
Mon Jan 21 06:37:06 PST 2013


    - run each command in a separate shell - needs explicit sourcing of environment and closing for each command
    - add distinction between OEFS URI and actual URI of the remote project and files -> YoctoLocation of the project contains both URIs
	- use OEFS URI only for initialization of OEFSFileSystem,OEIgnoredPaths, OEFile (oefs://...)
	- use actual URI (file:// or rse://) for all other operations (new file, copy, save, delete)
    - tested only against Windows machine & RSE connection to BuildAppliance machine
IMPORTANT: please make sure that sshd configurations on the remote machine has variable MaxSessions set to a reasonable number (more than the default 10 sessions), otherwise an "Error creating terminal" will be thrown when more channels are opened for running remote commands (ChannelSftp)

Signed-off-by: Ioana Grigoropol <ioanax.grigoropol at intel.com>
---
 .../src/org/yocto/bc/bitbake/BBRecipe.java         |    2 +-
 .../src/org/yocto/bc/bitbake/BBSession.java        |   30 +++--
 .../src/org/yocto/bc/bitbake/ShellSession.java     |   10 +-
 .../org/yocto/bc/remote/utils/CommandRunnable.java |    3 +-
 .../org/yocto/bc/remote/utils/RemoteHelper.java    |   19 ++++
 .../org/yocto/bc/remote/utils/RemoteMachine.java   |   31 +++---
 .../src/org/yocto/bc/ui/Activator.java             |   12 +-
 .../editors/bitbake/BitBakeDocumentProvider.java   |   27 +++--
 .../bc/ui/editors/bitbake/BitBakeFileEditor.java   |    2 +-
 .../bitbake/BitBakeSourceViewerConfiguration.java  |   20 +++-
 .../src/org/yocto/bc/ui/filesystem/OEFile.java     |  115 ++++----------------
 .../org/yocto/bc/ui/filesystem/YoctoLocation.java  |   36 ++++++
 .../src/org/yocto/bc/ui/model/ProjectInfo.java     |   38 ++++---
 .../src/org/yocto/bc/ui/model/YoctoHostFile.java   |   20 ++--
 .../ui/wizards/NewBitBakeFileRecipeWizardPage.java |   19 +++-
 .../importProject/ImportYoctoProjectWizard.java    |    4 +-
 .../yocto/bc/ui/wizards/install/InstallWizard.java |    4 +-
 .../yocto/bc/ui/wizards/install/OptionsPage.java   |    8 +-
 .../BBConfigurationInitializeOperation.java        |    2 +-
 .../newproject/CreateBBCProjectOperation.java      |    7 +-
 20 files changed, 233 insertions(+), 176 deletions(-)
 create mode 100755 plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/filesystem/YoctoLocation.java

diff --git a/plugins/org.yocto.bc.ui/src/org/yocto/bc/bitbake/BBRecipe.java b/plugins/org.yocto.bc.ui/src/org/yocto/bc/bitbake/BBRecipe.java
index 6d003ce..e8e8d30 100644
--- a/plugins/org.yocto.bc.ui/src/org/yocto/bc/bitbake/BBRecipe.java
+++ b/plugins/org.yocto.bc.ui/src/org/yocto/bc/bitbake/BBRecipe.java
@@ -23,7 +23,7 @@ public class BBRecipe extends BBSession {
 	private final URI fileURI;
 
 	public BBRecipe(BBSession session, URI filePath) throws IOException {
-		super(session.shell, session.pinfo.getURI());
+		super(session.shell, session.pinfo.getOriginalURI());
 		this.session = session;
 		this.fileURI = filePath;
 		this.parsingCmd = "DISABLE_SANITY_CHECKS=\"1\" bitbake -e -b " + filePath.getPath() + " >& " + BB_ENV_FILE;
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 9adeb3f..8a8de22 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
@@ -15,6 +15,8 @@ import java.io.File;
 import java.io.FileFilter;
 import java.io.FileReader;
 import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
 import java.net.URI;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -33,15 +35,18 @@ import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.jface.preference.JFacePreferences;
 import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.rse.core.model.IHost;
 import org.eclipse.ui.console.ConsolePlugin;
 import org.eclipse.ui.console.IConsole;
 import org.eclipse.ui.console.IConsoleManager;
 import org.eclipse.ui.console.MessageConsole;
 import org.eclipse.ui.console.MessageConsoleStream;
 import org.eclipse.ui.progress.WorkbenchJob;
+import org.yocto.bc.remote.utils.RemoteHelper;
 import org.yocto.bc.ui.model.IModelElement;
 import org.yocto.bc.ui.model.ProjectInfo;
 
@@ -60,10 +65,10 @@ public class BBSession implements IBBSessionListener, IModelElement, Map {
 
 	public static final String BB_ENV_FILE = "bitbake.env";
 
-	public static final String CONF_DIR = "/conf";
+	public static final String CONF_DIR = "conf";
 	public static final String BUILDDIR_INDICATORS [] = {
-		"/local.conf",
-		"/bblayers.conf",
+		"local.conf",
+		"bblayers.conf",
 	};
 
 	protected final ProjectInfo pinfo;
@@ -81,9 +86,9 @@ public class BBSession implements IBBSessionListener, IModelElement, Map {
 	public BBSession(ShellSession ssession, URI projectRoot) throws IOException {
 		shell = ssession;
 		this.pinfo = new ProjectInfo();
-		pinfo.setLocation(projectRoot);
+		pinfo.setLocationURI(projectRoot);
 		pinfo.setInitScriptPath(ProjectInfoHelper.getInitScriptPath(projectRoot));
-		this.parsingCmd = "sh -c 'DISABLE_SANITY_CHECKS=\"1\" bitbake -e >& " + BB_ENV_FILE + "  '" ;
+		this.parsingCmd = "DISABLE_SANITY_CHECKS=\"1\" bitbake -e >& " + BB_ENV_FILE;
 	}
 
 	public BBSession(ShellSession ssession, URI projectRoot, boolean silent) throws IOException {
@@ -190,7 +195,7 @@ public class BBSession implements IBBSessionListener, IModelElement, Map {
 	}
 
 	public URI getProjInfoRoot() {
-		return pinfo.getURI();
+		return pinfo.getOriginalURI();
 	}
 
 	/**
@@ -271,7 +276,7 @@ public class BBSession implements IBBSessionListener, IModelElement, Map {
 	 */
 	public MessageConsole getConsole() {
 		if (sessionConsole == null) {
-			String cName = ProjectInfoHelper.getProjectName(pinfo.getURI()) + " Console";
+			String cName = ProjectInfoHelper.getProjectName(pinfo.getOriginalURI()) + " Console";
 			IConsoleManager conMan = ConsolePlugin.getDefault().getConsoleManager();
 			IConsole[] existing = conMan.getConsoles();
 			for (int i = 0; i < existing.length; i++)
@@ -391,10 +396,10 @@ public class BBSession implements IBBSessionListener, IModelElement, Map {
 					String result = shell.execute(parsingCmd, hasErrors);
 
 					//FIXME : wait for bitbake to finish
-
 					properties = parseBBEnvironment(result);
 
 					initialized = true;
+					//FIXME: cleanup BB env file
 				}
 			} finally {
 				//downgrade lock
@@ -453,7 +458,10 @@ public class BBSession implements IBBSessionListener, IModelElement, Map {
 	}
 
 	protected void parse(String bbOutfilePath, Map outMap) throws Exception {
-		BufferedReader reader = new BufferedReader(new FileReader(bbOutfilePath + BB_ENV_FILE));
+		IHost connection = shell.getProjectInfo().getConnection();
+		InputStream is = RemoteHelper.getRemoteInputStream(connection, bbOutfilePath, BB_ENV_FILE, new NullProgressMonitor());
+		RemoteHelper.getRemoteHostFile(connection, bbOutfilePath + BB_ENV_FILE, new NullProgressMonitor());
+		BufferedReader reader = new BufferedReader(new InputStreamReader(is));
 		String line;
 		boolean inLine = false;
 		StringBuffer sb = null;
@@ -769,4 +777,8 @@ public class BBSession implements IBBSessionListener, IModelElement, Map {
 		return (Map<String, String>) properties;
 	}
 
+	public ProjectInfo getProjectInfo() {
+		return pinfo;
+	}
+
 }
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 ef01d96..6603bfb 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
@@ -78,6 +78,14 @@ public class ShellSession {
 //	private final Writer out;
 	private ProjectInfo projectInfo;
 
+	public ProjectInfo getProjectInfo() {
+		return projectInfo;
+	}
+
+	public void setProjectInfo(ProjectInfo projectInfo) {
+		this.projectInfo = projectInfo;
+	}
+
 	public ShellSession(ProjectInfo pInfo, int shellType, IHostFile root, String initCmd, Writer out) throws IOException {
 		this.projectInfo = pInfo;
 		this.root = root;
@@ -129,7 +137,7 @@ public class ShellSession {
 	}
 
     private String getInitCmd() {
-    	return "source " + initCmd + " " + getBuildDirAbsolutePath() + " > tempsf; rm -rf tempsf;";
+    	return "source " + initCmd + " " + getBuildDirAbsolutePath() + " > tempsf; rm -rf tempsf;" + exportCmd + ";" + exportColumnsCmd + ";" + "cd " + getBuildDirAbsolutePath()  + ";";
 	}
 
 synchronized
diff --git a/plugins/org.yocto.bc.ui/src/org/yocto/bc/remote/utils/CommandRunnable.java b/plugins/org.yocto.bc.ui/src/org/yocto/bc/remote/utils/CommandRunnable.java
index fe8b7a7..98c3758 100644
--- a/plugins/org.yocto.bc.ui/src/org/yocto/bc/remote/utils/CommandRunnable.java
+++ b/plugins/org.yocto.bc.ui/src/org/yocto/bc/remote/utils/CommandRunnable.java
@@ -52,6 +52,7 @@ public class CommandRunnable implements Runnable{
 			}
 			StringBuffer buffer = new StringBuffer();
 			int c;
+			if (errbr != null)
 			while ((c = errbr.read()) != -1) {
 				char ch = (char) c;
 				buffer.append(ch);
@@ -66,7 +67,7 @@ public class CommandRunnable implements Runnable{
 					buffer.delete(0, buffer.length());
 				}
 			}
-
+			if (inbr != null)
 			while ((c = inbr.read()) != -1) {
 				char ch = (char) c;
 				buffer.append(ch);
diff --git a/plugins/org.yocto.bc.ui/src/org/yocto/bc/remote/utils/RemoteHelper.java b/plugins/org.yocto.bc.ui/src/org/yocto/bc/remote/utils/RemoteHelper.java
index 1134c8e..9bce9e3 100644
--- a/plugins/org.yocto.bc.ui/src/org/yocto/bc/remote/utils/RemoteHelper.java
+++ b/plugins/org.yocto.bc.ui/src/org/yocto/bc/remote/utils/RemoteHelper.java
@@ -11,6 +11,7 @@
 package org.yocto.bc.remote.utils;
 
 import java.io.File;
+import java.io.InputStream;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.HashMap;
@@ -268,6 +269,24 @@ public class RemoteHelper {
 		return null;
 	}
 
+	public static InputStream getRemoteInputStream(IHost connection, String parentPath, String remoteFilePath, IProgressMonitor monitor){
+		assert(connection != null);
+		monitor.beginTask(Messages.InfoDownload, 100);
+
+		try {
+			IFileService fileService = getConnectedRemoteFileService(connection, new SubProgressMonitor(monitor, 10));
+			
+			return fileService.getInputStream(parentPath, remoteFilePath, false, monitor);
+//			IHostFile remoteFile = fileService.getFile(remotePath.removeLastSegments(1).toString(), remotePath.lastSegment(), new SubProgressMonitor(monitor, 5));
+//			return remoteFile;
+		} catch (Exception e) {
+			e.printStackTrace();
+	    }finally {
+			monitor.done();
+		}
+		return null;
+	}
+	
 	/**
 	 * Throws a core exception with an error status object built from the given
 	 * message, lower level exception, and error code.
diff --git a/plugins/org.yocto.bc.ui/src/org/yocto/bc/remote/utils/RemoteMachine.java b/plugins/org.yocto.bc.ui/src/org/yocto/bc/remote/utils/RemoteMachine.java
index 18c41e1..ba925ca 100644
--- a/plugins/org.yocto.bc.ui/src/org/yocto/bc/remote/utils/RemoteMachine.java
+++ b/plugins/org.yocto.bc.ui/src/org/yocto/bc/remote/utils/RemoteMachine.java
@@ -1,11 +1,11 @@
 package org.yocto.bc.remote.utils;
 
 import java.io.BufferedReader;
-import java.io.InputStreamReader;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.locks.Lock;
 
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
@@ -18,7 +18,6 @@ import org.eclipse.rse.core.subsystems.ISubSystem;
 import org.eclipse.rse.internal.services.local.shells.LocalShellService;
 import org.eclipse.rse.services.clientserver.messages.SystemMessageException;
 import org.eclipse.rse.services.files.IFileService;
-import org.eclipse.rse.services.shells.HostShellProcessAdapter;
 import org.eclipse.rse.services.shells.IHostShell;
 import org.eclipse.rse.services.shells.IShellService;
 import org.eclipse.rse.subsystems.files.core.servicesubsystem.IFileServiceSubSystem;
@@ -43,13 +42,16 @@ public class RemoteMachine {
 	public RemoteMachine(IHost connection) {
 		setConnection(connection);
 	}
-	private ProcessStreamBuffer processOutput(Process process, IProgressMonitor monitor) throws Exception {
-		if (process == null)
+	private ProcessStreamBuffer processOutput(IHostShell shell, IProgressMonitor monitor) throws Exception {
+		if (shell == null)
 			throw new Exception("An error has occured while trying to run remote command!");
 		ProcessStreamBuffer processBuffer = new ProcessStreamBuffer();
-
-		BufferedReader inbr = new BufferedReader(new InputStreamReader(process.getInputStream()));
-		BufferedReader errbr = new BufferedReader(new InputStreamReader(process.getErrorStream()));
+		
+		Lock lock = shell.getStandardOutputReader().getReaderLock();
+		lock.lock();
+		BufferedReader inbr =  shell.getStandardOutputReader().getReader();
+		BufferedReader errbr =  shell.getStandardErrorReader().getReader();
+		
 		boolean cancel = false;
 		while (!cancel) {
 			if(monitor.isCanceled()) {
@@ -58,6 +60,7 @@ public class RemoteMachine {
 			}
 			StringBuffer buffer = new StringBuffer();
 			int c;
+			if (errbr != null)
 			while ((c = errbr.read()) != -1) {
 				char ch = (char) c;
 				buffer.append(ch);
@@ -71,7 +74,7 @@ public class RemoteMachine {
 					buffer.delete(0, buffer.length());
 				}
 			}
-
+			if (inbr != null)
 			while ((c = inbr.read()) != -1) {
 				char ch = (char) c;
 				buffer.append(ch);
@@ -120,13 +123,13 @@ public class RemoteMachine {
 
 			IShellService shellService = getShellService(new SubProgressMonitor(monitor, 7));
 
-			HostShellProcessAdapter p = null;
+//			HostShellProcessAdapter p = null;
 			ProcessStreamBuffer buffer = null;
 			try {
 				SubProgressMonitor subMonitor = new SubProgressMonitor(monitor, 3);
 				IHostShell hostShell = shellService.runCommand("", "env" + " ; echo " + RemoteHelper.TERMINATOR + "; exit;", new String[]{}, subMonitor);
-				p = new HostShellProcessAdapter(hostShell);
-				buffer = processOutput(p, subMonitor);
+//				p = new HostShellProcessAdapter(hostShell);
+				buffer = processOutput(hostShell, subMonitor);
 				for(int i = 0; i < buffer.getOutputLines().size(); i++) {
 					String out = buffer.getOutputLines().get(i);
 					String[] tokens = out.split("=");
@@ -138,9 +141,9 @@ public class RemoteMachine {
 						environment.put(varName, varValue);
 				}
 			} catch (Exception e) {
-				if (p != null) {
-					p.destroy();
-				}
+//				if (p != null) {
+//					p.destroy();
+//				}
 				e.printStackTrace();
 			}
 
diff --git a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/Activator.java b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/Activator.java
index 188efe6..3b97526 100644
--- a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/Activator.java
+++ b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/Activator.java
@@ -61,7 +61,7 @@ public class Activator extends AbstractUIPlugin {
 		URI key = session.getProjInfoRoot();// + filePath;
 		BBRecipe recipe = (BBRecipe) bbRecipeMap.get(key);
 		if (recipe == null) {
-			recipe = new BBRecipe(session,filePath);
+			recipe = new BBRecipe(session, filePath);
 			bbRecipeMap.put(key, recipe);
 		}
 
@@ -75,7 +75,7 @@ public class Activator extends AbstractUIPlugin {
 	 * @throws IOException
 	 */
 	public static BBSession getBBSession(ProjectInfo projectInfo, Writer out, IProgressMonitor monitor) throws IOException {
-		URI projectRoot = projectInfo.getURI();
+		URI projectRoot = projectInfo.getOriginalURI();
 		if (bbSessionMap == null) {
 			bbSessionMap = new Hashtable<URI, BBSession>();
 		}
@@ -97,7 +97,7 @@ public class Activator extends AbstractUIPlugin {
 	 * @throws Exception
 	 */
 	public static BBSession getBBSession(ProjectInfo projectInfo, IProgressMonitor monitor) throws Exception {
-		URI projectRoot = projectInfo.getURI();
+		URI projectRoot = projectInfo.getOriginalURI();
 		if (bbSessionMap == null) {
 			bbSessionMap = new Hashtable<URI, BBSession>();
 		}
@@ -151,12 +151,12 @@ public class Activator extends AbstractUIPlugin {
 		if (projInfoMap == null) {
 			projInfoMap = new Hashtable<URI, ProjectInfo>();
 		}
-		location = convertOEFSUri(location);
+//		location = convertOEFSUri(location);
 		if (location != null) {
 			ProjectInfo pi = projInfoMap.get(location);
 			if (pi == null) {
 				pi = new ProjectInfo();
-				pi.setLocation(location);
+				pi.setLocationURI(location);
 				try {
 					pi.setInitScriptPath(ProjectInfoHelper.getInitScriptPath(location));
 				} catch (IOException e) {
@@ -195,7 +195,7 @@ public class Activator extends AbstractUIPlugin {
 	 * @throws IOException
 	 */
 	private static ShellSession getShellSession(ProjectInfo projInfo, Writer out, IProgressMonitor monitor) throws IOException {
-		URI absolutePath = projInfo.getURI();
+		URI absolutePath = projInfo.getOriginalURI();
 		if (shellMap == null) {
 			shellMap = new Hashtable<String, ShellSession>();
 		}
diff --git a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/editors/bitbake/BitBakeDocumentProvider.java b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/editors/bitbake/BitBakeDocumentProvider.java
index 2d28261..d9d5754 100644
--- a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/editors/bitbake/BitBakeDocumentProvider.java
+++ b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/editors/bitbake/BitBakeDocumentProvider.java
@@ -11,6 +11,9 @@
 package org.yocto.bc.ui.editors.bitbake;
 
 import java.net.URI;
+import java.net.URISyntaxException;
+
+import javax.security.auth.login.Configuration;
 
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.NullProgressMonitor;
@@ -43,12 +46,18 @@ public class BitBakeDocumentProvider extends FileDocumentProvider {
 	public static final String RECIPE_COMMENT= "RECIPE_COMMENT"; //$NON-NLS-1$
 	
 	private IHost connection;
+
+	private BitBakeSourceViewerConfiguration viewerConfiguration;
 	
 	private static final String[] CONTENT_TYPES= {
 			RECIPE_CODE,
 			RECIPE_COMMENT
 	};
 
+	public BitBakeDocumentProvider(BitBakeSourceViewerConfiguration viewerConfiguration) {
+		this.viewerConfiguration = viewerConfiguration;
+	}
+
 	private IDocumentPartitioner createRecipePartitioner() {
 		IPredicateRule[] rules= { new SingleLineRule("#", null, new Token(RECIPE_COMMENT), (char) 0, true, false) }; //$NON-NLS-1$
 
@@ -73,13 +82,17 @@ public class BitBakeDocumentProvider extends FileDocumentProvider {
 		if (element instanceof IFileEditorInput) {
 			IFileEditorInput input= (IFileEditorInput) element;
 
-		    URI uri = input.getFile().getLocationURI();
-			if (uri == null)
-				return true;
-
-			if (connection == null) 
-				connection = RemoteHelper.getRemoteConnectionForURI(uri, new NullProgressMonitor());
-			return !RemoteHelper.fileExistsRemote(connection, new NullProgressMonitor(), uri.getPath());
+		    URI root = viewerConfiguration.getBBSession().getProjInfoRoot();
+		    String relPath = input.getFile().getProjectRelativePath().toPortableString();
+		    try {
+				URI fileURI = new URI(root.getScheme(), root.getHost(), root.getPath() + "/" + relPath, root.getFragment());
+				if (connection == null) 
+					//connection = RemoteHelper.getRemoteConnectionForURI(fileURI, new NullProgressMonitor());
+					connection = viewerConfiguration.getBBSession().getProjectInfo().getConnection();
+				return !RemoteHelper.fileExistsRemote(connection, new NullProgressMonitor(), fileURI.getPath());
+			} catch (URISyntaxException e) {
+				e.printStackTrace();
+			}
 		}
 
 		return super.isDeleted(element);
diff --git a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/editors/bitbake/BitBakeFileEditor.java b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/editors/bitbake/BitBakeFileEditor.java
index be856ff..b2da775 100644
--- a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/editors/bitbake/BitBakeFileEditor.java
+++ b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/editors/bitbake/BitBakeFileEditor.java
@@ -45,7 +45,7 @@ public class BitBakeFileEditor extends AbstractDecoratedTextEditor {
 		super();
 		viewerConfiguration = new BitBakeSourceViewerConfiguration(getSharedColors(), getPreferenceStore());
 		setSourceViewerConfiguration(viewerConfiguration);
-		setDocumentProvider(new BitBakeDocumentProvider());
+		setDocumentProvider(new BitBakeDocumentProvider(viewerConfiguration));
 	}
 
 	@Override
diff --git a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/editors/bitbake/BitBakeSourceViewerConfiguration.java b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/editors/bitbake/BitBakeSourceViewerConfiguration.java
index 98768a8..06a8233 100644
--- a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/editors/bitbake/BitBakeSourceViewerConfiguration.java
+++ b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/editors/bitbake/BitBakeSourceViewerConfiguration.java
@@ -10,6 +10,9 @@
  *******************************************************************************/
 package org.yocto.bc.ui.editors.bitbake;
 
+import java.net.URI;
+import java.net.URISyntaxException;
+
 import org.eclipse.core.resources.IFile;
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.text.ITextHover;
@@ -33,9 +36,9 @@ import org.eclipse.swt.SWT;
 import org.eclipse.swt.graphics.Color;
 import org.eclipse.swt.graphics.RGB;
 import org.eclipse.ui.editors.text.TextSourceViewerConfiguration;
-
 import org.yocto.bc.bitbake.BBLanguageHelper;
 import org.yocto.bc.bitbake.BBSession;
+import org.yocto.bc.bitbake.ProjectInfoHelper;
 
 public class BitBakeSourceViewerConfiguration extends TextSourceViewerConfiguration {
 
@@ -66,7 +69,15 @@ public class BitBakeSourceViewerConfiguration extends TextSourceViewerConfigurat
 	public ITextHover getTextHover(ISourceViewer sv, String contentType) {
 		//only .bb file support Text Hover.
 		if (textHover == null && targetFile.getFileExtension().equals(BBLanguageHelper.BITBAKE_RECIPE_FILE_EXTENSION)) {
-			textHover = new BBVariableTextHover(session, targetFile.getLocationURI());
+				URI root = session.getProjInfoRoot();
+				try {
+					URI targetFIleURI = new URI(root.getScheme(), root.getHost(), root.getPath() + "/" +targetFile.getProjectRelativePath().toPortableString(), root.getFragment());
+					textHover = new BBVariableTextHover(session, targetFIleURI);
+				} catch (URISyntaxException e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+				}
+				
 		}
 		
 		return textHover;
@@ -192,4 +203,9 @@ public class BitBakeSourceViewerConfiguration extends TextSourceViewerConfigurat
 	public void setBBSession(BBSession session) {
 		this.session = session;		
 	}
+	
+	public BBSession getBBSession() {
+		return this.session;		
+	}
+	
 }
diff --git a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/filesystem/OEFile.java b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/filesystem/OEFile.java
index f12d6f3..7360588 100644
--- a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/filesystem/OEFile.java
+++ b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/filesystem/OEFile.java
@@ -37,6 +37,7 @@ import org.yocto.bc.bitbake.BBSession;
 import org.yocto.bc.bitbake.ProjectInfoHelper;
 import org.yocto.bc.bitbake.ShellSession;
 import org.yocto.bc.remote.utils.RemoteHelper;
+import org.yocto.bc.ui.Activator;
 import org.yocto.bc.ui.model.ProjectInfo;
 import org.yocto.bc.ui.model.YoctoHostFile;
 
@@ -58,6 +59,10 @@ public class OEFile extends FileStore {
 	 */
 	protected final String filePath;
 
+	public String getFilePath() {
+		return filePath;
+	}
+
 	private final URI root;
 
 	/**
@@ -84,17 +89,18 @@ public class OEFile extends FileStore {
 	 */
 	private boolean isPotentialBuildDir(String path) {
 		String parentPath = path.substring(0, path.lastIndexOf("/"));
+		String name = path.substring(path.lastIndexOf("/") + 1);
 		boolean ret = true;
 		try {
 			IFileService fs = file.getFileService();
-			IHostFile hostFile = fs.getFile(parentPath, path, new NullProgressMonitor());
+			IHostFile hostFile = fs.getFile(parentPath, name, new NullProgressMonitor());
 			if (!hostFile.isDirectory())
 				return false;
-			IHostFile confDir = fs.getFile(path, path + BBSession.CONF_DIR, new NullProgressMonitor());
+			IHostFile confDir = fs.getFile(path, BBSession.CONF_DIR, new NullProgressMonitor());
 			if (!confDir.exists() || !confDir.isDirectory())
 				return false;
 			for (int i = 0; i < BBSession.BUILDDIR_INDICATORS.length && ret == true; i++) {
-				IHostFile child = fs.getFile(path, path + BBSession.CONF_DIR +  BBSession.BUILDDIR_INDICATORS[i], new NullProgressMonitor());
+				IHostFile child = fs.getFile(path + "/" + BBSession.CONF_DIR, BBSession.BUILDDIR_INDICATORS[i], new NullProgressMonitor());
 				if(!child.exists() || !child.isFile()) {
 					ret = false;
 					break;
@@ -114,10 +120,11 @@ public class OEFile extends FileStore {
 		if(isPotentialBuildDir(path)) {
 			BBSession config = null;
 			try {
-				ShellSession shell = new ShellSession(file.getProjectInfo(), ShellSession.SHELL_TYPE_BASH,
-						RemoteHelper.getRemoteHostFile(file.getConnection(), root.getPath(), new NullProgressMonitor()),
-							ProjectInfoHelper.getInitScriptPath(root) + " " + path, null);
-				config = new BBSession(shell, root, true);
+//				ShellSession shell = new ShellSession(file.getProjectInfo(), ShellSession.SHELL_TYPE_BASH,
+//						RemoteHelper.getRemoteHostFile(file.getConnection(), root.getPath(), new NullProgressMonitor()),
+//							ProjectInfoHelper.getInitScriptPath(root) + " " + path, null);
+//				config = new BBSession(shell, root, true);
+				config = Activator.getBBSession(Activator.getProjInfo(root), monitor);
 				config.initialize();
 			} catch(Exception e) {
 				e.printStackTrace();
@@ -146,7 +153,7 @@ public class OEFile extends FileStore {
 		IFileStore[] wrapped = new IFileStore[children.length];
 
 		for (int i = 0; i < wrapped.length; i++) {
-			String fullPath = file.getAbsolutePath() + File.separatorChar + children[i];
+			String fullPath = file.getAbsolutePath() + "/" + children[i];
 
 			updateIgnorePaths(fullPath, ignoredPaths, monitor);
 			if (ignoredPaths.contains(fullPath)) {
@@ -164,23 +171,7 @@ public class OEFile extends FileStore {
 		if (destFileStore instanceof OEFile) {
 			file.copy(destFileStore, monitor);
 
-//			File source = file;
-//			File destination = ((OEFile) destFile).file;
-//			//handle case variants on a case-insensitive OS, or copying between
-//			//two equivalent files in an environment that supports symbolic links.
-//			//in these nothing needs to be copied (and doing so would likely lose data)
-//			try {
-//				if (source.getCanonicalFile().equals(destination.getCanonicalFile())) {
-//					//nothing to do
-//					return;
-//				}
-//			} catch (IOException e) {
-//				String message = NLS.bind(Messages.couldNotRead, source.getAbsolutePath());
-//				Policy.error(EFS.ERROR_READ, message, e);
-//			}
 		}
-		//fall through to super implementation
-//		super.copy(destFileStore, options, monitor);
 	}
 
 	@Override
@@ -372,17 +363,6 @@ public class OEFile extends FileStore {
 
 	@Override
 	public IFileStore mkdir(int options, IProgressMonitor monitor) throws CoreException {
-//		boolean shallow = (options & EFS.SHALLOW) != 0;
-//		//must be a directory
-//		if (shallow)
-//			file.mkdir();
-//		else
-//			file.mkdirs();
-//		if (!file.isDirectory()) {
-//			checkReadOnlyParent(file, null);
-//			String message = NLS.bind(Messages.failedCreateWrongType, filePath);
-//			Policy.error(EFS.ERROR_WRONG_TYPE, message);
-//		}
 		file.mkdir(options);
 		return this;
 	}
@@ -390,64 +370,6 @@ public class OEFile extends FileStore {
 	@Override
 	public void move(IFileStore destFile, int options, IProgressMonitor monitor) throws CoreException {
 		file.move(destFile, monitor);
-//		if (!(destFile instanceof OEFile)) {
-//			super.move(destFile, options, monitor);
-//			return;
-//		}
-//		File source = file;
-//		File destination = ((OEFile) destFile).file;
-//		boolean overwrite = (options & EFS.OVERWRITE) != 0;
-//		monitor = Policy.monitorFor(monitor);
-//		try {
-//			monitor.beginTask(NLS.bind(Messages.moving, source.getAbsolutePath()), 10);
-//			//this flag captures case renaming on a case-insensitive OS, or moving
-//			//two equivalent files in an environment that supports symbolic links.
-//			//in these cases we NEVER want to delete anything
-//			boolean sourceEqualsDest = false;
-//			try {
-//				sourceEqualsDest = source.getCanonicalFile().equals(destination.getCanonicalFile());
-//			} catch (IOException e) {
-//				String message = NLS.bind(Messages.couldNotMove, source.getAbsolutePath());
-//				Policy.error(EFS.ERROR_WRITE, message, e);
-//			}
-//			if (!sourceEqualsDest && !overwrite && destination.exists()) {
-//				String message = NLS.bind(Messages.fileExists, destination.getAbsolutePath());
-//				Policy.error(EFS.ERROR_EXISTS, message);
-//			}
-//			if (source.renameTo(destination)) {
-//				// double-check to ensure we really did move
-//				// since java.io.File#renameTo sometimes lies
-//				if (!sourceEqualsDest && source.exists()) {
-//					// XXX: document when this occurs
-//					if (destination.exists()) {
-//						// couldn't delete the source so remove the destination and throw an error
-//						// XXX: if we fail deleting the destination, the destination (root) may still exist
-//						new OEFile(destination, ignoredPaths, root).delete(EFS.NONE, null);
-//						String message = NLS.bind(Messages.couldnotDelete, source.getAbsolutePath());
-//						Policy.error(EFS.ERROR_DELETE, message);
-//					}
-//					// source exists but destination doesn't so try to copy below
-//				} else {
-//					if (!destination.exists()) {
-//						// neither the source nor the destination exist. this is REALLY bad
-//						String message = NLS.bind(Messages.failedMove, source.getAbsolutePath(), destination.getAbsolutePath());
-//						Policy.error(EFS.ERROR_WRITE, message);
-//					}
-//					//the move was successful
-//					monitor.worked(10);
-//					return;
-//				}
-//			}
-//			// for some reason renameTo didn't work
-//			if (sourceEqualsDest) {
-//				String message = NLS.bind(Messages.couldNotMove, source.getAbsolutePath());
-//				Policy.error(EFS.ERROR_WRITE, message, null);
-//			}
-//			// fall back to default implementation
-//			super.move(destFile, options, Policy.subMonitorFor(monitor, 10));
-//		} finally {
-//			monitor.done();
-//		}
 	}
 
 	@Override
@@ -470,9 +392,6 @@ public class OEFile extends FileStore {
 	 */
 	@Override
 	public File toLocalFile(int options, IProgressMonitor monitor) throws CoreException {
-//		if (options == EFS.CACHE)
-//			return super.toLocalFile(options, monitor);
-//		return file;
 		return file.toLocalFile();
 	}
 
@@ -495,4 +414,8 @@ public class OEFile extends FileStore {
 	public ProjectInfo getProjectInfo() {
 		return file.getProjectInfo();
 	}
+
+	public String getParentPath() {
+		return filePath.substring(0, filePath.lastIndexOf("/"));
+	}
 }
diff --git a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/filesystem/YoctoLocation.java b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/filesystem/YoctoLocation.java
new file mode 100755
index 0000000..1e069a3
--- /dev/null
+++ b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/filesystem/YoctoLocation.java
@@ -0,0 +1,36 @@
+package org.yocto.bc.ui.filesystem;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+
+public class YoctoLocation{
+	URI oefsURI;
+	URI originalURI;
+	
+	public YoctoLocation(){
+		try {
+			oefsURI = new URI("");
+			originalURI = new URI("");
+		} catch (URISyntaxException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	public URI getOEFSURI() {
+		return oefsURI;
+	}
+
+	public URI getOriginalURI() {
+		return originalURI;
+	}
+
+	public void setOriginalURI(URI originalURI) {
+		this.originalURI = originalURI;
+	}
+
+	public void setOEFSURI(URI uri) {
+		this.oefsURI = uri;
+	}
+	
+	
+}
diff --git a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/model/ProjectInfo.java b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/model/ProjectInfo.java
index 089c1ac..743a754 100644
--- a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/model/ProjectInfo.java
+++ b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/model/ProjectInfo.java
@@ -11,19 +11,21 @@
 package org.yocto.bc.ui.model;
 
 import java.net.URI;
+import java.net.URISyntaxException;
 
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.ptp.remote.core.IRemoteServices;
 import org.eclipse.rse.core.model.IHost;
 import org.eclipse.rse.services.files.IFileService;
+import org.yocto.bc.bitbake.ProjectInfoHelper;
 import org.yocto.bc.remote.utils.RemoteHelper;
+import org.yocto.bc.ui.filesystem.YoctoLocation;
 
 
 public class ProjectInfo implements IModelElement {
 	private String name;
-	private URI location;
-	private URI oefsLocation;
+	private YoctoLocation location;
 	private String init;
 	private IHost connection;
 	private IRemoteServices remoteServices;
@@ -37,13 +39,13 @@ public class ProjectInfo implements IModelElement {
 	public String getProjectName() {
 		return name;
 	}
-	public URI getURI() {
-		return location;
+	public URI getOriginalURI() {
+		return location.getOriginalURI();
 	}
 	@Override
 	public void initialize() throws Exception {
 		name = new String();
-		location = new URI("");
+		location = new YoctoLocation();
 		init = new String();
 	}
 
@@ -51,8 +53,20 @@ public class ProjectInfo implements IModelElement {
 		this.init = init;
 	}
 
-	public void setLocation(URI location) {
-		this.location = location;
+	public void setLocationURI(URI location) {
+		if (this.location == null)
+			this.location = new YoctoLocation();
+		this.location.setOriginalURI(location);
+		try {
+			this.location.setOEFSURI(new URI(ProjectInfoHelper.OEFS_SCHEME + location.getPath() ));
+		} catch (URISyntaxException e) {
+			try {
+				this.location.setOEFSURI(new URI(""));
+			} catch (URISyntaxException e1) {
+				e1.printStackTrace();
+			}
+			e.printStackTrace();
+		}
 	}
 
 	public void setName(String name) {
@@ -61,7 +75,7 @@ public class ProjectInfo implements IModelElement {
 
 	public IHost getConnection() {
 		if (connection == null) {
-			connection = RemoteHelper.getRemoteConnectionForURI(location, new NullProgressMonitor());
+			connection = RemoteHelper.getRemoteConnectionForURI(location.getOriginalURI(), new NullProgressMonitor());
 		}
 		return connection;
 	}
@@ -87,11 +101,7 @@ public class ProjectInfo implements IModelElement {
 		}
 	}
 
-	public URI getOefsLocation() {
-		return oefsLocation;
-	}
-
-	public void setOefsLocation(URI oefsLocation) {
-		this.oefsLocation = oefsLocation;
+	public URI getOEFSURI() {
+		return location.getOEFSURI();
 	}
 }
diff --git a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/model/YoctoHostFile.java b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/model/YoctoHostFile.java
index ca5a960..db5b37c 100644
--- a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/model/YoctoHostFile.java
+++ b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/model/YoctoHostFile.java
@@ -21,6 +21,7 @@ import org.eclipse.rse.services.files.IFileService;
 import org.eclipse.rse.services.files.IHostFile;
 import org.yocto.bc.remote.utils.RemoteHelper;
 import org.yocto.bc.ui.filesystem.Messages;
+import org.yocto.bc.ui.filesystem.OEFile;
 import org.yocto.bc.ui.filesystem.Policy;
 
 public class YoctoHostFile implements IHostFile{
@@ -33,12 +34,8 @@ public class YoctoHostFile implements IHostFile{
 		this.projectInfo = pInfo;
 		this.fileURI = fileURI;
 		String path = fileURI.getPath();
-//		int parentEnd = path.lastIndexOf("/");
-//		String parentPath = path.substring(0, parentEnd);
-//		String fileName = path.substring(parentEnd + 1);
 		fileService = projectInfo.getFileService(monitor);
 		file = RemoteHelper.getRemoteHostFile(projectInfo.getConnection(), path, monitor);
-//		fileService.getFile(parentPath, fileName, monitor);
 	}
 
 	public YoctoHostFile(ProjectInfo projectInfo, URI uri) {
@@ -67,11 +64,11 @@ public class YoctoHostFile implements IHostFile{
 		return file.getName();
 	}
 	public URI getProjectLocationURI() {
-		return projectInfo.getURI();
+		return projectInfo.getOriginalURI();
 	}
 	public URI getLocationURI() {
-		projectInfo.getURI().getPath().indexOf(file.getAbsolutePath());
-		return projectInfo.getURI();
+		projectInfo.getOriginalURI().getPath().indexOf(file.getAbsolutePath());
+		return projectInfo.getOriginalURI();
 	}
 	@Override
 	public boolean isDirectory() {
@@ -84,7 +81,9 @@ public class YoctoHostFile implements IHostFile{
 	public boolean copy(IFileStore destFileStore, IProgressMonitor monitor) {
 		IHostFile destFile;
 		try {
-			destFile = fileService.createFile(destFileStore.getParent().toURI().getPath(), destFileStore.getName(), monitor);
+			OEFile oeFile = (OEFile)destFileStore;
+			String parentPath = oeFile.getParentPath();
+			destFile = fileService.createFile(parentPath, destFileStore.getName(), monitor);
 			fileService.copy(file.getParentPath(), file.getName(), destFile.getParentPath(), destFile.getName(), monitor);
 		} catch (SystemMessageException e) {
 			e.printStackTrace();
@@ -250,7 +249,10 @@ public class YoctoHostFile implements IHostFile{
 
 	public URI getChildURIformPath(IPath path) {
 		try {
-			return new URI(fileURI.getScheme(), fileURI.getHost(), fileService.getFile(file.getAbsolutePath(), path.toPortableString(), null).getAbsolutePath(), fileURI.getFragment());
+			String fileName =  path.lastSegment();
+			path = path.removeLastSegments(1);
+			String newPath = fileService.getFile(file.getAbsolutePath() + "/" + path.toPortableString(), fileName, null).getAbsolutePath();
+			return new URI(fileURI.getScheme(), fileURI.getHost(), newPath, fileURI.getFragment());
 		} catch (URISyntaxException e) {
 			e.printStackTrace();
 			return null;
diff --git a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/wizards/NewBitBakeFileRecipeWizardPage.java b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/wizards/NewBitBakeFileRecipeWizardPage.java
index dd6feea..633dc89 100644
--- a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/wizards/NewBitBakeFileRecipeWizardPage.java
+++ b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/wizards/NewBitBakeFileRecipeWizardPage.java
@@ -25,6 +25,7 @@ import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Path;
@@ -52,6 +53,8 @@ import org.eclipse.ui.dialogs.ContainerSelectionDialog;
 import org.yocto.bc.remote.utils.ProcessStreamBuffer;
 import org.yocto.bc.remote.utils.RemoteHelper;
 import org.yocto.bc.remote.utils.YoctoCommand;
+import org.yocto.bc.ui.Activator;
+import org.yocto.bc.ui.model.ProjectInfo;
 
 public class NewBitBakeFileRecipeWizardPage extends WizardPage {
 	private Text containerText;
@@ -246,7 +249,17 @@ public class NewBitBakeFileRecipeWizardPage extends WizardPage {
 		}
 
 		IProject project = container.getProject();
-		metaDirLoc = RemoteHelper.createNewURI(project.getLocationURI(), "meta");
+		ProjectInfo projInfo = null;
+		try {
+			projInfo = Activator.getProjInfo(project.getLocationURI());
+		} catch (InvocationTargetException e) {
+			e.printStackTrace();
+		} catch (CoreException e) {
+			e.printStackTrace();
+		} catch (InterruptedException e) {
+			e.printStackTrace();
+		}
+		metaDirLoc = RemoteHelper.createNewURI(projInfo.getOriginalURI(), "meta");
 
 		if (fileName.length() == 0) {
 			updateStatus("File name must be specified");
@@ -356,7 +369,7 @@ public class NewBitBakeFileRecipeWizardPage extends WizardPage {
 
 					updateTempFolderPath();
 					monitor.worked(10);
-
+					
 					monitor.subTask("Downloading package sources");
 
 					updateTempFolderPath();
@@ -365,7 +378,7 @@ public class NewBitBakeFileRecipeWizardPage extends WizardPage {
 					RemoteHelper.handleRunCommandRemote(connection, wgetYCmd, new SubProgressMonitor(monitor, 40));
 
 					monitor.worked(50);
-
+					
 					monitor.subTask("Compute package checksums");
 					String md5Cmd = "md5sum " + srcFileNameExt;
 					YoctoCommand md5YCmd = new YoctoCommand(md5Cmd, tempFolderPath, "");
diff --git a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/wizards/importProject/ImportYoctoProjectWizard.java b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/wizards/importProject/ImportYoctoProjectWizard.java
index 5e37133..82c5ab3 100644
--- a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/wizards/importProject/ImportYoctoProjectWizard.java
+++ b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/wizards/importProject/ImportYoctoProjectWizard.java
@@ -67,7 +67,7 @@ public class ImportYoctoProjectWizard extends FiniteStateWizard  implements IImp
 	public boolean performFinish() {
 		ProjectInfo pinfo = new ProjectInfo();
 		pinfo.setInitScriptPath((String) projectModel.get(ImportYoctoProjectWizard.KEY_INITPATH));
-		pinfo.setLocation((URI) projectModel.get(ImportYoctoProjectWizard.KEY_LOCATION));
+		pinfo.setLocationURI((URI) projectModel.get(ImportYoctoProjectWizard.KEY_LOCATION));
 		pinfo.setName((String) projectModel.get(ImportYoctoProjectWizard.KEY_NAME));
 		
 		try {
@@ -86,7 +86,7 @@ public class ImportYoctoProjectWizard extends FiniteStateWizard  implements IImp
 		projectModel.put(ImportYoctoProjectWizard.KEY_PINFO, pinfo);
 		//setPageComplete(valid);
 		//ProjectInfo pinfo = (ProjectInfo) projectModel.get(KEY_PINFO);
-		Activator.putProjInfo(pinfo.getURI(), pinfo);
+		Activator.putProjInfo(pinfo.getOEFSURI(), pinfo);
 		try {
 			getContainer().run(false, false, new CreateBBCProjectOperation(pinfo));
 		} catch (Exception e) {
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 071f6aa..100eee3 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
@@ -141,7 +141,7 @@ public class InstallWizard extends FiniteStateWizard implements IWorkbenchWizard
 				String prjName = (String) options.get(PROJECT_NAME);
 				ProjectInfo pinfo = new ProjectInfo();
 				pinfo.setInitScriptPath(initPath);
-				pinfo.setLocation(uri);
+				pinfo.setLocationURI(uri);
 				pinfo.setName(prjName);
 				pinfo.setConnection(connection);
 				pinfo.setRemoteServices(remoteServices);
@@ -153,7 +153,7 @@ public class InstallWizard extends FiniteStateWizard implements IWorkbenchWizard
 				console.newMessageStream().println(cw.getContents());
 
 				model.put(InstallWizard.KEY_PINFO, pinfo);
-				Activator.putProjInfo(pinfo.getURI(), pinfo);
+				Activator.putProjInfo(pinfo.getOEFSURI(), pinfo);
 
 				container.run(false, false, new CreateBBCProjectOperation(pinfo));
 				return true;
diff --git a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/wizards/install/OptionsPage.java b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/wizards/install/OptionsPage.java
index 486bd8b..f8ef0d2 100644
--- a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/wizards/install/OptionsPage.java
+++ b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/wizards/install/OptionsPage.java
@@ -23,6 +23,7 @@ import org.eclipse.ptp.remote.core.IRemoteServices;
 import org.eclipse.ptp.remote.core.exception.RemoteConnectionException;
 import org.eclipse.ptp.remote.rse.core.RSEConnection;
 import org.eclipse.rse.core.model.IHost;
+import org.eclipse.rse.services.files.IFileService;
 import org.eclipse.rse.services.files.IHostFile;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridData;
@@ -169,7 +170,12 @@ public class OptionsPage extends FiniteStateWizardPage {
 				return false;
 			}
 		} else { //git clone
-			if (repoDest.exists() && repoDest.isDirectory()) {
+			if (repoDest != null && repoDest.exists() && repoDest.isDirectory()) {
+				IHostFile[] hostFiles = RemoteHelper.getRemoteDirContent(connection, repoDest.getAbsolutePath(), "", IFileService.FILE_TYPE_FILES_AND_FOLDERS, new NullProgressMonitor());
+				if (hostFiles.length != 0) {
+					setErrorMessage("Directory " + projectPath + " is not empty, please choose another location.");
+					return false;
+				}
 				IHostFile gitDescr = RemoteHelper.getRemoteHostFile(connection, projectPath + "/.git", new NullProgressMonitor());
 				if (gitDescr != null && gitDescr.exists()) {
 					setErrorMessage("Directory " + projectPath + " contains a repository, please choose another location or skip cloning the repository.");
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 942f303..5dd8944 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
@@ -42,7 +42,7 @@ public class BBConfigurationInitializeOperation implements IRunnableWithProgress
 		try {
 			System.out.println("Initialize bitbake session ...");
 			monitor.beginTask("Initialize bitbake session ...", RemoteHelper.TOTALWORKLOAD);
-			ProjectInfoHelper.store(RemoteHelper.getRemoteConnectionByName(pinfo.getConnection().getName()), pinfo.getURI(), pinfo, monitor);
+			ProjectInfoHelper.store(RemoteHelper.getRemoteConnectionByName(pinfo.getConnection().getName()), pinfo.getOriginalURI(), pinfo, monitor);
 			session = Activator.getBBSession(pinfo, writer, monitor);
 			session.initialize();
 			monitor.worked(90);
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 5ba661c..338c2e6 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
@@ -67,12 +67,7 @@ public class CreateBBCProjectOperation extends WorkspaceModifyOperation {
 	private IProjectDescription createProjectDescription(IWorkspace workspace, ProjectInfo projInfo) throws CoreException {
 		IProjectDescription desc = workspace.newProjectDescription(projInfo.getProjectName());
 
-//		desc.setLocationURI(projInfo.getURI());
-		try {
-			desc.setLocationURI(new URI(ProjectInfoHelper.OEFS_SCHEME + projInfo.getURI().getPath()));
-		} catch (URISyntaxException e) {
-			throw new CoreException(new Status(IStatus.ERROR, Activator.PLUGIN_ID, "Unable to load filesystem.", e));
-		}
+		desc.setLocationURI(projInfo.getOEFSURI());
 		return desc;
 	}
 
-- 
1.7.9.5




More information about the yocto mailing list