public List <ReleaseCommit> GetReleaseMergeCommits(string repositoryGuid) { const string regexPattern = "^Merge branch 'release/(?<version>[a-zA-z0-9\\.\\-_]+)'$"; List <ReleaseCommit> releaseCommits = new List <ReleaseCommit>(); var start = MinDate; var commits = GetBranchCommits(repositoryGuid, "master"); foreach (var item in commits.items) { var match = Regex.Match(item.comment, regexPattern); if (match.Success) { var release = new ReleaseCommit(item, match.Groups["version"].Value, start, item.committer.date); releaseCommits.Add(release); start = release.end; } } return(releaseCommits); }
public List <ReleaseDetails> GetReleaseDetails(string projectName, string repositoryGuid) { List <ReleaseDetails> releases = new List <ReleaseDetails>(); var commits = GetReleaseMergeCommits(repositoryGuid); var start = commits.Max(x => x.end); var end = DateTime.Now; var futureRelease = new ReleaseCommit(new Commit { }, "Future", start, end); commits.Add(futureRelease); commits.Reverse(); foreach (var item in commits) { var release = new ReleaseDetails { commit = item, workItems = GetClosedWorkItems(projectName, item.start, item.end), workItemDetails = new List <WorkItemDetails>() }; var result = Parallel.ForEach(release.workItems, new ParallelOptions { MaxDegreeOfParallelism = 5 }, x => release.workItemDetails.Add(GetWorkItem(x.url))); releases.Add(release); } // Revert back to descending order releases.Reverse(); return(releases); }