in TeamCity.MSBuild.Logger/TeamCityHierarchicalMessageWriter.cs [131:194]
private void Write([NotNull] string message, [NotNull] Flow flow)
{
if (message == null) throw new ArgumentNullException(nameof(message));
if (flow == null) throw new ArgumentNullException(nameof(flow));
if (!_messages.TryGetValue(flow, out var messageInfo))
{
messageInfo = new MessageInfo();
_messages.Add(flow, messageInfo);
}
messageInfo.Text.Append(message);
messageInfo.Color = _colorStorage.Color;
if (!message.EndsWith("\n"))
{
return;
}
_messages.Remove(flow);
var messageState = MessageState.Normal;
if (messageInfo.Color.HasValue)
{
// ReSharper disable once SwitchStatementMissingSomeEnumCasesNoDefault
switch (messageInfo.Color.Value)
{
case Color.Error:
messageState = MessageState.Error;
break;
case Color.ErrorSummary:
_buildProblems.Add(messageInfo.Text.ToString().TrimEnd());
return;
case Color.Warning:
case Color.WarningSummary:
messageState = MessageState.Warning;
break;
}
}
var text = messageInfo.Text.ToString().TrimEnd();
var hasServiceMessage = false;
if (_context.Parameters.PlainServiceMessage)
{
// TeamCity service message
var trimmed = text.TrimStart();
if (trimmed.StartsWith("##teamcity[", StringComparison.CurrentCultureIgnoreCase))
{
foreach (var serviceMessage in _serviceMessageParser.ParseServiceMessages(trimmed))
{
hasServiceMessage = true;
flow.Write(serviceMessage);
}
}
}
// MSBuild output
if (!hasServiceMessage)
{
flow.Write(FormatMessage(messageState, messageInfo, text), messageState);
}
}