private void WriteItems([NotNull] IList <TaskItem> items) { if (items == null) { throw new ArgumentNullException(nameof(items)); } if (_context.Verbosity != LoggerVerbosity.Diagnostic || !_context.Parameters.ShowItemAndPropertyList || items.Count == 0) { return; } _logWriter.SetColor(Color.Items); _messageWriter.WriteLinePretty(_context.CurrentIndentLevel, _stringService.FormatResourceString("ItemListHeader")); var groupedItems = from item in items group item by item.Name into groupedByName orderby groupedByName.Key.ToLowerInvariant() select new { ItemType = groupedByName.Key, Items = groupedByName.Select(i => i.Item).OrderBy(i => i, TaskItemItemSpecComparer.Shared) }; foreach (var groupedItem in groupedItems) { OutputItems(groupedItem.ItemType, groupedItem.Items); } _messageWriter.WriteNewLine(); }
public IEnumerable <string> ProjectCallStackFromProject(BuildEventContext e) { if (e == null) { throw new ArgumentNullException(nameof(e)); } var projectStartedEvent = GetProjectStartedEvent(e); if (projectStartedEvent == null) { return(Enumerable.Empty <string>()); } return(( from projectCall in GetProjectCallStack(e) select string.IsNullOrEmpty(projectCall.TargetNames) ? _stringService.FormatResourceString("ProjectStackWithTargetNames", projectCall.ProjectFile, projectCall.TargetNames, projectCall.FullProjectKey) : _stringService.FormatResourceString("ProjectStackWithDefaultTargets", projectCall.ProjectFile, projectCall.FullProjectKey)) .Reverse()); }
public void PrintMessage(BuildMessageEventArgs e, bool lightenText) { var message = e.File == null ? (e.Message ?? string.Empty) : _eventFormatter.FormatEventMessage(e, false, _context.Parameters.ShowProjectFile); var prefixAdjustment = 0; if (e.BuildEventContext.TaskId != -1 && e.File == null) { prefixAdjustment = 2; } if (lightenText) { _logWriter.SetColor(Color.Details); } PrintTargetNamePerMessage(e, lightenText); if ((_context.IsVerbosityAtLeast(LoggerVerbosity.Diagnostic) || (_context.Parameters.ShowEventId ?? false)) && e.BuildEventContext.TaskId != -1) { var prefixAlreadyWritten = WriteTargetMessagePrefix(e, e.BuildEventContext, e.Timestamp); WriteMessageAligned(_stringService.FormatResourceString("TaskMessageWithId", message, e.BuildEventContext.TaskId), prefixAlreadyWritten, prefixAdjustment); } else if (_context.Parameters.ShowTimeStamp || _context.IsVerbosityAtLeast(LoggerVerbosity.Detailed)) { var prefixAlreadyWritten = WriteTargetMessagePrefix(e, e.BuildEventContext, e.Timestamp); WriteMessageAligned(message, prefixAlreadyWritten, prefixAdjustment); } else { WriteMessageAligned(message, false, prefixAdjustment); } if (!lightenText) { return; } _logWriter.ResetColor(); }
private void OutputEnvironment(IDictionary <string, string> environment) { if (environment == null) { throw new ArgumentNullException(nameof(environment)); } _logWriter.SetColor(Color.SummaryHeader); _hierarchicalMessageWriter.StartBlock("Environment"); _messageWriter.WriteMessageAligned(_stringService.FormatResourceString("EnvironmentHeader"), true); foreach (var keyValuePair in environment) { _logWriter.SetColor(Color.SummaryInfo); _messageWriter.WriteMessageAligned(string.Format(CultureInfo.CurrentCulture, "{0} = {1}", keyValuePair.Key, keyValuePair.Value), false); } _hierarchicalMessageWriter.FinishBlock(); _logWriter.ResetColor(); }
public void Handle(TaskStartedEventArgs e) { if (e == null) { throw new ArgumentNullException(nameof(e)); } if (e.BuildEventContext == null) { throw new ArgumentException(nameof(e)); } if (_context.IsVerbosityAtLeast(LoggerVerbosity.Detailed)) { _deferredMessageWriter.DisplayDeferredStartedEvents(e.BuildEventContext); if (!_context.Parameters.ShowOnlyErrors && !_context.Parameters.ShowOnlyWarnings) { var prefixAlreadyWritten = _messageWriter.WriteTargetMessagePrefix(e, e.BuildEventContext, e.Timestamp); _logWriter.SetColor(Color.Task); if (_context.IsVerbosityAtLeast(LoggerVerbosity.Diagnostic) || (_context.Parameters.ShowEventId ?? false)) { _messageWriter.WriteMessageAligned(_stringService.FormatResourceString("TaskMessageWithId", (object)e.Message, (object)e.BuildEventContext.TaskId), prefixAlreadyWritten); } else { _messageWriter.WriteMessageAligned(e.Message, prefixAlreadyWritten); } _logWriter.ResetColor(); } _deferredMessageWriter.ShownBuildEventContext(e.BuildEventContext); } if (!_context.Parameters.ShowPerfSummary) { return; } _performanceCounterFactory.GetOrCreatePerformanceCounter(e.TaskName, _context.TaskPerformanceCounters).AddEventStarted(null, e.BuildEventContext, e.Timestamp, null); }
public void DisplayDeferredProjectStartedEvent(BuildEventContext e) { if (_context.Parameters.ShowOnlyErrors || _context.Parameters.ShowOnlyWarnings || _context.SkipProjectStartedText) { return; } var projectStartedEvent = _buildEventManager.GetProjectStartedEvent(e); if (projectStartedEvent == null || projectStartedEvent.ShowProjectFinishedEvent) { return; } projectStartedEvent.ShowProjectFinishedEvent = true; var parentProjectStartedEvent = projectStartedEvent.ParentProjectStartedEvent; if (parentProjectStartedEvent != null) { DisplayDeferredStartedEvents(parentProjectStartedEvent.ProjectBuildEventContext); } var projectFile = projectStartedEvent.ProjectFile ?? string.Empty; var parentProjectFile = parentProjectStartedEvent?.ProjectFile; var targetNames = projectStartedEvent.TargetNames; var nodeId = projectStartedEvent.ProjectBuildEventContext.NodeId; var shortProjectFile = _pathService.GetFileName(projectFile); if (parentProjectFile == null) { string message; string shortName; if (string.IsNullOrEmpty(targetNames)) { message = _stringService.FormatResourceString("ProjectStartedTopLevelProjectWithDefaultTargets", projectFile, nodeId); shortName = $"Project \"{shortProjectFile}\""; } else { message = _stringService.FormatResourceString("ProjectStartedTopLevelProjectWithTargetNames", projectFile, nodeId, targetNames); shortName = $"Project \"{shortProjectFile}\": {targetNames}"; } _hierarchicalMessageWriter.StartBlock(shortName); _messageWriter.WriteLinePrefix(projectStartedEvent.FullProjectKey, projectStartedEvent.TimeStamp, false); _logWriter.SetColor(Color.BuildStage); _messageWriter.WriteMessageAligned(message, true); _logWriter.ResetColor(); } else { if (string.IsNullOrEmpty(targetNames)) { var shortName = $"Project \"{shortProjectFile}\""; _hierarchicalMessageWriter.StartBlock(shortName); _messageWriter.WriteLinePrefix(parentProjectStartedEvent.FullProjectKey, parentProjectStartedEvent.TimeStamp, false); _logWriter.SetColor(Color.BuildStage); _messageWriter.WriteMessageAligned(_stringService.FormatResourceString("ProjectStartedWithDefaultTargetsMultiProc", parentProjectFile, parentProjectStartedEvent.FullProjectKey, projectFile, projectStartedEvent.FullProjectKey, nodeId), true); } else { var shortName = $"Project \"{shortProjectFile}\": {targetNames}"; _hierarchicalMessageWriter.StartBlock(shortName); _messageWriter.WriteLinePrefix(parentProjectStartedEvent.FullProjectKey, parentProjectStartedEvent.TimeStamp, false); _logWriter.SetColor(Color.BuildStage); _messageWriter.WriteMessageAligned(_stringService.FormatResourceString("ProjectStartedWithTargetsMultiProc", parentProjectFile, parentProjectStartedEvent.FullProjectKey, projectFile, projectStartedEvent.FullProjectKey, nodeId, targetNames), true); } _logWriter.ResetColor(); } ShownBuildEventContext(null); }
private void ShowErrorWarningSummary <T>([CanBeNull] IEnumerable <T> events) where T : BuildEventArgs { if (events == null) { return; } var dictionary = new Dictionary <ErrorWarningSummaryDictionaryKey, List <T> >(); foreach (var warningEventArgs in events) { string targetName = null; var targetStartedEvent = _buildEventManager.GetTargetStartedEvent(warningEventArgs.BuildEventContext); if (targetStartedEvent != null) { targetName = targetStartedEvent.TargetName; } var key = new ErrorWarningSummaryDictionaryKey(warningEventArgs.BuildEventContext, targetName); if (!dictionary.TryGetValue(key, out List <T> list)) { list = new List <T>(); dictionary.Add(key, list); } list.Add(warningEventArgs); } BuildEventContext buildEventContext = null; string curTargetName = null; foreach (var keyValuePair in dictionary) { if (buildEventContext != keyValuePair.Key.EntryPointContext) { _messageWriter.WriteNewLine(); foreach (var message in _buildEventManager.ProjectCallStackFromProject(keyValuePair.Key.EntryPointContext)) { _messageWriter.WriteMessageAligned(message, false); } buildEventContext = keyValuePair.Key.EntryPointContext; } if (string.Compare(curTargetName, keyValuePair.Key.TargetName, StringComparison.OrdinalIgnoreCase) != 0) { if (!string.IsNullOrEmpty(keyValuePair.Key.TargetName)) { _messageWriter.WriteMessageAligned(_stringService.FormatResourceString("ErrorWarningInTarget", (object)keyValuePair.Key.TargetName), false); } curTargetName = keyValuePair.Key.TargetName; } foreach (var obj in keyValuePair.Value) { var errorEventArgs = obj as BuildErrorEventArgs; if (errorEventArgs != null) { _messageWriter.WriteMessageAligned(" " + _eventFormatter.FormatEventMessage(errorEventArgs, false, _context.Parameters.ShowProjectFile), false); continue; } var warningEventArgs = obj as BuildWarningEventArgs; if (warningEventArgs != null) { _messageWriter.WriteMessageAligned(" " + _eventFormatter.FormatEventMessage(warningEventArgs, false, _context.Parameters.ShowProjectFile), false); } } _messageWriter.WriteNewLine(); } }
public void Handle(ProjectFinishedEventArgs e) { if (e == null) { throw new ArgumentNullException(nameof(e)); } var projectStartedEvent = _buildEventManager.GetProjectStartedEvent(e.BuildEventContext); // ReSharper disable once LocalizableElement if (projectStartedEvent == null) { throw new ArgumentException($"Project finished event for {e.ProjectFile} received without matching start event", nameof(e)); } if (_context.Parameters.ShowPerfSummary) { _performanceCounterFactory.GetOrCreatePerformanceCounter(e.ProjectFile, _context.ProjectPerformanceCounters).AddEventFinished(projectStartedEvent.TargetNames, e.BuildEventContext, e.Timestamp); } if (_context.IsVerbosityAtLeast(LoggerVerbosity.Normal) && projectStartedEvent.ShowProjectFinishedEvent) { _context.LastProjectFullKey = _context.GetFullProjectKey(e.BuildEventContext); if (!_context.Parameters.ShowOnlyErrors && !_context.Parameters.ShowOnlyWarnings) { _messageWriter.WriteLinePrefix(e.BuildEventContext, e.Timestamp, false); _logWriter.SetColor(Color.BuildStage); var targetNames = projectStartedEvent.TargetNames; var projectFile = projectStartedEvent.ProjectFile ?? string.Empty; if (string.IsNullOrEmpty(targetNames)) { if (e.Succeeded) { _messageWriter.WriteMessageAligned(_stringService.FormatResourceString("ProjectFinishedPrefixWithDefaultTargetsMultiProc", projectFile), true); _hierarchicalMessageWriter.FinishBlock(); } else { _messageWriter.WriteMessageAligned(_stringService.FormatResourceString("ProjectFinishedPrefixWithDefaultTargetsMultiProcFailed", projectFile), true); _hierarchicalMessageWriter.FinishBlock(); } } else { if (e.Succeeded) { _messageWriter.WriteMessageAligned(_stringService.FormatResourceString("ProjectFinishedPrefixWithTargetNamesMultiProc", projectFile, targetNames), true); _hierarchicalMessageWriter.FinishBlock(); } else { _messageWriter.WriteMessageAligned(_stringService.FormatResourceString("ProjectFinishedPrefixWithTargetNamesMultiProcFailed", projectFile, targetNames), true); _hierarchicalMessageWriter.FinishBlock(); } } } _deferredMessageWriter.ShownBuildEventContext(projectStartedEvent.ProjectBuildEventContext); _logWriter.ResetColor(); } _buildEventManager.RemoveProjectStartedEvent(e.BuildEventContext); }
public void Handle(TargetFinishedEventArgs e) { if (e == null) { throw new ArgumentNullException(nameof(e)); } if (e.BuildEventContext == null) { throw new ArgumentException(nameof(e)); } if (_context.Parameters.ShowPerfSummary) { _performanceCounterFactory.GetOrCreatePerformanceCounter(e.TargetName, _context.TargetPerformanceCounters).AddEventFinished(null, e.BuildEventContext, e.Timestamp); } if (_context.IsVerbosityAtLeast(LoggerVerbosity.Detailed)) { _deferredMessageWriter.DisplayDeferredTargetStartedEvent(e.BuildEventContext); var targetStartedEvent = _buildEventManager.GetTargetStartedEvent(e.BuildEventContext); // ReSharper disable once NotResolvedInText if (targetStartedEvent == null) { throw new ArgumentNullException("Started event should not be null in the finished event handler"); } if (targetStartedEvent.ShowTargetFinishedEvent) { if (_context.Parameters.ShowTargetOutputs) { var targetOutputs = e.TargetOutputs; if (targetOutputs != null) { _messageWriter.WriteMessageAligned(_stringService.FormatResourceString("TargetOutputItemsHeader"), false); foreach (ITaskItem taskItem in targetOutputs) { _messageWriter.WriteMessageAligned(_stringService.FormatResourceString("TargetOutputItem", taskItem.ItemSpec), false); foreach (DictionaryEntry dictionaryEntry in taskItem.CloneCustomMetadata()) { _messageWriter.WriteMessageAligned(new string(' ', 8) + dictionaryEntry.Key + " = " + taskItem.GetMetadata((string)dictionaryEntry.Key), false); } } } } if (!_context.Parameters.ShowOnlyErrors && !_context.Parameters.ShowOnlyWarnings) { _context.LastProjectFullKey = _context.GetFullProjectKey(e.BuildEventContext); _messageWriter.WriteLinePrefix(e.BuildEventContext, e.Timestamp, false); _logWriter.SetColor(Color.BuildStage); if (_context.IsVerbosityAtLeast(LoggerVerbosity.Diagnostic) || (_context.Parameters.ShowEventId ?? false)) { _messageWriter.WriteMessageAligned(_stringService.FormatResourceString("TargetMessageWithId", (object)e.Message, (object)e.BuildEventContext.TargetId), true); } else { _messageWriter.WriteMessageAligned(e.Message, true); } _logWriter.ResetColor(); } _deferredMessageWriter.ShownBuildEventContext(e.BuildEventContext); _hierarchicalMessageWriter.FinishBlock(); } } _buildEventManager.RemoveTargetStartedEvent(e.BuildEventContext); }