Esempio n. 1
0
        public static async IAsyncEnumerable <JsonJiraIssue> GetIssuesAsync(JiraOptions opts)
        {
            var urlFormat    = $"/rest/api/2/search?jql={Uri.EscapeDataString(opts.JqlQuery)}&fields={SearchFields}&startAt={{0}}";
            var startAt      = 0;
            var totalFetched = 0;
            var totalYielded = 0;
            var totalYieldedPaddingLength = 0;

            JsonJiraIssuePage jsonIssuePage;

            do
            {
                var jsonStr = await GetStringAsync(string.Format(urlFormat, startAt), opts);

                jsonIssuePage = JsonConvert.DeserializeObject <JsonJiraIssuePage>(jsonStr);
                startAt      += jsonIssuePage.MaxResults;
                totalFetched += jsonIssuePage.Values.Count;

                if (totalYielded == 0)
                {
                    totalYieldedPaddingLength = jsonIssuePage.Total.ToString().Length;
                }

                foreach (var issue in jsonIssuePage.Values)
                {
                    issue.Changelog = await GetChangelog(issue.Key, opts);

                    yield return(issue);

                    totalYielded++;
                    var totalYieldedPadded = totalYielded.ToString().PadLeft(totalYieldedPaddingLength, '0');
                    opts.Logger($"Fetched issue {totalYieldedPadded}/{jsonIssuePage.Total} named {issue.Key}");
                }
            } while (!jsonIssuePage.IsLast && totalFetched < jsonIssuePage.Total);
        }
Esempio n. 2
0
        public static async Task <List <JsonJiraStatus> > GetStatusesAsync(JiraOptions opts)
        {
            var jsonStr = await GetStringAsync("/rest/api/2/status", opts);

            var jsonVersions = JsonConvert.DeserializeObject <List <JsonJiraStatus> >(jsonStr);

            opts.Logger($"Fetched {jsonVersions.Count} statuses");

            return(jsonVersions);
        }
Esempio n. 3
0
        public static async Task <List <JsonJiraFixVersion> > GetVersionsAsync(JiraOptions opts)
        {
            var jsonStr = await GetStringAsync($"/rest/api/2/project/{opts.JiraProjectKey}/versions", opts);

            var jsonVersions        = JsonConvert.DeserializeObject <List <JsonJiraFixVersion> >(jsonStr);
            var numericJsonVersions = jsonVersions.Where(IsNumericFixVersion).ToList();

            opts.Logger($"Fetched {numericJsonVersions.Count} fix versions for project {opts.JiraProjectKey}");

            return(numericJsonVersions);
        }
Esempio n. 4
0
        public static async Task Write(JiraOptions opts)
        {
            opts.Logger($"Results will be written to {opts.OutputFilePath}");

            try
            {
                await using var fileStream = File.OpenWrite(opts.OutputFilePath);
                using var serializer       = new JiraIssuesWriter(opts, fileStream);

                var issues = await JiraRepository.GetIssuesAsync(opts);

                serializer.Write(issues);
            }
            catch
            {
                QuietlyDeleteCreatedExcelPackage(opts);
                throw;
            }

            opts.Logger($"Done, exported file can be found at {opts.OutputFilePath}");
        }