private void ProcessWorkItemLinks(IWorkItemMigrationClient sourceStore, IWorkItemMigrationClient targetStore, MigrationTools._EngineV1.DataContracts.WorkItemData sourceWorkItem, MigrationTools._EngineV1.DataContracts.WorkItemData targetWorkItem) { if (targetWorkItem != null && _config.LinkMigration && sourceWorkItem.ToWorkItem().Links.Count > 0) { TraceWriteLine(LogEventLevel.Information, "Links {SourceWorkItemLinkCount} | LinkMigrator:{LinkMigration}", new Dictionary <string, object>() { { "SourceWorkItemLinkCount", sourceWorkItem.ToWorkItem().Links.Count }, { "LinkMigration", _config.LinkMigration } }); workItemLinkEnricher.Enrich(sourceWorkItem, targetWorkItem); AddMetric("RelatedLinkCount", processWorkItemMetrics, targetWorkItem.ToWorkItem().Links.Count); int fixedLinkCount = gitRepositoryEnricher.Enrich(sourceWorkItem, targetWorkItem); AddMetric("FixedGitLinkCount", processWorkItemMetrics, fixedLinkCount); } }
protected override void InternalExecute() { Stopwatch stopwatch = Stopwatch.StartNew(); ////////////////////////////////////////////////// var query = string.Format( @"SELECT [System.Id] FROM WorkItems WHERE [System.TeamProject] = @TeamProject {0} ORDER BY {1}", _config.QueryBit, _config.OrderBit ); List <WorkItemData> workitems = Engine.Target.WorkItems.GetWorkItems(query); Log.LogInformation("Update {0} work items?", workitems.Count); ///////////////////////////////////////////////// int current = workitems.Count; int count = 0; long elapsedms = 0; int noteFound = 0; foreach (WorkItemData workitem in workitems) { Stopwatch witstopwatch = Stopwatch.StartNew(); workitem.ToWorkItem().Open(); _GitRepositoryEnricher.Enrich(null, workitem); if (workitem.ToWorkItem().IsDirty) { Log.LogInformation("Saving {workitemId}", workitem.Id); workitem.SaveToAzureDevOps(); } witstopwatch.Stop(); elapsedms = elapsedms + witstopwatch.ElapsedMilliseconds; current--; count++; TimeSpan average = new TimeSpan(0, 0, 0, 0, (int)(elapsedms / count)); TimeSpan remaining = new TimeSpan(0, 0, 0, 0, (int)(average.TotalMilliseconds * current)); Log.LogInformation("Average time of {0} per work item and {1} estimated to completion", string.Format(@"{0:s\:fff} seconds", average), string.Format(@"{0:%h} hours {0:%m} minutes {0:s\:fff} seconds", remaining)); } Log.LogInformation("Did not find old repo for {0} links?", noteFound); ////////////////////////////////////////////////// stopwatch.Stop(); Log.LogInformation("DONE in {Elapsed} seconds", stopwatch.Elapsed.ToString("c")); }