diff --git a/packages/repositories.config b/packages/repositories.config
index bcd17bb0..3468aa5e 100644
--- a/packages/repositories.config
+++ b/packages/repositories.config
@@ -2,5 +2,6 @@
+
\ No newline at end of file
diff --git a/src/TeamCitySharp/ActionTypes/Builds.cs b/src/TeamCitySharp/ActionTypes/Builds.cs
index 4c52f340..1fe485cf 100644
--- a/src/TeamCitySharp/ActionTypes/Builds.cs
+++ b/src/TeamCitySharp/ActionTypes/Builds.cs
@@ -16,6 +16,13 @@ internal Builds(TeamCityCaller caller)
_caller = caller;
}
+ public Build ByBuildInternalId(string buildInternalId)
+ {
+ var build = _caller.GetFormat("/app/rest/builds/id:{0}", buildInternalId);
+
+ return build;
+ }
+
public List ByBuildLocator(BuildLocator locator)
{
var buildWrapper = _caller.GetFormat("/app/rest/builds?locator={0}", locator);
diff --git a/src/TeamCitySharp/ActionTypes/Changes.cs b/src/TeamCitySharp/ActionTypes/Changes.cs
index 5218b4aa..dd0b6d78 100644
--- a/src/TeamCitySharp/ActionTypes/Changes.cs
+++ b/src/TeamCitySharp/ActionTypes/Changes.cs
@@ -1,4 +1,5 @@
-using System.Collections.Generic;
+using System;
+using System.Collections.Generic;
using System.Linq;
using TeamCitySharp.Connection;
using TeamCitySharp.DomainEntities;
@@ -30,17 +31,23 @@ public Change ByChangeId(string id)
public List ByBuildConfigId(string buildConfigId)
{
- var changeWrapper = _caller.GetFormat("/app/rest/changes?buildType={0}", buildConfigId);
+ var changeWrapper = _caller.GetFormat("/app/rest/changes?buildType=id:{0}", buildConfigId);
return changeWrapper.Change;
}
+ public List ByBuildConfigIdSinceChangeId(string buildConfigId, string sinceChangeId)
+ {
+ var changeWrapper = _caller.GetFormat("/app/rest/changes?buildType=id:{0}&sinceChange=id:{1}", buildConfigId, sinceChangeId);
+
+ return changeWrapper.Change;
+ }
+
public Change LastChangeDetailByBuildConfigId(string buildConfigId)
{
var changes = ByBuildConfigId(buildConfigId);
return changes.FirstOrDefault();
}
-
}
}
\ No newline at end of file
diff --git a/src/TeamCitySharp/ActionTypes/IBuilds.cs b/src/TeamCitySharp/ActionTypes/IBuilds.cs
index 6afba988..0b372e57 100644
--- a/src/TeamCitySharp/ActionTypes/IBuilds.cs
+++ b/src/TeamCitySharp/ActionTypes/IBuilds.cs
@@ -7,6 +7,7 @@ namespace TeamCitySharp.ActionTypes
{
public interface IBuilds
{
+ Build ByBuildInternalId(string buildInternalId);
List SuccessfulBuildsByBuildConfigId(string buildConfigId);
Build LastSuccessfulBuildByBuildConfigId(string buildConfigId);
List FailedBuildsByBuildConfigId(string buildConfigId);
diff --git a/src/TeamCitySharp/ActionTypes/IChanges.cs b/src/TeamCitySharp/ActionTypes/IChanges.cs
index 1ae51cd5..54796afd 100644
--- a/src/TeamCitySharp/ActionTypes/IChanges.cs
+++ b/src/TeamCitySharp/ActionTypes/IChanges.cs
@@ -9,5 +9,6 @@ public interface IChanges
Change ByChangeId(string id);
Change LastChangeDetailByBuildConfigId(string buildConfigId);
List ByBuildConfigId(string buildConfigId);
+ List ByBuildConfigIdSinceChangeId(string buildConfigId, string sinceChangeId);
}
}
\ No newline at end of file
diff --git a/src/TeamCitySharp/DomainEntities/Build.cs b/src/TeamCitySharp/DomainEntities/Build.cs
index 7d16fc34..832f3ad5 100644
--- a/src/TeamCitySharp/DomainEntities/Build.cs
+++ b/src/TeamCitySharp/DomainEntities/Build.cs
@@ -16,7 +16,12 @@ public class Build
public BuildConfig BuildConfig { get; set; }
public Agent Agent { get; set;}
- public ChangeWrapper Changes { get; set; }
+
+ public ChangeWrapper Changes { get; set; }
+ ///
+ /// TeamCity 8.* response to build queries fills changes in LastChanges.
+ ///
+ public ChangeWrapper LastChanges { get; set; }
public override string ToString()
{
diff --git a/src/TeamCitySharp/TeamCitySharp.csproj b/src/TeamCitySharp/TeamCitySharp.csproj
index 2e7df5aa..1a71295e 100644
--- a/src/TeamCitySharp/TeamCitySharp.csproj
+++ b/src/TeamCitySharp/TeamCitySharp.csproj
@@ -42,6 +42,7 @@
+
diff --git a/src/Tests/IntegrationTests/SampleBuildsUsage.cs b/src/Tests/IntegrationTests/SampleBuildsUsage.cs
index 152cad5f..675f0fca 100644
--- a/src/Tests/IntegrationTests/SampleBuildsUsage.cs
+++ b/src/Tests/IntegrationTests/SampleBuildsUsage.cs
@@ -177,6 +177,19 @@ public void it_returns_all_successful_builds_since_date()
Assert.IsNotNull(builds);
}
+ [TestCase("bt5")]
+ public void it_returns_a_build_from_id(string buildConfigId)
+ {
+ var builds = _client.Builds.ByBuildConfigId(buildConfigId);
+
+ Assert.IsTrue(builds.Any(), "There are no builds from config id " + buildConfigId + ". Cannot test retrieving one!");
+
+ var build = _client.Builds.ByBuildInternalId(builds.First().Id);
+
+ Assert.IsNotNull(build, "Did not return with a build!");
+ Assert.IsNotNullOrEmpty(build.Id, "Did not return with a build!");
+ }
+
[Test]
public void it_does_not_populate_the_status_text_field_of_the_build_object()
{
diff --git a/src/Tests/IntegrationTests/SampleChangeUsage.cs b/src/Tests/IntegrationTests/SampleChangeUsage.cs
index fa8eca06..60239790 100644
--- a/src/Tests/IntegrationTests/SampleChangeUsage.cs
+++ b/src/Tests/IntegrationTests/SampleChangeUsage.cs
@@ -74,5 +74,13 @@ public void it_returns_change_details_for_build_config(string buildConfigId)
Assert.That(changeDetails != null, "Cannot find details of that specified change");
}
+
+ [TestCase("bt113", "42843")]
+ public void it_returns_change_details_since_build_id(string buildConfigId, string changeId)
+ {
+ List changes = _client.Changes.ByBuildConfigIdSinceChangeId(buildConfigId, changeId);
+
+ Assert.That(changes.Any(), "Cannot find any changes since the change id specified");
+ }
}
}
\ No newline at end of file
diff --git a/src/Tests/IntegrationTests/TeamCitySharp.IntegrationTests.csproj b/src/Tests/IntegrationTests/TeamCitySharp.IntegrationTests.csproj
index 95e8426c..4326f56f 100644
--- a/src/Tests/IntegrationTests/TeamCitySharp.IntegrationTests.csproj
+++ b/src/Tests/IntegrationTests/TeamCitySharp.IntegrationTests.csproj
@@ -78,6 +78,9 @@
TeamCitySharp
+
+
+