Skip to content

Commit

Permalink
feat: Add SubscribableTraceListener
Browse files Browse the repository at this point in the history
  • Loading branch information
mstv committed May 26, 2024
1 parent 844050a commit 7d46828
Show file tree
Hide file tree
Showing 26 changed files with 122 additions and 21 deletions.
2 changes: 1 addition & 1 deletion src/app/GitCommands/ServiceContainerRegistry.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
using System.ComponentModel.Design;
using GitCommands.Submodules;
using GitUIPluginInterfaces;
using GitExtUtils;

namespace GitCommands;

Expand Down
11 changes: 11 additions & 0 deletions src/app/GitExtUtils/ServiceContainerRegistry.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
using System.ComponentModel.Design;

namespace GitExtUtils;

public static class ServiceContainerRegistry
{
public static void RegisterServices(ServiceContainer serviceContainer)
{
serviceContainer.AddService<ISubscribableTraceListener>(new SubscribableTraceListener());
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
using System.ComponentModel.Design;

namespace GitUIPluginInterfaces;
namespace GitExtUtils;

/// <summary>
/// Extension methods for getting services from an <see cref="IServiceProvider" />.
Expand Down
82 changes: 82 additions & 0 deletions src/app/GitExtUtils/SubscribableTraceListener.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
using System.Diagnostics;
using System.Text;

namespace GitExtUtils;

public delegate void TraceHandler(in string message);

/// <summary>
/// Provides an event for receiving the <see cref="Trace"/> output.
/// </summary>
public interface ISubscribableTraceListener
{
event TraceHandler TraceReceived;
}

public class SubscribableTraceListener : TraceListener, ISubscribableTraceListener
{
private readonly StringBuilder _trace = new();

public event TraceHandler TraceReceived;

public SubscribableTraceListener()
{
Trace.Listeners.Add(this);
}

protected override void Dispose(bool disposing)
{
if (disposing)
{
Trace.Listeners.Remove(this);
}

base.Dispose(disposing);
}

public override void Write(string? message)
{
lock (this)
{
_trace.Append(message);
}
}

public override void WriteLine(string? message)
{
lock (this)
{
_trace.AppendLine(message);
Flush();
}
}

public override void Flush()
{
lock (this)
{
base.Flush();
try
{
if (_trace.Length == 0)
{
return;
}

string message = _trace.ToString();
#if DEBUG
if (message.Contains("Exception") || message.Contains("RevisionReader"))
#endif
{
TraceReceived?.Invoke(message);
}

_trace.Clear();
}
catch
{
// Do not worsen things
}
}
}
}
4 changes: 3 additions & 1 deletion src/app/GitExtensions/ServiceContainerRegistry.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
using GitCommands;
using GitCommands.Git;
using GitCommands.UserRepositoryHistory;
using GitUIPluginInterfaces;
using GitExtUtils;
using ResourceManager;

namespace GitExtensions;
Expand All @@ -12,6 +12,8 @@ internal static class ServiceContainerRegistry
{
public static void RegisterServices(ServiceContainer serviceContainer)
{
GitExtUtils.ServiceContainerRegistry.RegisterServices(serviceContainer);

FileSystem fileSystem = new();
GitDirectoryResolver gitDirectoryResolver = new(fileSystem);
RepositoryDescriptionProvider repositoryDescriptionProvider = new(gitDirectoryResolver);
Expand Down
1 change: 1 addition & 0 deletions src/app/GitUI/CommandsDialogs/FormBrowse.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
using GitExtensions.Extensibility.Plugins;
using GitExtensions.Extensibility.Settings;
using GitExtensions.Extensibility.Translations;
using GitExtUtils;
using GitExtUtils.GitUI;
using GitExtUtils.GitUI.Theming;
using GitUI.Avatars;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using GitUI.Hotkey;
using GitUIPluginInterfaces;
using GitExtUtils;
using GitUI.Hotkey;
using Microsoft;
using ResourceManager;
using ResourceManager.Hotkey;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@
using System.Reflection;
using GitCommands;
using GitCommands.Utils;
using GitExtUtils;
using GitExtUtils.GitUI;
using GitExtUtils.GitUI.Theming;
using GitUI.ScriptsEngine;
using GitUIPluginInterfaces;
using Microsoft;
using ResourceManager;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using GitUI.Hotkey;
using GitUIPluginInterfaces;
using GitExtUtils;
using GitUI.Hotkey;
using ResourceManager.Hotkey;

namespace GitUI.CommandsDialogs.SettingsDialog.Pages
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
using GitUI.LeftPanel.ContextMenu;
using GitExtUtils;
using GitUI.LeftPanel.ContextMenu;
using GitUI.ScriptsEngine;
using GitUIPluginInterfaces;
using ResourceManager;
using ResourceManager.Hotkey;

Expand Down
2 changes: 1 addition & 1 deletion src/app/GitUI/GitModuleControl.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using GitExtensions.Extensibility.Git;
using GitExtUtils;
using GitUI.ScriptsEngine;
using GitUIPluginInterfaces;
using ResourceManager;

namespace GitUI
Expand Down
2 changes: 1 addition & 1 deletion src/app/GitUI/GitModuleForm.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
using System.Diagnostics.CodeAnalysis;
using GitCommands;
using GitExtensions.Extensibility.Git;
using GitExtUtils;
using GitUI.Infrastructure.Telemetry;
using GitUI.ScriptsEngine;
using GitUIPluginInterfaces;
using ResourceManager;

namespace GitUI
Expand Down
2 changes: 1 addition & 1 deletion src/app/GitUI/LeftPanel/SubmoduleTree.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
using GitCommands.Submodules;
using GitExtensions.Extensibility;
using GitExtensions.Extensibility.Git;
using GitExtUtils;
using GitUI.CommandsDialogs;
using GitUIPluginInterfaces;
using Microsoft;
using Microsoft.VisualStudio.Threading;

Expand Down
1 change: 1 addition & 0 deletions src/app/GitUI/ScriptsEngine/ScriptOptionsParser.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using GitCommands.Config;
using GitCommands.UserRepositoryHistory;
using GitExtensions.Extensibility.Git;
using GitExtUtils;
using GitUI.UserControls.RevisionGrid;
using GitUIPluginInterfaces;

Expand Down
2 changes: 1 addition & 1 deletion src/app/GitUI/ScriptsEngine/ScriptsManager.ScriptRunner.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
using GitExtensions.Extensibility;
using GitExtensions.Extensibility.Git;
using GitExtensions.Extensibility.Plugins;
using GitExtUtils;
using GitUI.HelperDialogs;
using GitUI.NBugReports;
using GitUIPluginInterfaces;

namespace GitUI.ScriptsEngine
{
Expand Down
2 changes: 1 addition & 1 deletion src/app/GitUI/ServiceContainerRegistry.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
using System.ComponentModel.Design;
using GitCommands.UserRepositoryHistory;
using GitExtUtils;
using GitUI.Hotkey;
using GitUI.ScriptsEngine;
using GitUIPluginInterfaces;
using ResourceManager;

namespace GitUI;
Expand Down
2 changes: 1 addition & 1 deletion src/app/ResourceManager/GitExtensionsFormBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@
using GitExtensions.Extensibility.Git;
using GitExtensions.Extensibility.Translations;
using GitExtensions.Extensibility.Translations.Xliff;
using GitExtUtils;
using GitExtUtils.GitUI.Theming;
using GitUI;
using GitUIPluginInterfaces;
using ResourceManager.Hotkey;
using ResourceManager.Properties;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
using GitCommands;
using GitCommands.Submodules;
using GitExtensions.Extensibility.Git;
using GitExtUtils;
using GitUI;
using GitUI.CommandsDialogs;
using GitUIPluginInterfaces;

namespace GitExtensions.UITests.CommandsDialogs
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@
using FluentAssertions;
using GitCommands;
using GitExtensions.Extensibility.Git;
using GitExtUtils;
using GitExtUtils.GitUI.Theming;
using GitUI;
using GitUI.CommandsDialogs;
using GitUI.Editor;
using GitUI.ScriptsEngine;
using GitUI.UserControls;
using GitUIPluginInterfaces;
using ICSharpCode.TextEditor;
using NSubstitute;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
using System.ComponentModel.Design;
using GitCommands;
using GitCommands.Submodules;
using GitExtUtils;
using GitUI;
using GitUI.Hotkey;
using GitUI.ScriptsEngine;
using GitUIPluginInterfaces;
using NSubstitute;
using ResourceManager;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using FluentAssertions;
using FluentAssertions.Specialized;
using GitExtensions.Extensibility.Git;
using GitExtUtils;
using GitUI;
using GitUI.CommandsDialogs;
using GitUI.NBugReports;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using GitCommands;
using GitCommands.Git;
using GitExtensions.Extensibility.Git;
using GitExtUtils;
using GitUI;
using GitUIPluginInterfaces;
using NSubstitute;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
using System.ComponentModel.Design;
using CommonTestUtils;
using FluentAssertions;
using GitExtUtils;
using GitUI;
using GitUI.Editor;
using GitUI.ScriptsEngine;
using GitUIPluginInterfaces;
using ICSharpCode.TextEditor;
using ICSharpCode.TextEditor.Document;
using NSubstitute;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using GitCommands.UserRepositoryHistory;
using GitExtensions.Extensibility;
using GitExtensions.Extensibility.Git;
using GitExtUtils;
using GitUI;
using GitUI.ScriptsEngine;
using GitUIPluginInterfaces;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using FluentAssertions;
using GitExtensions.Extensibility.Git;
using GitExtUtils;
using GitUI.ScriptsEngine;
using GitUIPluginInterfaces;
using NSubstitute;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
using CommonTestUtils;
using GitCommands;
using GitExtensions.Extensibility.Git;
using GitExtUtils;
using GitUI;
using GitUIPluginInterfaces;
using NSubstitute;

namespace GitUITests.UserControls.RevisionGrid;
Expand Down

0 comments on commit 7d46828

Please sign in to comment.