Skip to content
This repository was archived by the owner on Jun 27, 2019. It is now read-only.

Commit 5a195b1

Browse files
Improved issue trackers implementation and changed Jira.SDK => Atlassian.Jira (has more options out of the box)
1 parent 8c88de1 commit 5a195b1

File tree

11 files changed

+122
-27
lines changed

11 files changed

+122
-27
lines changed

src/GitTools.Core.Tests/GitTools.Core.Tests.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@
3636
<NoWarn>1591;1998</NoWarn>
3737
</PropertyGroup>
3838
<ItemGroup>
39-
<Reference Include="Jira.SDK">
40-
<HintPath>..\..\lib\Jira.SDK.1.1.1.2\lib\net45\Jira.SDK.dll</HintPath>
39+
<Reference Include="Atlassian.Jira, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
40+
<HintPath>..\packages\Atlassian.SDK.2.5.0\lib\Atlassian.Jira.dll</HintPath>
4141
<Private>True</Private>
4242
</Reference>
4343
<Reference Include="nunit.framework, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL">

src/GitTools.Core.Tests/packages.config

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<packages>
3+
<package id="Atlassian.SDK" version="2.5.0" targetFramework="net45" />
34
<package id="Fody" version="1.29.0-beta01" targetFramework="net45" />
4-
<package id="Jira.SDK" version="1.1.1.2" targetFramework="net45" />
55
<package id="ModuleInit.Fody" version="1.5.6.0" targetFramework="net45" developmentDependency="true" />
66
<package id="NUnit" version="2.6.4" targetFramework="net45" />
77
<package id="Shouldly" version="2.5.0" targetFramework="net45" />

src/GitTools.IssueTrackers/FodyWeavers.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<Weavers>
33
<Costura>
44
<IncludeAssemblies>
5-
Jira.SDK
5+
Atlassian.Jira
66
</IncludeAssemblies>
77
</Costura>
88
<JetBrainsAnnotations />

src/GitTools.IssueTrackers/GitTools.IssueTrackers.csproj

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,12 @@
3939
<DocumentationFile>..\..\output\release\NET45\GitTools.IssueTrackers\GitTools.IssueTrackers.XML</DocumentationFile>
4040
</PropertyGroup>
4141
<ItemGroup>
42-
<Reference Include="JetBrains.Annotations">
43-
<HintPath>..\..\lib\JetBrainsAnnotations.Fody.1.0.2\Lib\JetBrains.Annotations.dll</HintPath>
42+
<Reference Include="Atlassian.Jira, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
43+
<HintPath>..\packages\Atlassian.SDK.2.5.0\lib\Atlassian.Jira.dll</HintPath>
4444
<Private>True</Private>
4545
</Reference>
46-
<Reference Include="Jira.SDK">
47-
<HintPath>..\..\lib\Jira.SDK.1.1.1.2\lib\net45\Jira.SDK.dll</HintPath>
46+
<Reference Include="JetBrains.Annotations">
47+
<HintPath>..\..\lib\JetBrainsAnnotations.Fody.1.0.2\Lib\JetBrains.Annotations.dll</HintPath>
4848
<Private>True</Private>
4949
</Reference>
5050
<Reference Include="LibGit2Sharp, Version=0.21.0.176, Culture=neutral, processorArchitecture=MSIL">
@@ -82,7 +82,7 @@
8282
<Compile Include="IssueTrackers\Interfaces\IIssueNumberExtractor.cs" />
8383
<Compile Include="IssueTrackers\Interfaces\IIssueTracker.cs" />
8484
<Compile Include="IssueTrackers\Interfaces\IIssueTrackerFactory.cs" />
85-
<Compile Include="Models\IssueType.cs" />
85+
<Compile Include="Models\Version.cs" />
8686
<Compile Include="ModuleInitializer.cs" />
8787
<Compile Include="Properties\AssemblyInfo.cs" />
8888
</ItemGroup>

src/GitTools.IssueTrackers/IssueTrackers/Interfaces/IIssueTracker.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44

55
public interface IIssueTracker
66
{
7-
IEnumerable<Issue> GetIssues(string filter);
8-
9-
//IEnumerable<OnlineIssue> GetClosedIssues(IIssueTrackerContext context, DateTimeOffset? since);
7+
IEnumerable<Issue> GetIssues(string filter = null, bool includeOpen = true, bool includeClosed = true);
108
}
119
}

src/GitTools.IssueTrackers/IssueTrackers/IssueTrackerBase.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@
44

55
public abstract class IssueTrackerBase : IIssueTracker
66
{
7-
public abstract IEnumerable<Issue> GetIssues(string filter);
7+
public abstract IEnumerable<Issue> GetIssues(string filter = null, bool includeOpen = true, bool includeClosed = true);
88
}
99
}
Lines changed: 90 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,127 @@
11
namespace GitTools.IssueTrackers.Jira
22
{
33
using System.Collections.Generic;
4-
using global::Jira.SDK;
4+
using System.Linq;
5+
using Atlassian.Jira;
56
using Logging;
7+
using Issue = IssueTrackers.Issue;
8+
using IssueType = IssueTrackers.IssueType;
69

710
public class JiraIssueTracker : IssueTrackerBase
811
{
912
private static readonly ILog Log = LogProvider.GetCurrentClassLogger();
1013

14+
private static readonly HashSet<string> KnownClosedStatuses = new HashSet<string>(new [] { "resolved", "closed", "done" });
15+
1116
private readonly IIssueTrackerContext _issueTrackerContext;
1217

1318
public JiraIssueTracker(IIssueTrackerContext issueTrackerContext)
1419
{
1520
_issueTrackerContext = issueTrackerContext;
1621
}
1722

18-
public override IEnumerable<Issue> GetIssues(string filter)
23+
public override IEnumerable<Issue> GetIssues(string filter = null, bool includeOpen = true, bool includeClosed = true)
1924
{
20-
var jira = new Jira();
21-
2225
Log.DebugFormat("Connecting to Jira server '{0}'", _issueTrackerContext.Server);
2326

24-
jira.Connect(_issueTrackerContext.Server, _issueTrackerContext.Authentication.Username, _issueTrackerContext.Authentication.Password);
27+
var jira = new Jira(_issueTrackerContext.Server, _issueTrackerContext.Authentication.Username, _issueTrackerContext.Authentication.Password);
28+
jira.MaxIssuesPerRequest = 200;
29+
30+
Log.Debug("Retrieving statuses");
31+
32+
var openedStatuses = GetOpenedStatuses(jira);
33+
var closedStatuses = GetClosedStatuses(jira);
34+
35+
filter = PrepareFilter(filter, openedStatuses, closedStatuses, includeOpen, includeClosed);
2536

2637
var issues = new List<Issue>();
2738

28-
foreach (var issue in jira.SearchIssues(filter))
39+
Log.DebugFormat("Searching for issues using filter '{0}'", filter);
40+
41+
foreach (var issue in jira.GetIssuesFromJql(filter))
2942
{
30-
var gitIssue = new Issue(issue.Key)
43+
var gitIssue = new Issue(issue.Key.Value)
3144
{
3245
IssueType = IssueType.Issue,
3346
Title = issue.Summary,
34-
Description = issue.Description
47+
Description = issue.Description,
48+
DateCreated = issue.Created
3549
};
3650

51+
if (closedStatuses.Any(x => string.Equals(x.Id, issue.Status.Id)))
52+
{
53+
gitIssue.DateClosed = issue.GetResolutionDate();
54+
}
55+
56+
foreach (var fixVersion in issue.FixVersions)
57+
{
58+
gitIssue.FixVersions.Add(new Version
59+
{
60+
Value = fixVersion.Name,
61+
ReleaseDate = fixVersion.ReleasedDate,
62+
IsReleased = fixVersion.IsReleased
63+
});
64+
}
65+
3766
issues.Add(gitIssue);
3867
}
3968

4069
Log.DebugFormat("Found '{0}' issues using filter '{1}'", issues.Count, filter);
4170

4271
return issues;
4372
}
73+
74+
private string PrepareFilter(string filter, IEnumerable<IssueStatus> openedStatuses, IEnumerable<IssueStatus> closedStatuses,
75+
bool includeOpen = true, bool includeClosed = true)
76+
{
77+
if (string.IsNullOrWhiteSpace(filter))
78+
{
79+
filter = "";
80+
}
81+
else
82+
{
83+
filter += " AND ";
84+
}
85+
86+
if (includeOpen && includeClosed)
87+
{
88+
// no need to filter anything
89+
}
90+
91+
if (!includeOpen && !includeClosed)
92+
{
93+
throw new GitToolsException("Cannot exclude both open and closed issues, nothing will be returned");
94+
}
95+
96+
if (includeOpen)
97+
{
98+
filter += string.Format("status in ({0})", string.Join(", ", openedStatuses.Select(x => string.Format("\"{0}\"", x))));
99+
}
100+
101+
if (includeClosed)
102+
{
103+
filter += string.Format("status in ({0})", string.Join(", ", closedStatuses.Select(x => string.Format("\"{0}\"", x))));
104+
}
105+
106+
return filter;
107+
}
108+
109+
private List<IssueStatus> GetOpenedStatuses(Jira jira)
110+
{
111+
var issueStatuses = jira.GetIssueStatuses().ToList();
112+
113+
return (from issueStatus in issueStatuses
114+
where !KnownClosedStatuses.Contains(issueStatus.Name.ToLower())
115+
select issueStatus).ToList();
116+
}
117+
118+
private List<IssueStatus> GetClosedStatuses(Jira jira)
119+
{
120+
var issueStatuses = jira.GetIssueStatuses().ToList();
121+
122+
return (from issueStatus in issueStatuses
123+
where KnownClosedStatuses.Contains(issueStatus.Name.ToLower())
124+
select issueStatus).ToList();
125+
}
44126
}
45127
}

src/GitTools.IssueTrackers/Models/Issue.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,22 @@
11
namespace GitTools.IssueTrackers
22
{
33
using System;
4+
using System.Collections.Generic;
45

56
public class Issue
67
{
78
public Issue(string id)
89
{
910
Id = id;
11+
12+
FixVersions = new List<Version>();
1013
}
1114

1215
public string Id { get; private set; }
1316

14-
public DateTimeOffset DateClosed { get; set; }
17+
public DateTimeOffset? DateCreated { get; set; }
18+
19+
public DateTimeOffset? DateClosed { get; set; }
1520

1621
public string Title { get; set; }
1722

@@ -23,6 +28,7 @@ public Issue(string id)
2328

2429
public string Url { get; set; }
2530

31+
public List<Version> FixVersions { get; private set; }
2632

2733
//public Uri HtmlUrl { get; set; }
2834

src/GitTools.IssueTrackers/Models/IssueType.cs

Lines changed: 0 additions & 4 deletions
This file was deleted.
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
namespace GitTools.IssueTrackers
2+
{
3+
using System;
4+
5+
public class Version
6+
{
7+
public string Value { get; set; }
8+
9+
public DateTimeOffset? ReleaseDate { get; set; }
10+
11+
public bool IsReleased { get; set; }
12+
}
13+
}

src/GitTools.IssueTrackers/packages.config

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<packages>
3+
<package id="Atlassian.SDK" version="2.5.0" targetFramework="net45" />
34
<package id="Costura.Fody" version="1.3.3.0" targetFramework="net45" />
45
<package id="Fody" version="1.29.0-beta01" targetFramework="net45" />
56
<package id="JetBrainsAnnotations.Fody" version="1.0.2" targetFramework="net45" />
6-
<package id="Jira.SDK" version="1.1.1.2" targetFramework="net45" />
77
<package id="LibGit2Sharp" version="0.21.0.176" targetFramework="net45" />
88
<package id="LibLog" version="4.2.3" targetFramework="net45" />
99
<package id="MethodTimer.Fody" version="1.15.3.0" targetFramework="net45" />

0 commit comments

Comments
 (0)