From 00a2e81eb9abf41c12d3a5ae02a6d9af245ff3d8 Mon Sep 17 00:00:00 2001 From: kaflake <8384990+kaflake@users.noreply.github.com> Date: Wed, 2 Apr 2025 08:44:58 +0200 Subject: [PATCH 1/2] Update TfsWorkItemMigrationProcessor.cs ClosedDate population called two times. One time without exception handling. If there is no "Microsoft.VSTS.Common.ClosedDate" in the oldWorkItem it will crash. --- .../Processors/TfsWorkItemMigrationProcessor.cs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/MigrationTools.Clients.TfsObjectModel/Processors/TfsWorkItemMigrationProcessor.cs b/src/MigrationTools.Clients.TfsObjectModel/Processors/TfsWorkItemMigrationProcessor.cs index 42f6b8fd6..5b46cbd40 100644 --- a/src/MigrationTools.Clients.TfsObjectModel/Processors/TfsWorkItemMigrationProcessor.cs +++ b/src/MigrationTools.Clients.TfsObjectModel/Processors/TfsWorkItemMigrationProcessor.cs @@ -417,10 +417,6 @@ private void PopulateWorkItem(WorkItemData oldWorkItemData, WorkItemData newWork } newWorkItem.Title = oldWorkItem.Title; - if (newWorkItem.Fields.Contains("Microsoft.VSTS.Common.ClosedDate") && newWorkItem.Fields["Microsoft.VSTS.Common.ClosedDate"].IsEditable) - { - newWorkItem.Fields["Microsoft.VSTS.Common.ClosedDate"].Value = oldWorkItem.Fields["Microsoft.VSTS.Common.ClosedDate"].Value; - } newWorkItem.State = oldWorkItem.State; try { From e7076cf8f8fbbf91f7a27e8b97c19c09d6b3cee9 Mon Sep 17 00:00:00 2001 From: kaflake <8384990+kaflake@users.noreply.github.com> Date: Wed, 2 Apr 2025 09:05:40 +0200 Subject: [PATCH 2/2] Do not crash on CheckClosedDateIsValid if source has no closedDate --- .../Processors/TfsWorkItemMigrationProcessor.cs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/MigrationTools.Clients.TfsObjectModel/Processors/TfsWorkItemMigrationProcessor.cs b/src/MigrationTools.Clients.TfsObjectModel/Processors/TfsWorkItemMigrationProcessor.cs index 5b46cbd40..6680d45af 100644 --- a/src/MigrationTools.Clients.TfsObjectModel/Processors/TfsWorkItemMigrationProcessor.cs +++ b/src/MigrationTools.Clients.TfsObjectModel/Processors/TfsWorkItemMigrationProcessor.cs @@ -901,7 +901,17 @@ private void CheckClosedDateIsValid(WorkItemData sourceWorkItem, WorkItemData ta if (targetWorkItem.ToWorkItem().Fields[closedDateField].Value == null && (targetWorkItem.ToWorkItem().Fields["System.State"].Value.ToString() == "Closed" || targetWorkItem.ToWorkItem().Fields["System.State"].Value.ToString() == "Done")) { Log.LogWarning("The field {closedDateField} is set to Null and will revert to the current date on save! ", closedDateField); - Log.LogWarning("Source Closed Date [#{sourceId}][Rev{sourceRev}]: {sourceClosedDate} ", sourceWorkItem.ToWorkItem().Id, sourceWorkItem.ToWorkItem().Rev, sourceWorkItem.ToWorkItem().Fields[closedDateField].Value); + if (sourceWorkItem.ToWorkItem().Fields.Contains(closedDateField)) + { + Log.LogWarning("Source Closed Date [#{sourceId}][Rev{sourceRev}]: {sourceClosedDate} ", + sourceWorkItem.ToWorkItem().Id, sourceWorkItem.ToWorkItem().Rev, + sourceWorkItem.ToWorkItem().Fields[closedDateField].Value); + } + else + { + Log.LogWarning("Source Closed Date [#{sourceId}][Rev{sourceRev}] is not Available ", + sourceWorkItem.ToWorkItem().Id, sourceWorkItem.ToWorkItem().Rev); + } } if (!sourceWorkItem.ToWorkItem().Fields.Contains(closedDateField)) {