/// <summary> /// Pretend we're actually building a project when really we're just retrieving the results from the cache. /// </summary> /// <param name="buildRequest"></param> /// <param name="projectFileInfo"></param> /// <param name="actuallyBuiltTargets"></param> /// <param name="cachedResult"></param> private void ProcessCachedResult ( BuildRequest buildRequest, FileInfo projectFileInfo, ArrayList actuallyBuiltTargets, BuildResult cachedResult ) { buildRequest.InitializeFromCachedResult(cachedResult); if (Engine.debugMode) { Console.WriteLine("===Reusing cached result for " + buildRequest.GetTargetNamesList() + " in " + buildRequest.ProjectFileName + " result is " + buildRequest.BuildSucceeded + " EngineNodeID: " + this.nodeId); } BuildEventContext requestContext = buildRequest.ParentBuildEventContext; BuildEventContext currentContext = new BuildEventContext(this.nodeId, BuildEventContext.InvalidTargetId, GetNextProjectId(), BuildEventContext.InvalidTaskId); primaryLoggingServices.LogProjectStarted(cachedResult.ProjectId, requestContext, currentContext, projectFileInfo.FullName, buildRequest.GetTargetNamesList(), new BuildPropertyGroupProxy(new BuildPropertyGroup()), new BuildItemGroupProxy(new BuildItemGroup())); primaryLoggingServices.LogComment(currentContext, MessageImportance.Low, "ToolsVersionInEffectForBuild", buildRequest.ToolsetVersion); for (int i = 0; i < actuallyBuiltTargets.Count; i++) { string builtTargetName = EscapingUtilities.UnescapeAll((string)actuallyBuiltTargets[i]); Target.BuildState buildState = (Target.BuildState)cachedResult.ResultByTarget[builtTargetName]; buildRequest.ResultByTarget[builtTargetName] = buildState; primaryLoggingServices.LogComment(currentContext, ((buildState == Target.BuildState.CompletedSuccessfully) ? "TargetAlreadyCompleteSuccess" : "TargetAlreadyCompleteFailure"), builtTargetName); if (buildState == Target.BuildState.CompletedUnsuccessfully) { break; } } primaryLoggingServices.LogProjectFinished(currentContext, projectFileInfo.FullName, cachedResult.EvaluationResult); if (!buildRequest.IsGeneratedRequest) { CheckForBuildCompletion(); } else { Router.PostDoneNotice(buildRequest); } }
public void InitializeFromCachedResult() { BuildResult result = new BuildResult(null, new Hashtable(StringComparer.OrdinalIgnoreCase), true, 0, 1, 1, true, string.Empty, string.Empty, 0, 0, 0); BuildRequest request = new BuildRequest(); request.InitializeFromCachedResult(result); Assert.IsTrue(request.OutputsByTarget == result.OutputsByTarget); Assert.IsTrue(request.BuildSucceeded); Assert.IsTrue(request.BuildCompleted); Assert.IsTrue(request.RestoredFromCache); Assert.IsTrue(string.Compare(request.DefaultTargets, result.DefaultTargets, StringComparison.OrdinalIgnoreCase) == 0); Assert.IsTrue(string.Compare(request.InitialTargets, result.InitialTargets, StringComparison.OrdinalIgnoreCase) == 0); }