public override WorkItemData FindReflectedWorkItemByReflectedWorkItemId(int refId, bool cache) { var sourceIdKey = ~refId; if (Cache.TryGetValue(sourceIdKey, out var workItem)) { return(workItem); } IEnumerable <WorkItemData> QueryWorkItems() { IWorkItemQueryBuilder wiqb = Services.GetRequiredService <IWorkItemQueryBuilder>(); wiqb.Query = string.Format(@"SELECT [System.Id] FROM WorkItems WHERE [System.TeamProject]=@TeamProject AND [{0}] Contains '@idToFind'", MigrationClient.Config.ReflectedWorkItemIDFieldName); wiqb.AddParameter("idToFind", refId.ToString()); wiqb.AddParameter("TeamProject", MigrationClient.Config.Project); foreach (WorkItemData wi in wiqb.BuildWIQLQuery(MigrationClient).GetWorkItems()) { yield return(wi); } } var foundWorkItem = QueryWorkItems().FirstOrDefault(wi => wi.ToWorkItem().Fields[MigrationClient.Config.ReflectedWorkItemIDFieldName].Value.ToString().EndsWith("/" + refId)); if (cache && foundWorkItem != null) { AddToCache(sourceIdKey, foundWorkItem); } return(foundWorkItem); }
public override List <WorkItemData> GetWorkItems(string query) { IWorkItemQueryBuilder wiqb = Services.GetRequiredService <IWorkItemQueryBuilder>(); wiqb.Query = query; return(GetWorkItems(wiqb)); }
public override List <WorkItemData> GetWorkItems(string WIQLQuery, int retryLimit = 0) { IWorkItemQueryBuilder wiqb = Services.GetRequiredService <IWorkItemQueryBuilder>(); wiqb.Query = WIQLQuery; return(GetWorkItems(wiqb, retryLimit)); }
public override WorkItemData FindReflectedWorkItemByTitle(string title) { IWorkItemQueryBuilder wiqb = Services.GetRequiredService <IWorkItemQueryBuilder>(); wiqb.Query = @"SELECT [System.Id] FROM WorkItems WHERE [System.TeamProject]=@TeamProject AND [System.Title] = @TitleToFind"; wiqb.AddParameter("TitleToFind", title); wiqb.AddParameter("TeamProject", MigrationClient.Config.Project); return(FindWorkItemByQuery(wiqb)); }
public override WorkItemData FindReflectedWorkItemByMigrationRef(string refId) { IWorkItemQueryBuilder wiqb = Services.GetRequiredService <IWorkItemQueryBuilder>(); StringBuilder queryBuilder = FindReflectedWorkItemQueryBase(wiqb); queryBuilder.Append(" [System.Description] Contains @KeyToFind"); wiqb.AddParameter("KeyToFind", string.Format("##REF##{0}##", refId)); wiqb.Query = queryBuilder.ToString(); return(FindWorkItemByQuery(wiqb)); }
public override WorkItemData FindReflectedWorkItemByReflectedWorkItemId(string refId) { IWorkItemQueryBuilder wiqb = Services.GetRequiredService <IWorkItemQueryBuilder>(); StringBuilder queryBuilder = FindReflectedWorkItemQueryBase(wiqb); queryBuilder.AppendFormat("[{0}] = @idToFind", MigrationClient.Config.ReflectedWorkItemIDFieldName); wiqb.AddParameter("idToFind", refId.ToString()); wiqb.Query = queryBuilder.ToString(); return(FindWorkItemByQuery(wiqb)); }
private WorkItemData FindWorkItemByQuery(IWorkItemQueryBuilder query) { List <WorkItemData> newFound; newFound = query.BuildWIQLQuery(MigrationClient).GetWorkItems(); if (newFound.Count == 0) { return(null); } return(newFound[0]); }
private StringBuilder FindReflectedWorkItemQueryBase(IWorkItemQueryBuilder query) { StringBuilder s = new StringBuilder(); s.Append("SELECT [System.Id] FROM WorkItems"); s.Append(" WHERE "); if (!MigrationClient.Config.AllowCrossProjectLinking) { s.Append("[System.TeamProject]=@TeamProject AND "); query.AddParameter("TeamProject", MigrationClient.Config.Project); } return(s); }
protected override void InternalExecute() { Stopwatch stopwatch = Stopwatch.StartNew(); ////////////////////////////////////////////////// IWorkItemQueryBuilder wiqb = Services.GetRequiredService <IWorkItemQueryBuilder>(); wiqb.AddParameter("AreaPath", config.AreaIterationPath); wiqb.Query = @"SELECT [System.Id], [System.Tags] FROM WorkItems WHERE [System.TeamProject] = @TeamProject and [System.AreaPath] under @AreaPath"; List <WorkItemData> workitems = Engine.Target.WorkItems.GetWorkItems(wiqb); Trace.WriteLine(string.Format("Update {0} work items?", workitems.Count)); ////////////////////////////////////////////////// int current = workitems.Count; int count = 0; long elapsedms = 0; foreach (WorkItemData workitem in workitems) { Stopwatch witstopwatch = Stopwatch.StartNew(); Trace.WriteLine(string.Format("{0} - Updating: {1}-{2}", current, workitem.Id, workitem.Type)); string areaPath = workitem.ToWorkItem().AreaPath; List <string> bits = new List <string>(areaPath.Split(char.Parse(@"\"))).Skip(4).ToList(); List <string> tags = workitem.ToWorkItem().Tags.Split(char.Parse(@";")).ToList(); List <string> newTags = tags.Union(bits).ToList(); string newTagList = string.Join(";", newTags.ToArray()); if (newTagList != workitem.ToWorkItem().Tags) { workitem.ToWorkItem().Open(); workitem.ToWorkItem().Tags = newTagList; workitem.ToWorkItem().Save(); } 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)); Trace.WriteLine(string.Format("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))); } ////////////////////////////////////////////////// stopwatch.Stop(); Console.WriteLine(@"DONE in {0:%h} hours {0:%m} minutes {0:s\:fff} seconds", stopwatch.Elapsed); }
protected WorkItemData FindReflectedWorkItemByReflectedWorkItemId(ReflectedWorkItemId refId, bool cache = true) { var foundWorkItem = GetFromCache(refId); if (foundWorkItem is null) { IWorkItemQueryBuilder wiqb = Services.GetRequiredService <IWorkItemQueryBuilder>(); wiqb.Query = string.Format(@"SELECT [System.Id] FROM WorkItems WHERE [System.TeamProject]=@TeamProject AND [{0}] = '@idToFind'", MigrationClient.Config.AsTeamProjectConfig().ReflectedWorkItemIDFieldName); wiqb.AddParameter("idToFind", refId.ToString()); wiqb.AddParameter("TeamProject", MigrationClient.Config.AsTeamProjectConfig().Project); var query = wiqb.BuildWIQLQuery(MigrationClient); var items = query.GetWorkItems(); foundWorkItem = items.FirstOrDefault(wi => wi.ToWorkItem().Fields[MigrationClient.Config.AsTeamProjectConfig().ReflectedWorkItemIDFieldName].Value.ToString() == refId.ToString()); if (cache && foundWorkItem != null) { AddToCache(foundWorkItem); } } return(foundWorkItem); }
public override List <WorkItemData> GetWorkItems(IWorkItemQueryBuilder queryBuilder) { queryBuilder.AddParameter("TeamProject", MigrationClient.Config.Project); return(queryBuilder.BuildWIQLQuery(MigrationClient).GetWorkItems()); }
protected override void InternalExecute() { Stopwatch stopwatch = Stopwatch.StartNew(); ////////////////////////////////////////////////// IWorkItemQueryBuilder wiqb = Services.GetRequiredService <IWorkItemQueryBuilder>(); //Builds the constraint part of the query string constraints = BuildQueryBitConstraints(); wiqb.Query = string.Format(@"SELECT [System.Id] FROM WorkItems WHERE [System.TeamProject] = @TeamProject {0} ORDER BY [System.Id] ", constraints); List <WorkItemData> sourceWIS = Engine.Target.WorkItems.GetWorkItems(wiqb); Log.LogInformation("Migrate {0} work items?", sourceWIS.Count); ////////////////////////////////////////////////// ProjectData destProject = Engine.Target.WorkItems.GetProject(); Log.LogInformation("Found target project as {0}", destProject.Name); int current = sourceWIS.Count; int count = 0; long elapsedms = 0; foreach (WorkItemData sourceWI in sourceWIS) { Stopwatch witstopwatch = Stopwatch.StartNew(); WorkItemData targetFound; targetFound = Engine.Target.WorkItems.FindReflectedWorkItem(sourceWI, false); Log.LogInformation("{0} - Updating: {1}-{2}", current, sourceWI.Id, sourceWI.Type); if (targetFound == null) { Log.LogWarning("{0} - WARNING: does not exist {1}-{2}", current, sourceWI.Id, sourceWI.Type); } else { Log.LogInformation("...Exists"); targetFound.ToWorkItem().Open(); Engine.FieldMaps.ApplyFieldMappings(sourceWI, targetFound); if (targetFound.ToWorkItem().IsDirty) { try { targetFound.SaveToAzureDevOps(); Log.LogInformation(" Updated"); } catch (ValidationException ve) { Log.LogError(ve, " [FAILED] {0}", ve.ToString()); } } else { Log.LogInformation(" No changes"); } sourceWI.ToWorkItem().Close(); } 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)); } ////////////////////////////////////////////////// stopwatch.Stop(); Log.LogInformation("DONE in {Elapsed}", stopwatch.Elapsed.ToString("c")); }
public abstract List <WorkItemData> GetWorkItems(IWorkItemQueryBuilder queryBuilder, int retryLimit = 0);
public override List <WorkItemData> GetWorkItems(IWorkItemQueryBuilder queryBuilder, int retryLimit = 0) { queryBuilder.AddParameter("TeamProject", MigrationClient.Config.AsTeamProjectConfig().Project); return(queryBuilder.BuildWIQLQuery(MigrationClient).GetWorkItems(retryLimit)); }
public List <WorkItemData> GetWorkItems(IWorkItemQueryBuilder queryBuilder, int retryLimit = 0) { throw new System.NotImplementedException(); }
public abstract List <WorkItemData> GetWorkItems(IWorkItemQueryBuilder queryBuilder);
public List <_EngineV1.DataContracts.WorkItemData> GetWorkItems(IWorkItemQueryBuilder queryBuilder) { throw new System.NotImplementedException(); }