diff --git a/src/app/GitCommands/ServiceContainerRegistry.cs b/src/app/GitCommands/ServiceContainerRegistry.cs index d09eb510abe..d529fa58a64 100644 --- a/src/app/GitCommands/ServiceContainerRegistry.cs +++ b/src/app/GitCommands/ServiceContainerRegistry.cs @@ -1,6 +1,6 @@ using System.ComponentModel.Design; using GitCommands.Submodules; -using GitUIPluginInterfaces; +using GitExtUtils; namespace GitCommands; diff --git a/src/app/GitExtUtils/ServiceContainerRegistry.cs b/src/app/GitExtUtils/ServiceContainerRegistry.cs new file mode 100644 index 00000000000..821fa15a76f --- /dev/null +++ b/src/app/GitExtUtils/ServiceContainerRegistry.cs @@ -0,0 +1,11 @@ +using System.ComponentModel.Design; + +namespace GitExtUtils; + +public static class ServiceContainerRegistry +{ + public static void RegisterServices(ServiceContainer serviceContainer) + { + serviceContainer.AddService(new SubscribableTraceListener()); + } +} diff --git a/src/plugins/GitUIPluginInterfaces/ServiceProviderExtensions.cs b/src/app/GitExtUtils/ServiceProviderExtensions.cs similarity index 98% rename from src/plugins/GitUIPluginInterfaces/ServiceProviderExtensions.cs rename to src/app/GitExtUtils/ServiceProviderExtensions.cs index 208fa19c077..015e06919cb 100644 --- a/src/plugins/GitUIPluginInterfaces/ServiceProviderExtensions.cs +++ b/src/app/GitExtUtils/ServiceProviderExtensions.cs @@ -1,6 +1,6 @@ using System.ComponentModel.Design; -namespace GitUIPluginInterfaces; +namespace GitExtUtils; /// /// Extension methods for getting services from an . diff --git a/src/app/GitExtUtils/SubscribableTraceListener.cs b/src/app/GitExtUtils/SubscribableTraceListener.cs new file mode 100644 index 00000000000..2b7c48d358a --- /dev/null +++ b/src/app/GitExtUtils/SubscribableTraceListener.cs @@ -0,0 +1,82 @@ +using System.Diagnostics; +using System.Text; + +namespace GitExtUtils; + +public delegate void TraceHandler(in string message); + +/// +/// Provides an event for receiving the output. +/// +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 + } + } + } +} diff --git a/src/app/GitExtensions/ServiceContainerRegistry.cs b/src/app/GitExtensions/ServiceContainerRegistry.cs index 8c3c8d021dc..6d401d97d8b 100644 --- a/src/app/GitExtensions/ServiceContainerRegistry.cs +++ b/src/app/GitExtensions/ServiceContainerRegistry.cs @@ -3,7 +3,7 @@ using GitCommands; using GitCommands.Git; using GitCommands.UserRepositoryHistory; -using GitUIPluginInterfaces; +using GitExtUtils; using ResourceManager; namespace GitExtensions; @@ -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); diff --git a/src/app/GitUI/CommandsDialogs/FormBrowse.cs b/src/app/GitUI/CommandsDialogs/FormBrowse.cs index 0f70c606869..61af898801c 100644 --- a/src/app/GitUI/CommandsDialogs/FormBrowse.cs +++ b/src/app/GitUI/CommandsDialogs/FormBrowse.cs @@ -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; diff --git a/src/app/GitUI/CommandsDialogs/SettingsDialog/Pages/ControlHotkeys.cs b/src/app/GitUI/CommandsDialogs/SettingsDialog/Pages/ControlHotkeys.cs index 54e627694eb..d0ee1873975 100644 --- a/src/app/GitUI/CommandsDialogs/SettingsDialog/Pages/ControlHotkeys.cs +++ b/src/app/GitUI/CommandsDialogs/SettingsDialog/Pages/ControlHotkeys.cs @@ -1,5 +1,5 @@ -using GitUI.Hotkey; -using GitUIPluginInterfaces; +using GitExtUtils; +using GitUI.Hotkey; using Microsoft; using ResourceManager; using ResourceManager.Hotkey; diff --git a/src/app/GitUI/CommandsDialogs/SettingsDialog/Pages/ScriptsSettingsPage.cs b/src/app/GitUI/CommandsDialogs/SettingsDialog/Pages/ScriptsSettingsPage.cs index 91ff17f67db..c9b4895e2ab 100644 --- a/src/app/GitUI/CommandsDialogs/SettingsDialog/Pages/ScriptsSettingsPage.cs +++ b/src/app/GitUI/CommandsDialogs/SettingsDialog/Pages/ScriptsSettingsPage.cs @@ -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; diff --git a/src/app/GitUI/CommandsDialogs/SettingsDialog/Pages/TextboxHotkey.cs b/src/app/GitUI/CommandsDialogs/SettingsDialog/Pages/TextboxHotkey.cs index fb91f3a5553..d430669186d 100644 --- a/src/app/GitUI/CommandsDialogs/SettingsDialog/Pages/TextboxHotkey.cs +++ b/src/app/GitUI/CommandsDialogs/SettingsDialog/Pages/TextboxHotkey.cs @@ -1,5 +1,5 @@ -using GitUI.Hotkey; -using GitUIPluginInterfaces; +using GitExtUtils; +using GitUI.Hotkey; using ResourceManager.Hotkey; namespace GitUI.CommandsDialogs.SettingsDialog.Pages diff --git a/src/app/GitUI/CommandsDialogs/UserScriptContextMenuExtensions.cs b/src/app/GitUI/CommandsDialogs/UserScriptContextMenuExtensions.cs index 3a7b4210992..84596a0aca9 100644 --- a/src/app/GitUI/CommandsDialogs/UserScriptContextMenuExtensions.cs +++ b/src/app/GitUI/CommandsDialogs/UserScriptContextMenuExtensions.cs @@ -1,6 +1,6 @@ -using GitUI.LeftPanel.ContextMenu; +using GitExtUtils; +using GitUI.LeftPanel.ContextMenu; using GitUI.ScriptsEngine; -using GitUIPluginInterfaces; using ResourceManager; using ResourceManager.Hotkey; diff --git a/src/app/GitUI/GitModuleControl.cs b/src/app/GitUI/GitModuleControl.cs index 07a9d0ad344..77e6fe85786 100644 --- a/src/app/GitUI/GitModuleControl.cs +++ b/src/app/GitUI/GitModuleControl.cs @@ -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 diff --git a/src/app/GitUI/GitModuleForm.cs b/src/app/GitUI/GitModuleForm.cs index 45b3ce45405..b98838e2b32 100644 --- a/src/app/GitUI/GitModuleForm.cs +++ b/src/app/GitUI/GitModuleForm.cs @@ -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 diff --git a/src/app/GitUI/LeftPanel/SubmoduleTree.cs b/src/app/GitUI/LeftPanel/SubmoduleTree.cs index e1834096409..cfb4acabf1b 100644 --- a/src/app/GitUI/LeftPanel/SubmoduleTree.cs +++ b/src/app/GitUI/LeftPanel/SubmoduleTree.cs @@ -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; diff --git a/src/app/GitUI/ScriptsEngine/ScriptOptionsParser.cs b/src/app/GitUI/ScriptsEngine/ScriptOptionsParser.cs index c96e85676e2..6a542e7cd40 100644 --- a/src/app/GitUI/ScriptsEngine/ScriptOptionsParser.cs +++ b/src/app/GitUI/ScriptsEngine/ScriptOptionsParser.cs @@ -2,6 +2,7 @@ using GitCommands.Config; using GitCommands.UserRepositoryHistory; using GitExtensions.Extensibility.Git; +using GitExtUtils; using GitUI.UserControls.RevisionGrid; using GitUIPluginInterfaces; diff --git a/src/app/GitUI/ScriptsEngine/ScriptsManager.ScriptRunner.cs b/src/app/GitUI/ScriptsEngine/ScriptsManager.ScriptRunner.cs index a0a9fe2b375..3e826529c11 100644 --- a/src/app/GitUI/ScriptsEngine/ScriptsManager.ScriptRunner.cs +++ b/src/app/GitUI/ScriptsEngine/ScriptsManager.ScriptRunner.cs @@ -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 { diff --git a/src/app/GitUI/ServiceContainerRegistry.cs b/src/app/GitUI/ServiceContainerRegistry.cs index 28dd4a8c148..68d46c5d54e 100644 --- a/src/app/GitUI/ServiceContainerRegistry.cs +++ b/src/app/GitUI/ServiceContainerRegistry.cs @@ -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; diff --git a/src/app/ResourceManager/GitExtensionsFormBase.cs b/src/app/ResourceManager/GitExtensionsFormBase.cs index c9d007db63c..cdaf88a9e2f 100644 --- a/src/app/ResourceManager/GitExtensionsFormBase.cs +++ b/src/app/ResourceManager/GitExtensionsFormBase.cs @@ -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; diff --git a/tests/app/IntegrationTests/UI.IntegrationTests/CommandsDialogs/FormBrowse.LeftPanelTests.Submodules.cs b/tests/app/IntegrationTests/UI.IntegrationTests/CommandsDialogs/FormBrowse.LeftPanelTests.Submodules.cs index 5dd16552bf4..2a9e14e1056 100644 --- a/tests/app/IntegrationTests/UI.IntegrationTests/CommandsDialogs/FormBrowse.LeftPanelTests.Submodules.cs +++ b/tests/app/IntegrationTests/UI.IntegrationTests/CommandsDialogs/FormBrowse.LeftPanelTests.Submodules.cs @@ -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 { diff --git a/tests/app/IntegrationTests/UI.IntegrationTests/CommandsDialogs/FormCommitTests.cs b/tests/app/IntegrationTests/UI.IntegrationTests/CommandsDialogs/FormCommitTests.cs index 4c2319316af..8bbd34d90d6 100644 --- a/tests/app/IntegrationTests/UI.IntegrationTests/CommandsDialogs/FormCommitTests.cs +++ b/tests/app/IntegrationTests/UI.IntegrationTests/CommandsDialogs/FormCommitTests.cs @@ -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; diff --git a/tests/app/IntegrationTests/UI.IntegrationTests/GlobalServiceContainer.cs b/tests/app/IntegrationTests/UI.IntegrationTests/GlobalServiceContainer.cs index 84c8be435b5..2bc392d5f03 100644 --- a/tests/app/IntegrationTests/UI.IntegrationTests/GlobalServiceContainer.cs +++ b/tests/app/IntegrationTests/UI.IntegrationTests/GlobalServiceContainer.cs @@ -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; diff --git a/tests/app/IntegrationTests/UI.IntegrationTests/ScriptEngine/ScriptRunnerTests.cs b/tests/app/IntegrationTests/UI.IntegrationTests/ScriptEngine/ScriptRunnerTests.cs index 1e0db858e38..0daaece4007 100644 --- a/tests/app/IntegrationTests/UI.IntegrationTests/ScriptEngine/ScriptRunnerTests.cs +++ b/tests/app/IntegrationTests/UI.IntegrationTests/ScriptEngine/ScriptRunnerTests.cs @@ -4,6 +4,7 @@ using FluentAssertions; using FluentAssertions.Specialized; using GitExtensions.Extensibility.Git; +using GitExtUtils; using GitUI; using GitUI.CommandsDialogs; using GitUI.NBugReports; diff --git a/tests/app/IntegrationTests/UI.IntegrationTests/UserControls/CommitInfo/CommitInfoTests.cs b/tests/app/IntegrationTests/UI.IntegrationTests/UserControls/CommitInfo/CommitInfoTests.cs index fa7c594ba2d..a0f44dfd183 100644 --- a/tests/app/IntegrationTests/UI.IntegrationTests/UserControls/CommitInfo/CommitInfoTests.cs +++ b/tests/app/IntegrationTests/UI.IntegrationTests/UserControls/CommitInfo/CommitInfoTests.cs @@ -5,6 +5,7 @@ using GitCommands; using GitCommands.Git; using GitExtensions.Extensibility.Git; +using GitExtUtils; using GitUI; using GitUIPluginInterfaces; using NSubstitute; diff --git a/tests/app/UnitTests/GitUI.Tests/Editor/FileViewerTextTests.cs b/tests/app/UnitTests/GitUI.Tests/Editor/FileViewerTextTests.cs index b380dc0f4a7..e9ad3f235f2 100644 --- a/tests/app/UnitTests/GitUI.Tests/Editor/FileViewerTextTests.cs +++ b/tests/app/UnitTests/GitUI.Tests/Editor/FileViewerTextTests.cs @@ -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; diff --git a/tests/app/UnitTests/GitUI.Tests/Script/ScriptOptionsParserTests.cs b/tests/app/UnitTests/GitUI.Tests/Script/ScriptOptionsParserTests.cs index 6216b1896d5..41549a7032f 100644 --- a/tests/app/UnitTests/GitUI.Tests/Script/ScriptOptionsParserTests.cs +++ b/tests/app/UnitTests/GitUI.Tests/Script/ScriptOptionsParserTests.cs @@ -5,6 +5,7 @@ using GitCommands.UserRepositoryHistory; using GitExtensions.Extensibility; using GitExtensions.Extensibility.Git; +using GitExtUtils; using GitUI; using GitUI.ScriptsEngine; using GitUIPluginInterfaces; diff --git a/tests/app/UnitTests/GitUI.Tests/Script/ScriptsManagerScriptRunnerTests.cs b/tests/app/UnitTests/GitUI.Tests/Script/ScriptsManagerScriptRunnerTests.cs index f86c2190f58..66eaedb1c5a 100644 --- a/tests/app/UnitTests/GitUI.Tests/Script/ScriptsManagerScriptRunnerTests.cs +++ b/tests/app/UnitTests/GitUI.Tests/Script/ScriptsManagerScriptRunnerTests.cs @@ -1,5 +1,6 @@ using FluentAssertions; using GitExtensions.Extensibility.Git; +using GitExtUtils; using GitUI.ScriptsEngine; using GitUIPluginInterfaces; using NSubstitute; diff --git a/tests/app/UnitTests/GitUI.Tests/UserControls/RevisionGrid/RevisionFileNameTests.cs b/tests/app/UnitTests/GitUI.Tests/UserControls/RevisionGrid/RevisionFileNameTests.cs index 349e60fc0fb..42ebe4528ce 100644 --- a/tests/app/UnitTests/GitUI.Tests/UserControls/RevisionGrid/RevisionFileNameTests.cs +++ b/tests/app/UnitTests/GitUI.Tests/UserControls/RevisionGrid/RevisionFileNameTests.cs @@ -2,8 +2,8 @@ using CommonTestUtils; using GitCommands; using GitExtensions.Extensibility.Git; +using GitExtUtils; using GitUI; -using GitUIPluginInterfaces; using NSubstitute; namespace GitUITests.UserControls.RevisionGrid;