diff --git a/src/MigrationTools.Clients.AzureDevops.ObjectModel/Processors/TfsAreaAndIterationProcessor.cs b/src/MigrationTools.Clients.AzureDevops.ObjectModel/Processors/TfsAreaAndIterationProcessor.cs index e27359fd4..fa46482dc 100644 --- a/src/MigrationTools.Clients.AzureDevops.ObjectModel/Processors/TfsAreaAndIterationProcessor.cs +++ b/src/MigrationTools.Clients.AzureDevops.ObjectModel/Processors/TfsAreaAndIterationProcessor.cs @@ -1,5 +1,7 @@ using System; + using Microsoft.Extensions.Logging; + using MigrationTools.Endpoints; using MigrationTools.Enrichers; @@ -40,12 +42,14 @@ protected override void InternalExecute() EnsureConfigured(); ProcessorEnrichers.ProcessorExecutionBegin(this); var nodeStructurOptions = new TfsNodeStructureOptions() - { - Enabled = true, - NodeBasePaths = _options.NodeBasePaths, - AreaMaps = _options.AreaMaps, - IterationMaps = _options.IterationMaps, - }; + { + Enabled = true, + NodeBasePaths = _options.NodeBasePaths, + AreaMaps = _options.AreaMaps, + IterationMaps = _options.IterationMaps, + ShouldCreateMissingRevisionPaths = _options.ShouldCreateMissingRevisionPaths, + ReplicateAllExistingNodes = _options.ReplicateAllExistingNodes + }; _nodeStructureEnricher.Configure(nodeStructurOptions); _nodeStructureEnricher.ProcessorExecutionBegin(null); ProcessorEnrichers.ProcessorExecutionEnd(this); diff --git a/src/MigrationTools.Clients.AzureDevops.ObjectModel/Processors/TfsAreaAndIterationProcessorOptions.cs b/src/MigrationTools.Clients.AzureDevops.ObjectModel/Processors/TfsAreaAndIterationProcessorOptions.cs index 56e143e54..ddd7b9cee 100644 --- a/src/MigrationTools.Clients.AzureDevops.ObjectModel/Processors/TfsAreaAndIterationProcessorOptions.cs +++ b/src/MigrationTools.Clients.AzureDevops.ObjectModel/Processors/TfsAreaAndIterationProcessorOptions.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; + using MigrationTools.Enrichers; namespace MigrationTools.Processors @@ -11,6 +12,14 @@ public class TfsAreaAndIterationProcessorOptions : ProcessorOptions, ITfsNodeStr public Dictionary AreaMaps { get; set; } public Dictionary IterationMaps { get; set; } + + /// + /// When set to True the susyem will try to create any missing missing area or iteration paths from the revisions. + /// + public bool ShouldCreateMissingRevisionPaths { get; set; } + + public bool ReplicateAllExistingNodes { get; set; } + public override Type ToConfigure => typeof(TfsAreaAndIterationProcessor); public override IProcessorOptions GetDefault() diff --git a/src/MigrationTools/MigrationTools.csproj b/src/MigrationTools/MigrationTools.csproj index 1feafcedd..48b1a2922 100644 --- a/src/MigrationTools/MigrationTools.csproj +++ b/src/MigrationTools/MigrationTools.csproj @@ -13,6 +13,7 @@ naked Agility with Martin Hinshelwood 2016-2021 LICENSE true + 15.0.1 diff --git a/src/VstsSyncMigrator.Core/Execution/MigrationContext/WorkItemMigrationContext.cs b/src/VstsSyncMigrator.Core/Execution/MigrationContext/WorkItemMigrationContext.cs index df90b4449..05a4521ff 100644 --- a/src/VstsSyncMigrator.Core/Execution/MigrationContext/WorkItemMigrationContext.cs +++ b/src/VstsSyncMigrator.Core/Execution/MigrationContext/WorkItemMigrationContext.cs @@ -410,6 +410,10 @@ private WorkItemData CreateWorkItem_Shell(ProjectData destProject, WorkItemData newwit.Fields["System.CreatedDate"].Value = currentRevisionWorkItem.ToWorkItem().Revisions[0].Fields["System.CreatedDate"].Value; workItemLog.Debug("Setting 'System.CreatedDate'={SystemCreatedDate}", currentRevisionWorkItem.ToWorkItem().Revisions[0].Fields["System.CreatedDate"].Value); } + + newwit.Title = currentRevisionWorkItem?.Title; + newwit[CoreField.ChangedDate] = currentRevisionWorkItem?.ChangedDate; + return newwit.AsWorkItemData(); } @@ -595,7 +599,7 @@ private async Task ProcessWorkItemAsync(WorkItemData sourceWorkItem, int retryLi AddMetric("SyncRev", processWorkItemMetrics, revisionsToMigrate.Count); } } - AddParameter("TargetWorkItem", processWorkItemParamiters, targetWorkItem.ToWorkItem().Revisions.Count.ToString()); + AddParameter("TargetWorkItem", processWorkItemParamiters, targetWorkItem.ToWorkItem().Revisions?.Count.ToString()); if (targetWorkItem != null && targetWorkItem.ToWorkItem().IsDirty) {