Skip to content

Commit

Permalink
Find integral issue numbers for issues in releases
Browse files Browse the repository at this point in the history
  • Loading branch information
blairconrad committed Oct 13, 2019
1 parent 62376d8 commit 41e2f8c
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 11 deletions.
6 changes: 3 additions & 3 deletions tools/FakeItEasy.Deploy/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -65,10 +65,10 @@ public static async Task Main(string[] args)
await UploadPackageToNuGetAsync(file, nugetServerUrl, nugetApiKey);
}

var issuesInCurrentRelease = GetIssuesReferencedFromReleases(new[] { release });
var issueNumbersInCurrentRelease = GetIssueNumbersReferencedFromReleases(new[] { release });
var preReleases = GetPreReleasesContributingToThisRelease(release, releases);
var issuesInPreReleases = GetIssuesReferencedFromReleases(preReleases);
var newIssueNumbers = issuesInCurrentRelease.Except(issuesInPreReleases).Select(s => Int32.Parse(s));
var issueNumbersInPreReleases = GetIssueNumbersReferencedFromReleases(preReleases);
var newIssueNumbers = issueNumbersInCurrentRelease.Except(issueNumbersInPreReleases);

Console.WriteLine($"Adding 'released as part of' notes to {newIssueNumbers.Count()} issues");
var commentText = $"This change has been released as part of [{repoName} {releaseName}](https://github.com/{repoOwner}/{repoName}/releases/tag/{releaseName}).";
Expand Down
10 changes: 5 additions & 5 deletions tools/FakeItEasy.PrepareRelease/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,9 @@ public static async Task Main(string[] args)

var nonReleaseIssuesInMilestone = ExcludeReleaseIssues(issuesInExistingMilestone, releasesForExistingMilestone);

var issuesReferencedFromReleases = GetIssuesReferencedFromReleases(releasesForExistingMilestone);
var issueNumbersReferencedFromReleases = GetIssueNumbersReferencedFromReleases(releasesForExistingMilestone);

if (!CrossReferenceIssues(nonReleaseIssuesInMilestone, issuesReferencedFromReleases))
if (!CrossReferenceIssues(nonReleaseIssuesInMilestone, issueNumbersReferencedFromReleases))
{
return;
}
Expand Down Expand Up @@ -115,11 +115,11 @@ private static IList<Issue> ExcludeReleaseIssues(IList<Issue> issues, IEnumerabl
return issues.Where(issue => releases.All(release => $"Release {release.Name}" != issue.Title)).ToList();
}

private static bool CrossReferenceIssues(ICollection<Issue> issuesInMilestone, ICollection<string> issueNumbersReferencedFromRelease)
private static bool CrossReferenceIssues(ICollection<Issue> issuesInMilestone, ICollection<int> issueNumbersReferencedFromRelease)
{
var issueNumbersInMilestone = issuesInMilestone.Select(i => i.Number.ToString());
var issueNumbersInMilestone = issuesInMilestone.Select(i => i.Number);
var issueNumbersInReleaseButNotMilestone = issueNumbersReferencedFromRelease.Except(issueNumbersInMilestone).ToList();
var issuesInMilestoneButNotRelease = issuesInMilestone.Where(i => !issueNumbersReferencedFromRelease.Contains(i.Number.ToString())).ToList();
var issuesInMilestoneButNotRelease = issuesInMilestone.Where(i => !issueNumbersReferencedFromRelease.Contains(i.Number)).ToList();

if (!issuesInMilestoneButNotRelease.Any() && !issueNumbersInReleaseButNotMilestone.Any())
{
Expand Down
7 changes: 4 additions & 3 deletions tools/ReleaseHelpers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,26 +2,27 @@ namespace FakeItEasy.Tools
{
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Text.RegularExpressions;
using Octokit;

public static class ReleaseHelpers
{
public static ICollection<string> GetIssuesReferencedFromReleases(IEnumerable<Release> releases)
public static ICollection<int> GetIssueNumbersReferencedFromReleases(IEnumerable<Release> releases)
{
// Release bodies should contain references to fixed issues in the form
// (#1234), or (#1234, #1235, #1236) if multiple issues apply to a topic.
// It's hard (impossible?) to harvest values from a repeated capture group,
// so grab everything between the ()s and split manually.
var issuesReferencedFromRelease = new HashSet<string>();
var issuesReferencedFromRelease = new HashSet<int>();
foreach (var release in releases)
{
foreach (Match match in Regex.Matches(release.Body, @"\((?<issueNumbers>#[0-9]+((, )#[0-9]+)*)\)"))
{
var issueNumbers = match.Groups["issueNumbers"].Value;
foreach (var issueNumber in issueNumbers.Split(new[] { '#', ' ', ',' }, StringSplitOptions.RemoveEmptyEntries))
{
issuesReferencedFromRelease.Add(issueNumber);
issuesReferencedFromRelease.Add(int.Parse(issueNumber, NumberStyles.Integer, NumberFormatInfo.InvariantInfo));
}
}
}
Expand Down

0 comments on commit 41e2f8c

Please sign in to comment.