From 98c77050c7ebb14c13260621a10164255baf734b Mon Sep 17 00:00:00 2001 From: James Blackburn Date: Mon, 8 Mar 2010 13:14:35 +0000 Subject: [PATCH] Headless import: when checking whether project is directly under workspace root, use URIUtil.append rather than URI.resolve (which strips the last segment if it doesn't end in '/') Headless build: wait for outstanding jobs to finish *before* restoring auto-build preference during finally (otherwise we'll wait for a full build we didn't request to take place...) --- .../internal/core/HeadlessBuilder.java | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/HeadlessBuilder.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/HeadlessBuilder.java index 9f50444204e..707297c093e 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/HeadlessBuilder.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/HeadlessBuilder.java @@ -251,17 +251,20 @@ public class HeadlessBuilder implements IApplication { System.err.println(HeadlessBuildMessages.HeadlessBuilder_project + desc.getName() + HeadlessBuildMessages.HeadlessBuilder_already_exists_in_workspace); return ERROR; } + // Create and open the project + // Note that if the project exists directly under the workspace root, we can't #setLocationURI(...) + if (!URIUtil.equals(org.eclipse.core.runtime.URIUtil.append( + ResourcesPlugin.getWorkspace().getRoot().getLocationURI(), + org.eclipse.core.runtime.URIUtil.lastSegment(project_uri)), project_uri)) + desc.setLocationURI(project_uri); + else + project_uri = null; // Check the URI is valid for a project in this workspace if (!root.getWorkspace().validateProjectLocationURI(project, project_uri).equals(Status.OK_STATUS)) { System.err.println(HeadlessBuildMessages.HeadlessBuilder_URI + project_uri + HeadlessBuildMessages.HeadlessBuilder_is_not_valid_in_workspace); return ERROR; } - // Create and open the project - // Note that if the project exists directly under the workspace root, we can't #setLocationURI(...) - if (!URIUtil.equals(ResourcesPlugin.getWorkspace().getRoot().getLocationURI().resolve( - org.eclipse.core.runtime.URIUtil.lastSegment(project_uri)), project_uri)) - desc.setLocationURI(project_uri); project.create(desc, monitor); project.open(monitor); } finally { @@ -360,14 +363,14 @@ public class HeadlessBuilder implements IApplication { ACBuilder.setAllConfigBuild(buildAllConfigs); } } finally { + // Wait for any outstanding jobs to finish + while (!Job.getJobManager().isIdle()) + Thread.sleep(10); + // Reset workspace auto-build preference IWorkspaceDescription desc = root.getWorkspace().getDescription(); desc.setAutoBuilding(isAutoBuilding); root.getWorkspace().setDescription(desc); - - // Wait for any outstanding jobs to finish - while (!Job.getJobManager().isIdle()) - Thread.sleep(10); } return OK;