From a07a4bc180771438810dc13c3e82b98a326dd55d Mon Sep 17 00:00:00 2001 From: "Martin Hinshelwood nkdAgility.com" Date: Thu, 3 Oct 2024 08:50:24 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20(TfsGitRepositoryTool):=20add=20val?= =?UTF-8?q?idation=20and=20logging=20for=20TfsGitRepositoryTool=20options?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add a check to ensure the TfsGitRepositoryEnricher is enabled before proceeding, logging a warning if it is not. This prevents unnecessary operations when the feature is disabled. Introduce a default initialization for the Mappings dictionary to avoid null references. Implement a new options validator class, TfsGitRepositoryToolOptionsValidator, to ensure that Mappings is always initialized, enhancing robustness and preventing runtime errors. These changes improve the reliability and maintainability of the tool by ensuring proper configuration and logging. --- .../Tools/TfsGitRepositoryTool.cs | 5 +++++ .../Tools/TfsGitRepositoryToolOptions.cs | 6 +++++- .../TfsGitRepositoryToolOptionsValidator.cs | 21 +++++++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 src/MigrationTools.Clients.TfsObjectModel/Tools/TfsGitRepositoryToolOptionsValidator.cs diff --git a/src/MigrationTools.Clients.TfsObjectModel/Tools/TfsGitRepositoryTool.cs b/src/MigrationTools.Clients.TfsObjectModel/Tools/TfsGitRepositoryTool.cs index 39144fd86..2ae331e08 100644 --- a/src/MigrationTools.Clients.TfsObjectModel/Tools/TfsGitRepositoryTool.cs +++ b/src/MigrationTools.Clients.TfsObjectModel/Tools/TfsGitRepositoryTool.cs @@ -78,6 +78,11 @@ public int Enrich(TfsProcessor processor, WorkItemData sourceWorkItem, WorkItem { throw new ArgumentNullException(nameof(targetWorkItem)); } + if (!Options.Enabled) + { + Log.LogWarning("TfsGitRepositoryEnricher is not enabled! We will not fix any git commit links in Work items and they will be ignored."); + return 0; + } Log.LogInformation("GitRepositoryEnricher: Enriching {Id} To fix Git Repo Links", targetWorkItem.Id); var changeSetMappings = Services.GetService(); diff --git a/src/MigrationTools.Clients.TfsObjectModel/Tools/TfsGitRepositoryToolOptions.cs b/src/MigrationTools.Clients.TfsObjectModel/Tools/TfsGitRepositoryToolOptions.cs index ca248b643..b41a87d51 100644 --- a/src/MigrationTools.Clients.TfsObjectModel/Tools/TfsGitRepositoryToolOptions.cs +++ b/src/MigrationTools.Clients.TfsObjectModel/Tools/TfsGitRepositoryToolOptions.cs @@ -1,5 +1,8 @@ using System; using System.Collections.Generic; +using DotNet.Globbing; +using Microsoft.Extensions.Options; +using System.Text.RegularExpressions; using Microsoft.TeamFoundation.Build.Client; using MigrationTools.Enrichers; using MigrationTools.Tools.Infrastructure; @@ -12,6 +15,7 @@ public class TfsGitRepositoryToolOptions : ToolOptions /// List of work item mappings. /// /// {} - public Dictionary Mappings { get; set; } + public Dictionary Mappings { get; set; } = new Dictionary(); } + } \ No newline at end of file diff --git a/src/MigrationTools.Clients.TfsObjectModel/Tools/TfsGitRepositoryToolOptionsValidator.cs b/src/MigrationTools.Clients.TfsObjectModel/Tools/TfsGitRepositoryToolOptionsValidator.cs new file mode 100644 index 000000000..751557840 --- /dev/null +++ b/src/MigrationTools.Clients.TfsObjectModel/Tools/TfsGitRepositoryToolOptionsValidator.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.Extensions.Options; + +namespace MigrationTools.Tools +{ + internal class TfsGitRepositoryToolOptionsValidator : IValidateOptions + { + public ValidateOptionsResult Validate(string name, TfsGitRepositoryToolOptions options) + { + if (options.Mappings == null) + { + return ValidateOptionsResult.Fail("Mappings must be set to at least an empty array"); + } + return ValidateOptionsResult.Success; + } + } +}