protected internal virtual bool ComputeOutOfDateSources() { if (this.TrackerIntermediateDirectory != null) { string intermediateDirectory = this.TrackerIntermediateDirectory; } else { string str = string.Empty; } if (this.MinimalRebuildFromTracking || this.TrackFileAccess) { this.AssignDefaultTLogPaths(); } if (this.MinimalRebuildFromTracking && !this.ForcedRebuildRequired()) { this.sourceOutputs = new CanonicalTrackedOutputFiles((ITask)this, this.TLogWriteFiles); this.sourceDependencies = new CanonicalTrackedInputFiles((ITask)this, this.TLogReadFiles, this.TrackedInputFiles, this.ExcludedInputPaths, this.sourceOutputs, this.UseMinimalRebuildOptimization, this.MaintainCompositeRootingMarkers); this.SourcesCompiled = this.MergeOutOfDateSourceLists(this.SourceDependencies.ComputeSourcesNeedingCompilation(false), this.GenerateSourcesOutOfDateDueToCommandLine()); if (this.SourcesCompiled.Length == 0) { this.SkippedExecution = true; return(this.SkippedExecution); } this.SourcesCompiled = this.AssignOutOfDateSources(this.SourcesCompiled); this.SourceDependencies.RemoveEntriesForSource(this.SourcesCompiled); this.SourceDependencies.SaveTlog(); if (this.DeleteOutputOnExecute) { TrackedVCToolTask.DeleteFiles(this.sourceOutputs.OutputsForSource(this.SourcesCompiled)); } this.sourceOutputs.RemoveEntriesForSource(this.SourcesCompiled); this.sourceOutputs.SaveTlog(); } else { this.SourcesCompiled = this.TrackedInputFiles; if (this.SourcesCompiled == null || this.SourcesCompiled.Length == 0) { this.SkippedExecution = true; return(this.SkippedExecution); } } if (this.TrackFileAccess) { this.RootSource = FileTracker.FormatRootingMarker(this.SourcesCompiled); } this.SkippedExecution = false; return(this.SkippedExecution); }
protected virtual int PostExecuteTool(int exitCode) { if (this.MinimalRebuildFromTracking || this.TrackFileAccess) { this.SourceOutputs = new CanonicalTrackedOutputFiles(this.TLogWriteFiles); this.SourceDependencies = new CanonicalTrackedInputFiles(this.TLogReadFiles, this.TrackedInputFiles, this.ExcludedInputPaths, this.SourceOutputs, false, this.MaintainCompositeRootingMarkers); string[] strArray = (string[])null; IDictionary <string, string> sourcesToCommandLines = this.MapSourcesToCommandLines(); if (exitCode != 0) { this.SourceOutputs.RemoveEntriesForSource(this.SourcesCompiled); this.SourceOutputs.SaveTlog(); this.SourceDependencies.RemoveEntriesForSource(this.SourcesCompiled); this.SourceDependencies.SaveTlog(); if (this.TrackCommandLines) { if (this.MaintainCompositeRootingMarkers) { sourcesToCommandLines.Remove(FileTracker.FormatRootingMarker(this.SourcesCompiled)); } else { foreach (ITaskItem source in this.SourcesCompiled) { sourcesToCommandLines.Remove(FileTracker.FormatRootingMarker(source)); } } this.WriteSourcesToCommandLinesTable(sourcesToCommandLines); } } else { this.AddTaskSpecificOutputs(this.SourcesCompiled, this.SourceOutputs); this.RemoveTaskSpecificOutputs(this.SourceOutputs); this.SourceOutputs.RemoveDependenciesFromEntryIfMissing(this.SourcesCompiled); if (this.MaintainCompositeRootingMarkers) { strArray = this.SourceOutputs.RemoveRootsWithSharedOutputs(this.SourcesCompiled); foreach (string rootingMarker in strArray) { this.SourceDependencies.RemoveEntryForSourceRoot(rootingMarker); } } if (this.TrackedOutputFilesToIgnore != null && this.TrackedOutputFilesToIgnore.Length != 0) { Dictionary <string, ITaskItem> trackedOutputFilesToRemove = new Dictionary <string, ITaskItem>((IEqualityComparer <string>)StringComparer.OrdinalIgnoreCase); foreach (ITaskItem taskItem in this.TrackedOutputFilesToIgnore) { trackedOutputFilesToRemove.Add(taskItem.GetMetadata("FullPath"), taskItem); } this.SourceOutputs.SaveTlog((DependencyFilter)(fullTrackedPath => !trackedOutputFilesToRemove.ContainsKey(fullTrackedPath))); } else { this.SourceOutputs.SaveTlog(); } TrackedVCToolTask.DeleteEmptyFile(this.TLogWriteFiles); this.RemoveTaskSpecificInputs(this.SourceDependencies); this.SourceDependencies.RemoveDependenciesFromEntryIfMissing(this.SourcesCompiled); if (this.TrackedInputFilesToIgnore != null && this.TrackedInputFilesToIgnore.Length != 0) { Dictionary <string, ITaskItem> trackedInputFilesToRemove = new Dictionary <string, ITaskItem>((IEqualityComparer <string>)StringComparer.OrdinalIgnoreCase); foreach (ITaskItem taskItem in this.TrackedInputFilesToIgnore) { trackedInputFilesToRemove.Add(taskItem.GetMetadata("FullPath"), taskItem); } this.SourceDependencies.SaveTlog((DependencyFilter)(fullTrackedPath => !trackedInputFilesToRemove.ContainsKey(fullTrackedPath))); } else { this.SourceDependencies.SaveTlog(); } TrackedVCToolTask.DeleteEmptyFile(this.TLogReadFiles); if (this.TrackCommandLines) { if (this.MaintainCompositeRootingMarkers) { string str = this.GenerateCommandLine(VCToolTask.CommandLineFormat.ForTracking, VCToolTask.EscapeFormat.Default); sourcesToCommandLines[FileTracker.FormatRootingMarker(this.SourcesCompiled)] = str; if (strArray != null) { foreach (string key in strArray) { sourcesToCommandLines.Remove(key); } } } else { string str = this.GenerateCommandLineExceptSwitches(new string[1] { this.SourcesPropertyName ?? "Sources" }, VCToolTask.CommandLineFormat.ForTracking, VCToolTask.EscapeFormat.Default); foreach (ITaskItem source in this.SourcesCompiled) { sourcesToCommandLines[FileTracker.FormatRootingMarker(source)] = str + " " + source.GetMetadata("FullPath").ToUpperInvariant(); } } this.WriteSourcesToCommandLinesTable(sourcesToCommandLines); } } } return(exitCode); }