GetStatusesFromMetadata(ProjectFilter projectFilter)
        {
            var json = _jiraContext.Api.GetStatusesByProject().Result;
            var statusesByProjects = json
                                     .ToObject <List <StatusesByProject> >()
                                     .Where(s => projectFilter.IncludesProject(s.Project));

            foreach (var project in statusesByProjects)
            {
                foreach (var type in project.StatusesByType)
                {
                    var categories = type.Statuses
                                     .Select(s => (name: s.Name, cat: s.StatusCategory.Name))
                                     .ToLookup(s => s.cat, s => s.name);

                    foreach (var category in categories)
                    {
                        foreach (var status in category)
                        {
                            yield return(project.Project, type.Name, category.Key, status);
                        }
                    }
                }
            }
        }
        public void IssuesByProject(
            ExportOptions exportOptions,
            [Option(Description = "Resumes export after this issue")]
            IssueId resumeAfter,
            [Option(Description = "Specify if the issue list should come from Jira, Cache or Both. " +
                                  "Use Jira when there are unknown updates or issues have been exported out of order by id. " +
                                  "Use Cache for speed when you only need to updates. " +
                                  "Using Both starts with Cache and then queries Jira for issue keys " +
                                  "greater than what have been cached per project.")]
            IssueSource?issueListSource = null,
            [Operand(Description = "The keys of the projects to export. If none are specified, all projects are exported")]
            List <string> projects = null)
        {
            if (_jiraApiSettings.JiraOffline &&
                issueListSource.HasValue &&
                issueListSource.Value.HasFlag(IssueSource.Jira))
            {
                throw new ArgumentException(
                          $"--{nameof(issueListSource)} cannot include {nameof(IssueSource.Jira)} " +
                          $"when --{nameof(_jiraApiSettings.JiraOffline)} is specified.");
            }

            if (!_jiraApiSettings.JiraOffline)
            {
                ((CacheJiraApi)_jiraApi).IssueListSource = issueListSource.GetValueOrDefault(IssueSource.Both);
            }

            var projectFilter = new ProjectFilter {
                Projects = projects
            };
            var issueIds = _jiraContext.Api.GetIssueIds(projectFilter, out int totalCount, resumeAfter);

            issueIds.EnumerateOperation(totalCount, "Export Issue", exportOptions.FailFile, _cancellationToken, ExportIssue);
        }
 GetStatusesFromExported(ProjectFilter projectFilter)
 {
     return(_jiraContext.LocalJiraApi
            .GetIssueIds(projectFilter, out _)
            .Select(_migrationRepository.Get)
            .Where(m => m != null)
            .Select(m => (m.IssueId.Project, m.IssueType, m.StatusCategory, m.Status)));
 }
Esempio n. 4
0
        internal static IEnumerable <IssueId> GetIssueIds(this IJiraApi jiraApi,
                                                          ProjectFilter projectFilter, out int totalCount, IssueId resumeAfter = null)
        {
            var projects = projectFilter.Projects;

            projects.Sort();
            totalCount = jiraApi.GetTotalIssueCount(projects, resumeAfter).Result;

            return(projects.SelectMany(p => jiraApi.GetIssueIdsByProject(p, resumeAfter)));
        }
        public void StubIssueTypesMapping(
            ProjectFilter projectFilter,
            [Option(ShortName = "H", LongName = "print-headers")]
            bool printHeaders = false,
            [Option(ShortName = "p", LongName = "print-project")]
            bool printProject = false,
            [Option(ShortName = "t", LongName = "print-issue-type")]
            bool printIssueType = false,
            [Option(ShortName = "d", LongName = "print-description")]
            bool printDescription = false,
            [Option(ShortName = "i", LongName = "print-issue-count")]
            bool printIssueCount = false,
            [Option(ShortName = "x", LongName = "exportedOnly", Description = "When specified, only issue types existing for exported items will be printed")]
            bool exportedOnly = false)
        {
            var somethingIsPrinting = new[] { printProject, printIssueType, printDescription }.Any(p => p);

            if (!somethingIsPrinting)
            {
                _console.Out.WriteLine("Select an element to print: -ptd");
                return;
            }

            string Row(string project, string issueType, string description)
            {
                var row = $"{(printProject ? $"{project}," : null)}" +
                          $"{(printIssueType ? $"{issueType}," : null)}" +
                          $"{(printDescription ? $"{description}," : null)}";

                return(row.Substring(0, row.Length - 1));
            }

            if (printHeaders)
            {
                _console.Out.Write(Row(MappingConstants.FileHeaders.Project, MappingConstants.FileHeaders.IssueType, MappingConstants.FileHeaders.IssueTypeDescription));
                _console.Out.Write(printIssueCount ? $",{MappingConstants.FileHeaders.IssueCount}," : ",");
                _console.Out.WriteLine(MappingConstants.FileHeaders.WorkItemType);
            }

            var issueTypes = exportedOnly
                ? GetIssueTypesFromExported(projectFilter)
                : GetIssueTypesFromMetadata(projectFilter);

            var rows = issueTypes
                       .Select(s => Row(s.project, s.issueType, s.description))
                       .ToLookup(r => r)
                       .OrderBy(r => r.Key);

            foreach (var row in rows)
            {
                _console.Out.Write(row.Key);
                _console.Out.WriteLine(printIssueCount ? $",{row.Count()}," : null);
            }
        }
 private IEnumerable <(string project, string issueType, string description)> GetIssueTypesFromExported(ProjectFilter projectFilter)
 {
     return(_jiraContext.LocalJiraApi
            .GetIssueIds(projectFilter, out _)
            .Select(_migrationRepository.Get)
            .Where(m => m != null)
            .Select(m => (m.IssueId.Project, m.IssueType, "description not available in exported view")));
 }
        private IEnumerable <(string project, string issueType, string description)> GetIssueTypesFromMetadata(ProjectFilter projectFilter)
        {
            var projects = _jiraContext.Api.GetProjects().Result
                           .ToObject <List <Project> >()
                           .Where(p => projectFilter.IncludesProject(p.Key));

            foreach (var project in projects)
            {
                foreach (var type in project.IssueTypes)
                {
                    yield return(project.Key, type.Name, type.Description);
                }
            }
        }