From 178b505535690042301a73187c97523e55c2053d Mon Sep 17 00:00:00 2001 From: Andrew Eidsness Date: Mon, 18 Mar 2013 16:51:43 -0400 Subject: [PATCH] Bug 403670: Do no work on parallel rebuilds if nothing changed This fixes the parallel build case (for the InternalBuilder) to update the configuration build state on successful builds. Because parallel builds follow a different code path than the non-parallel case, updating the state was misssed. Change-Id: Idab10c39c3093a731fe6961b451d0fdb5975f240 Reviewed-on: https://git.eclipse.org/r/11286 Reviewed-by: Doug Schaefer IP-Clean: Doug Schaefer Tested-by: Doug Schaefer --- .../cdt/managedbuilder/core/InternalBuildRunner.java | 6 ++++++ .../internal/buildmodel/ParallelBuilder.java | 9 ++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/InternalBuildRunner.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/InternalBuildRunner.java index e48974cb29a..7618eeae26d 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/InternalBuildRunner.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/InternalBuildRunner.java @@ -128,6 +128,12 @@ public class InternalBuildRunner extends AbstractBuildRunner { status = dBuilder.build(stdout, stderr, new SubProgressMonitor(monitor, TICKS_EXECUTE_COMMAND, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK)); } else { status = ParallelBuilder.build(des, null, null, stdout, stderr, new SubProgressMonitor(monitor, TICKS_EXECUTE_COMMAND, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK), resumeOnErr, buildIncrementaly); + // Bug 403670: + // Make sure the build configuration's rebuild status is updated with the result of + // this successful build. In the non-parallel case this happens within dBuilder.build + // (the cBS is passed as an instance of IResourceRebuildStateContainer). + if (status == ParallelBuilder.STATUS_OK) + cBS.setState(0); buildRunnerHelper.printLine(ManagedMakeMessages.getFormattedString("CommonBuilder.7", Integer.toString(ParallelBuilder.lastThreadsUsed))); //$NON-NLS-1$ } diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/buildmodel/ParallelBuilder.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/buildmodel/ParallelBuilder.java index b6e41fd3345..6295a545746 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/buildmodel/ParallelBuilder.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/buildmodel/ParallelBuilder.java @@ -200,6 +200,9 @@ public class ParallelBuilder { * @param monitor Progress monitor * @param resumeOnErrors If true, build process will not stop when * compilation errors encountered + * @return the status of the operation, one of {@link ParallelBuilder#STATUS_OK}, + * {@link ParallelBuilder#STATUS_ERROR}, {@link ParallelBuilder#STATUS_CANCELED}, or {@link + * ParallelBuilder#STATUS_INVALID}. * */ static public int build(IBuildDescription des, IPath cwd, GenDirInfo dirs, OutputStream out, OutputStream err, IProgressMonitor monitor, boolean resumeOnErrors, boolean buildIncrementally) { IConfiguration cfg = des.getConfiguration(); @@ -214,12 +217,12 @@ public class ParallelBuilder { builder.sortQueue(); monitor.beginTask("", builder.queue.size()); //$NON-NLS-1$ BuildProcessManager buildProcessManager = new BuildProcessManager(out, err, true, threads); - builder.dispatch(buildProcessManager); + int status = builder.dispatch(buildProcessManager); lastThreadsUsed = buildProcessManager.getThreadsUsed(); monitor.done(); - return IBuildModelBuilder.STATUS_OK; + return status; } - + /** * Initializes parallel builder */