TeamCity.MSBuild.Logger/EventHandlers/BuildStartedHandler.cs (67 lines of code) (raw):
namespace TeamCity.MSBuild.Logger.EventHandlers
{
using Microsoft.Build.Framework;
using System;
using System.Collections.Generic;
using System.Globalization;
using JetBrains.Annotations;
// ReSharper disable once ClassNeverInstantiated.Global
internal class BuildStartedHandler : IBuildEventHandler<BuildStartedEventArgs>
{
[NotNull] private readonly IStringService _stringService;
[NotNull] private readonly IHierarchicalMessageWriter _hierarchicalMessageWriter;
[NotNull] private readonly IMessageWriter _messageWriter;
[NotNull] private readonly ILoggerContext _context;
[NotNull] private readonly ILogWriter _logWriter;
public BuildStartedHandler(
[NotNull] ILoggerContext context,
[NotNull] ILogWriter logWriter,
[NotNull] IMessageWriter messageWriter,
[NotNull] IHierarchicalMessageWriter hierarchicalMessageWriter,
[NotNull] IStringService stringService)
{
_stringService = stringService ?? throw new ArgumentNullException(nameof(stringService));
_hierarchicalMessageWriter = hierarchicalMessageWriter ?? throw new ArgumentNullException(nameof(hierarchicalMessageWriter));
_messageWriter = messageWriter ?? throw new ArgumentNullException(nameof(messageWriter));
_context = context ?? throw new ArgumentNullException(nameof(context));
_logWriter = logWriter ?? throw new ArgumentNullException(nameof(logWriter));
}
public void Handle(BuildStartedEventArgs e)
{
if (e == null) throw new ArgumentNullException(nameof(e));
_context.BuildStarted = e.Timestamp;
_context.HasBuildStarted = true;
if (_context.Parameters.ShowOnlyErrors || _context.Parameters.ShowOnlyWarnings)
{
return;
}
if (_context.IsVerbosityAtLeast(LoggerVerbosity.Normal))
{
_messageWriter.WriteLinePrettyFromResource("BuildStartedWithTime", e.Timestamp);
}
WriteEnvironment(e.BuildEnvironment);
}
private void WriteEnvironment([CanBeNull] IDictionary<string, string> environment)
{
if (environment == null || environment.Count == 0 || _context.Verbosity != LoggerVerbosity.Diagnostic && !_context.Parameters.ShowEnvironment)
{
return;
}
OutputEnvironment(environment);
_messageWriter.WriteNewLine();
}
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();
}
}
}