Beispiel #1
0
        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);
        }
Beispiel #2
0
        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));
        }
Beispiel #4
0
        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));
        }
Beispiel #5
0
        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));
        }
Beispiel #6
0
        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));
        }
Beispiel #7
0
        private WorkItemData FindWorkItemByQuery(IWorkItemQueryBuilder query)
        {
            List <WorkItemData> newFound;

            newFound = query.BuildWIQLQuery(MigrationClient).GetWorkItems();
            if (newFound.Count == 0)
            {
                return(null);
            }
            return(newFound[0]);
        }
Beispiel #8
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);
        }
Beispiel #11
0
 public override List <WorkItemData> GetWorkItems(IWorkItemQueryBuilder queryBuilder)
 {
     queryBuilder.AddParameter("TeamProject", MigrationClient.Config.Project);
     return(queryBuilder.BuildWIQLQuery(MigrationClient).GetWorkItems());
 }
Beispiel #12
0
        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"));
        }
Beispiel #13
0
 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();
 }
Beispiel #16
0
 public abstract List <WorkItemData> GetWorkItems(IWorkItemQueryBuilder queryBuilder);
Beispiel #17
0
 public List <_EngineV1.DataContracts.WorkItemData> GetWorkItems(IWorkItemQueryBuilder queryBuilder)
 {
     throw new System.NotImplementedException();
 }