Skip to content

Commit 5471a62

Browse files
JIRA issue tracker will only retrieve issues that are actually fixed (will not include "Won't fix", "Duplicate", etc)
1 parent 57f3904 commit 5471a62

File tree

1 file changed

+28
-3
lines changed

1 file changed

+28
-3
lines changed

src/GitTools.IssueTrackers/IssueTrackers/Jira/JiraIssueTracker.cs

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,11 @@
1111

1212
public class JiraIssueTracker : IIssueTracker
1313
{
14-
private static readonly HashSet<string> KnownClosedStatuses = new HashSet<string>(new[] { "resolved", "closed", "done" });
1514
private static readonly ILog Log = LogProvider.GetCurrentClassLogger();
1615

16+
private static readonly HashSet<string> KnownClosedStatuses = new HashSet<string>(new[] { "resolved", "closed", "done" });
17+
private static readonly HashSet<string> AcceptedResolutions = new HashSet<string>(new[] { "fixed" });
18+
1719
private readonly string _project;
1820
private readonly string _server;
1921
private readonly AuthSettings _authenticationInfo;
@@ -37,11 +39,13 @@ public async Task<IEnumerable<Issue>> GetIssuesAsync(IssueTrackerFilter filter)
3739
Log.Debug("Retrieving statuses");
3840

3941
var statuses = (await jiraRestClient.GetIssueStatusesAsync(CancellationToken.None)).ToList();
42+
var resolutions = (await jiraRestClient.GetIssueResolutionsAsync(CancellationToken.None)).ToList();
4043

4144
var openedStatuses = GetOpenedStatuses(statuses);
4245
var closedStatuses = GetClosedStatuses(statuses);
46+
var acceptedResolutions = GetAcceptedResolutions(resolutions);
4347

44-
var finalFilter = PrepareFilter(filter, openedStatuses, closedStatuses);
48+
var finalFilter = PrepareFilter(filter, openedStatuses, closedStatuses, acceptedResolutions);
4549

4650
var issues = new List<Issue>();
4751

@@ -106,7 +110,23 @@ public async Task<IEnumerable<Issue>> GetIssuesAsync(IssueTrackerFilter filter)
106110
return issues.AsEnumerable();
107111
}
108112

109-
private string PrepareFilter(IssueTrackerFilter filter, IEnumerable<Jira.IssueStatus> openedStatuses, IEnumerable<Jira.IssueStatus> closedStatuses)
113+
private IEnumerable<Jira.IssueResolution> GetAcceptedResolutions(List<Jira.IssueResolution> resolutions)
114+
{
115+
var acceptedResolutions = new List<Jira.IssueResolution>();
116+
117+
foreach (var resolution in resolutions)
118+
{
119+
if (AcceptedResolutions.Contains(resolution.Name.ToLower()))
120+
{
121+
acceptedResolutions.Add(resolution);
122+
}
123+
}
124+
125+
return acceptedResolutions;
126+
}
127+
128+
private string PrepareFilter(IssueTrackerFilter filter, IEnumerable<Jira.IssueStatus> openedStatuses,
129+
IEnumerable<Jira.IssueStatus> closedStatuses, IEnumerable<Jira.IssueResolution> acceptedResolutions)
110130
{
111131
var finalFilter = string.Empty;
112132
if (!string.IsNullOrWhiteSpace(filter.Filter))
@@ -136,6 +156,11 @@ private string PrepareFilter(IssueTrackerFilter filter, IEnumerable<Jira.IssueSt
136156
finalFilter = finalFilter.AddJiraFilter(string.Format("resolutiondate >= '{0}'", filter.Since.Value.ToString("yyyy-MM-dd")));
137157
}
138158

159+
if (acceptedResolutions.Any())
160+
{
161+
finalFilter = finalFilter.AddJiraFilter(string.Format("resolution in ({0})", string.Join(", ", acceptedResolutions.Select(x => string.Format("\"{0}\"", x)))));
162+
}
163+
139164
finalFilter = finalFilter.AddJiraFilter(string.Format("project = {0}", _project));
140165

141166
return finalFilter;

0 commit comments

Comments
 (0)