11
11
12
12
public class JiraIssueTracker : IIssueTracker
13
13
{
14
- private static readonly HashSet < string > KnownClosedStatuses = new HashSet < string > ( new [ ] { "resolved" , "closed" , "done" } ) ;
15
14
private static readonly ILog Log = LogProvider . GetCurrentClassLogger ( ) ;
16
15
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
+
17
19
private readonly string _project ;
18
20
private readonly string _server ;
19
21
private readonly AuthSettings _authenticationInfo ;
@@ -37,11 +39,13 @@ public async Task<IEnumerable<Issue>> GetIssuesAsync(IssueTrackerFilter filter)
37
39
Log . Debug ( "Retrieving statuses" ) ;
38
40
39
41
var statuses = ( await jiraRestClient . GetIssueStatusesAsync ( CancellationToken . None ) ) . ToList ( ) ;
42
+ var resolutions = ( await jiraRestClient . GetIssueResolutionsAsync ( CancellationToken . None ) ) . ToList ( ) ;
40
43
41
44
var openedStatuses = GetOpenedStatuses ( statuses ) ;
42
45
var closedStatuses = GetClosedStatuses ( statuses ) ;
46
+ var acceptedResolutions = GetAcceptedResolutions ( resolutions ) ;
43
47
44
- var finalFilter = PrepareFilter ( filter , openedStatuses , closedStatuses ) ;
48
+ var finalFilter = PrepareFilter ( filter , openedStatuses , closedStatuses , acceptedResolutions ) ;
45
49
46
50
var issues = new List < Issue > ( ) ;
47
51
@@ -106,7 +110,23 @@ public async Task<IEnumerable<Issue>> GetIssuesAsync(IssueTrackerFilter filter)
106
110
return issues . AsEnumerable ( ) ;
107
111
}
108
112
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 )
110
130
{
111
131
var finalFilter = string . Empty ;
112
132
if ( ! string . IsNullOrWhiteSpace ( filter . Filter ) )
@@ -136,6 +156,11 @@ private string PrepareFilter(IssueTrackerFilter filter, IEnumerable<Jira.IssueSt
136
156
finalFilter = finalFilter . AddJiraFilter ( string . Format ( "resolutiondate >= '{0}'" , filter . Since . Value . ToString ( "yyyy-MM-dd" ) ) ) ;
137
157
}
138
158
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
+
139
164
finalFilter = finalFilter . AddJiraFilter ( string . Format ( "project = {0}" , _project ) ) ;
140
165
141
166
return finalFilter ;
0 commit comments