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

Added branch name to Build entity for VCS configurations where git is us... #79

Open
wants to merge 29 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
4620e02
Changed Json encoder to use lowercase
nheilbuth Jan 7, 2014
cebb925
Changed Post<T> method to accept object as data, to utilize jsonEncoder
nheilbuth Jan 7, 2014
1984470
Changed Projects.Create method to use Json and NewProjectDescription
nheilbuth Jan 7, 2014
4eb1f06
Added NewProjectDescription and added Project.Create with parent project
nheilbuth Jan 7, 2014
787670d
Changed ParentProjectWrapper to produce correct Json data
nheilbuth Jan 7, 2014
a64c02b
Changed lowercase serialization to camelcase
nheilbuth Jan 7, 2014
a1b41a2
Added GenerateId from mavezeau's pull request #60
nheilbuth Jan 7, 2014
2b61a16
Added options to include/not include disconnected and unauthorized ag…
nheilbuth Jan 10, 2014
2ccd8da
Added Build.ById method
nheilbuth Jan 10, 2014
df6796f
Changed post and put to use data object instead of data.ToString
nheilbuth Feb 3, 2014
bdbc64a
Added direct support for setting artifact dependencies, snapshot depe…
nheilbuth Feb 25, 2014
a46360c
Adjustments to json output of artifactdependencies, snapshotdependenc…
nheilbuth Feb 25, 2014
cb472de
Added branch name to Build entity for VCS configurations where git is…
Jul 14, 2014
25b5775
Add system.web reference to fix compilation.
derekgates Aug 12, 2014
3de747a
Adding ByBuildConfigIdSinceChangeId()
derekgates Aug 12, 2014
1c0aa25
Correct call to changes endpoint with correct buildType id parameter.
derekgates Aug 13, 2014
4e1460f
Allow querying of build by Internal ID.
derekgates Aug 13, 2014
db6bbfe
Add LastChanges to Build wrapper; TC 8.* returns changes in LastChanges
derekgates Aug 13, 2014
5d8d7f8
Pin a Build by BuildConfigId and Build Number
patrick92 Sep 2, 2014
8d82b42
Fixing issue #68
jbosse Sep 8, 2014
c9ee608
fixed missing reference to System.Web
GordonBeeming Oct 10, 2014
b09a91d
Added support to copy configuration
GordonBeeming Oct 17, 2014
c035887
returning Id when creating cofiguration copy
GordonBeeming Oct 20, 2014
07ba52f
Merge branch 'master' of https://github.com/nheilbuth/TeamCitySharp
stecydube Nov 4, 2014
9f7e409
Merge branch 'master' of https://github.com/derekgates/TeamCitySharp
stecydube Nov 4, 2014
cd492a0
Merge branch 'master' of https://github.com/jbosse/TeamCitySharp
stecydube Nov 4, 2014
191281d
Merge branch 'master' of https://github.com/patrick92/TeamCitySharp
stecydube Nov 4, 2014
09a89b0
Merge branch 'master' of https://github.com/abbottdev/TeamCitySharp
stecydube Nov 4, 2014
3c27c99
Updated solution to VS2013
stecydube Nov 4, 2014
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,5 @@ output
*.TeamCitySharp.sln.metaproj*
*.DotSettings.*
nuget
Package
Package
/TeamCitySharp.sln.ide
4 changes: 3 additions & 1 deletion TeamCitySharp.sln
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012
# Visual Studio 2013
VisualStudioVersion = 12.0.30723.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{263F35DD-20C1-4209-B121-E962C9328C70}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TeamCitySharp.IntegrationTests", "src\Tests\IntegrationTests\TeamCitySharp.IntegrationTests.csproj", "{BA409A09-CC7B-4A71-A3D4-FE27234A721B}"
Expand Down
Binary file removed packages/EasyHttp.1.6.1.0/EasyHttp.1.6.1.0.nupkg
Binary file not shown.
Binary file removed packages/EasyHttp.1.6.1.0/lib/net40/EasyHttp.dll
Binary file not shown.
Binary file removed packages/EasyHttp.1.6.1.0/lib/sl40-wp/EasyHttp.dll
Binary file not shown.
Binary file removed packages/EasyHttp.1.6.1.0/lib/sl40/EasyHttp.dll
Binary file not shown.
Binary file not shown.
Binary file added packages/EasyHttp.1.6.67.0/lib/net40/EasyHttp.dll
Binary file not shown.
Binary file added packages/EasyHttp.1.6.67.0/lib/net40/EasyHttp.pdb
Binary file not shown.
2 changes: 1 addition & 1 deletion packages/repositories.config
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<repositories>
<repository path="..\src\Samples\TeamCitySharp.BuildMonitor\packages.config" />
<repository path="..\src\TeamCitySharp\packages.config" />
<repository path="..\src\Tests\IntegrationTests\packages.config" />
<repository path="..\src\Tests\UnitTests\packages.config" />
</repositories>
20 changes: 18 additions & 2 deletions src/TeamCitySharp/ActionTypes/Agents.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.IO;
using TeamCitySharp.Connection;
using TeamCitySharp.DomainEntities;

Expand All @@ -13,11 +14,26 @@ internal Agents(TeamCityCaller caller)
_caller = caller;
}

public List<Agent> All()
public List<Agent> All(bool includeDisconnected = true, bool includeUnauthorized = true)
{
var agentWrapper = _caller.Get<AgentWrapper>("/app/rest/agents");
var url = string.Format("/app/rest/agents?includeDisconnected={0}&includeUnauthorized={1}",
includeDisconnected.ToString().ToLower(), includeUnauthorized.ToString().ToLower());

var agentWrapper = _caller.Get<AgentWrapper>(url);

return agentWrapper.Agent;
}

private string AddqueryString(string url, string queryString)
{
if (url.Contains("?"))
url += "&";
else
url += "?";

url += queryString;

return url;
}
}
}
24 changes: 24 additions & 0 deletions src/TeamCitySharp/ActionTypes/BuildConfigs.cs
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,24 @@ public void PostRawBuildTrigger(BuildTypeLocator locator, string rawXml)
_caller.PostFormat(rawXml, HttpContentTypes.ApplicationXml, "/app/rest/buildTypes/{0}/triggers", locator);
}

public void SetArtifactDependency(BuildTypeLocator locator, ArtifactDependency dependency)
{
_caller.PostFormat<ArtifactDependency>(dependency, HttpContentTypes.ApplicationJson,
HttpContentTypes.ApplicationJson, "/app/rest/buildTypes/{0}/artifact-dependencies", locator);
}

public void SetSnapshotDependency(BuildTypeLocator locator, SnapshotDependency dependency)
{
_caller.PostFormat<SnapshotDependency>(dependency, HttpContentTypes.ApplicationJson,
HttpContentTypes.ApplicationJson, "/app/rest/buildTypes/{0}/snapshot-dependencies", locator);
}

public void SetTrigger(BuildTypeLocator locator, BuildTrigger trigger)
{
_caller.PostFormat<BuildTrigger>(trigger, HttpContentTypes.ApplicationJson, HttpContentTypes.ApplicationJson,
"/app/rest/buildTypes/{0}/triggers", locator);
}

public void SetConfigurationParameter(BuildTypeLocator locator, string key, string value)
{
_caller.PutFormat(value, HttpContentTypes.TextPlain, "/app/rest/buildTypes/{0}/parameters/{1}", locator, key);
Expand Down Expand Up @@ -209,5 +227,11 @@ public BuildConfig BuildType(BuildTypeLocator locator)

return build;
}

public string CopyConfiguration(BuildTypeLocator projectLocator, BuildTypeLocator locatorToCopy, string newName)
{
_caller.PostFormat(string.Format("<newBuildTypeDescription name='{0}' sourceBuildTypeLocator='{1}' copyAllAssociatedSettings='true' shareVCSRoots='false'/>", newName, locatorToCopy), HttpContentTypes.ApplicationXml, "/app/rest/projects/{0}/buildTypes", projectLocator);
return ByConfigurationName(newName).Id;
}
}
}
20 changes: 20 additions & 0 deletions src/TeamCitySharp/ActionTypes/Builds.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,13 @@ internal Builds(TeamCityCaller caller)
_caller = caller;
}

public Build ByBuildInternalId(string buildInternalId)
{
var build = _caller.GetFormat<Build>("/app/rest/builds/id:{0}", buildInternalId);

return build;
}

public List<Build> ByBuildLocator(BuildLocator locator)
{
var buildWrapper = _caller.GetFormat<BuildWrapper>("/app/rest/builds?locator={0}", locator);
Expand Down Expand Up @@ -95,6 +102,13 @@ public Build LastErrorBuildByBuildConfigId(string buildConfigId)
return builds != null ? builds.FirstOrDefault() : new Build();
}

public Build ById(string id)
{
var build = _caller.GetFormat<Build>("/app/rest/builds/id:{0}", id);

return build ?? new Build();
}

public List<Build> ByBuildConfigId(string buildConfigId)
{
return ByBuildLocator(BuildLocator.WithDimensions(BuildTypeLocator.WithId(buildConfigId)
Expand Down Expand Up @@ -145,5 +159,11 @@ public List<Build> NonSuccessfulBuildsForUser(string userName)

return builds.Where(b => b.Status != "SUCCESS").ToList();
}

public void PinBuildByBuildNumber(string buildConfigId, string buildNumber, string message)
{
message = message == null ? string.Empty : message;
_caller.Put(message, "text/plain", string.Format("/app/rest/builds/buildType:{0},number:{1}/{2}/", buildConfigId, buildNumber, "pin"), null);
}
}
}
13 changes: 10 additions & 3 deletions src/TeamCitySharp/ActionTypes/Changes.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System.Collections.Generic;
using System;
using System.Collections.Generic;
using System.Linq;
using TeamCitySharp.Connection;
using TeamCitySharp.DomainEntities;
Expand Down Expand Up @@ -30,17 +31,23 @@ public Change ByChangeId(string id)

public List<Change> ByBuildConfigId(string buildConfigId)
{
var changeWrapper = _caller.GetFormat<ChangeWrapper>("/app/rest/changes?buildType={0}", buildConfigId);
var changeWrapper = _caller.GetFormat<ChangeWrapper>("/app/rest/changes?buildType=id:{0}", buildConfigId);

return changeWrapper.Change;
}

public List<Change> ByBuildConfigIdSinceChangeId(string buildConfigId, string sinceChangeId)
{
var changeWrapper = _caller.GetFormat<ChangeWrapper>("/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();
}

}
}
2 changes: 1 addition & 1 deletion src/TeamCitySharp/ActionTypes/IAgents.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@ namespace TeamCitySharp.ActionTypes
{
public interface IAgents
{
List<Agent> All();
List<Agent> All(bool includeDisconnected = false, bool includeUnauthorized = false);
}
}
9 changes: 9 additions & 0 deletions src/TeamCitySharp/ActionTypes/IBuildConfigs.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,15 @@ public interface IBuildConfigs
void SetConfigurationSetting(BuildTypeLocator locator, string settingName, string settingValue);
bool GetConfigurationPauseStatus(BuildTypeLocator locator);
void SetConfigurationPauseStatus(BuildTypeLocator locator, bool isPaused);

void PostRawArtifactDependency(BuildTypeLocator locator, string rawXml);
void SetArtifactDependency(BuildTypeLocator locator, ArtifactDependency dependency);

void PostRawBuildStep(BuildTypeLocator locator, string rawXml);

void PostRawBuildTrigger(BuildTypeLocator locator, string rawXml);
void SetTrigger(BuildTypeLocator locator, BuildTrigger trigger);

void SetConfigurationParameter(BuildTypeLocator locator, string key, string value);
void PostRawAgentRequirement(BuildTypeLocator locator, string rawXml);
void DeleteBuildStep(BuildTypeLocator locator, string buildStepId);
Expand All @@ -33,6 +39,8 @@ public interface IBuildConfigs
void DeleteParameter(BuildTypeLocator locator, string parameterName);
void DeleteBuildTrigger(BuildTypeLocator locator, string buildTriggerId);

string CopyConfiguration(BuildTypeLocator locatorToCopy, BuildTypeLocator locator, string newName);

/// <summary>
/// Makes a build type inherit a template.
/// </summary>
Expand Down Expand Up @@ -62,6 +70,7 @@ public interface IBuildConfigs
/// ]]></code>
/// </summary>
void PostRawSnapshotDependency(BuildTypeLocator locator, XmlElement rawXml);
void SetSnapshotDependency(BuildTypeLocator locator, SnapshotDependency dependency);

/// <summary>
/// <para>Locates a build type by its locator.</para>
Expand Down
3 changes: 3 additions & 0 deletions src/TeamCitySharp/ActionTypes/IBuilds.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,15 @@ namespace TeamCitySharp.ActionTypes
{
public interface IBuilds
{
Build ByBuildInternalId(string buildInternalId);
List<Build> SuccessfulBuildsByBuildConfigId(string buildConfigId);
Build LastSuccessfulBuildByBuildConfigId(string buildConfigId);
List<Build> FailedBuildsByBuildConfigId(string buildConfigId);
Build LastFailedBuildByBuildConfigId(string buildConfigId);
Build LastBuildByBuildConfigId(string buildConfigId);
List<Build> ErrorBuildsByBuildConfigId(string buildConfigId);
Build LastErrorBuildByBuildConfigId(string buildConfigId);
Build ById(string id);
List<Build> ByBuildConfigId(string buildConfigId);
List<Build> ByConfigIdAndTag(string buildConfigId, string tag);
List<Build> ByUserName(string userName);
Expand All @@ -24,5 +26,6 @@ public interface IBuilds
List<Build> ByBranch(string branchName);
Build LastBuildByAgent(string agentName);
void Add2QueueBuildByBuildConfigId(string buildConfigId);
void PinBuildByBuildNumber(string buildConfigId, string buildNumber, string message);
}
}
1 change: 1 addition & 0 deletions src/TeamCitySharp/ActionTypes/IChanges.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,6 @@ public interface IChanges
Change ByChangeId(string id);
Change LastChangeDetailByBuildConfigId(string buildConfigId);
List<Change> ByBuildConfigId(string buildConfigId);
List<Change> ByBuildConfigIdSinceChangeId(string buildConfigId, string sinceChangeId);
}
}
2 changes: 1 addition & 1 deletion src/TeamCitySharp/Connection/ITeamCityCaller.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ internal interface ITeamCityCaller

void Get(string urlPart);

T Post<T>(string data, string contenttype, string urlPart, string accept);
T Post<T>(object data, string contenttype, string urlPart, string accept);

bool Authenticate(string urlPart);

Expand Down
8 changes: 4 additions & 4 deletions src/TeamCitySharp/Connection/TeamCityCaller.cs
Original file line number Diff line number Diff line change
Expand Up @@ -42,17 +42,17 @@ public void GetFormat(string urlPart, params object[] parts)

public T PostFormat<T>(object data, string contenttype, string accept, string urlPart, params object[] parts)
{
return Post<T>(data.ToString(), contenttype, string.Format(urlPart, parts), accept);
return Post<T>(data, contenttype, string.Format(urlPart, parts), accept);
}

public void PostFormat(object data, string contenttype, string urlPart, params object[] parts)
{
Post(data.ToString(), contenttype, string.Format(urlPart, parts), string.Empty);
Post(data, contenttype, string.Format(urlPart, parts), string.Empty);
}

public void PutFormat(object data, string contenttype, string urlPart, params object[] parts)
{
Put(data.ToString(), contenttype, string.Format(urlPart, parts), string.Empty);
Put(data, contenttype, string.Format(urlPart, parts), string.Empty);
}

public void DeleteFormat(string urlPart, params object[] parts)
Expand Down Expand Up @@ -144,7 +144,7 @@ private HttpResponse GetResponse(string urlPart)
return response;
}

public T Post<T>(string data, string contenttype, string urlPart, string accept)
public T Post<T>(object data, string contenttype, string urlPart, string accept)
{
return Post(data, contenttype, urlPart, accept).StaticBody<T>();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,26 +1,30 @@
using System.Collections.Generic;
using System.IO;
using EasyHttp.Codecs;
using EasyHttp.Codecs.JsonFXExtensions;
using EasyHttp.Configuration;
using JsonFx.IO;
using JsonFx.Json;
using JsonFx.Model;
using JsonFx.Serialization;
using JsonFx.Serialization.Filters;

namespace TeamCitySharp.Connection
{
public class TeamcityJsonEncoderDecoderConfiguration : IEncoderDecoderConfiguration
{
public IEncoder GetEncoder()
{
var jsonWriter = new JsonWriter(new DataWriterSettings(DefaultEncoderDecoderConfiguration.CombinedResolverStrategy()
var jsonWriter = new CamelCaseJsonWriter(new DataWriterSettings(DefaultEncoderDecoderConfiguration.CombinedResolverStrategy()
, new TeamCityDateFilter()), new[] { "application/.*json", "text/.*json" });

var writers = new List<IDataWriter> { jsonWriter };
var dataWriterProvider = new RegExBasedDataWriterProvider(new List<IDataWriter> { jsonWriter });
return new DefaultEncoder(dataWriterProvider);
}

public IDecoder GetDecoder()
{
public IDecoder GetDecoder(bool shouldRemoveAtSign = true)
{
var jsonReader = new JsonReader(new DataReaderSettings(DefaultEncoderDecoderConfiguration.CombinedResolverStrategy()
, new TeamCityDateFilter()), new[] { "application/.*json", "text/.*json" });

Expand All @@ -29,4 +33,39 @@ public IDecoder GetDecoder()
return new DefaultDecoder(dataReaderProvider);
}
}

public class CamelCaseJsonWriter : JsonWriter
{
public CamelCaseJsonWriter(DataWriterSettings settings, params string[] contentTypes)
: base(settings, contentTypes)
{}

protected override ITextFormatter<ModelTokenType> GetFormatter()
{
return new CamelCaseJsonFormatter(this.Settings);
}
}

public class CamelCaseJsonFormatter : JsonWriter.JsonFormatter
{
public CamelCaseJsonFormatter(DataWriterSettings settings)
: base(settings)
{}

protected override void WritePropertyName(TextWriter writer, string propertyName)
{
base.WritePropertyName(writer, CamelCase(propertyName));
}

private static string CamelCase(string input)
{
if (string.IsNullOrEmpty(input))
return input;

var chars = input.ToCharArray();
chars[0] = chars[0].ToString().ToLower().ToCharArray()[0];

return new string(chars);
}
}
}
19 changes: 18 additions & 1 deletion src/TeamCitySharp/DomainEntities/AgentRequirements.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.Web;

namespace TeamCitySharp.DomainEntities
{
Expand All @@ -9,6 +10,22 @@ public override string ToString()
return "agent-requirements";
}

public List<AgentRequirement> AgentRequirement { get; set; }
public List<AgentRequirement> AgentRequirement { get; set; }

public string GetAsXml()
{
if (AgentRequirement == null)
return "<agent-requirements/>";
string result = string.Empty;
result += "<agent-requirements>";
foreach (var item in AgentRequirement)
{
result += "<agent_requirement id=\"" + item.Id + "\" type=\"" + item.Type + "\">";
result += item.Properties.GetAsXml();
result += "</agent_requirement>";
}
result += "</agent-requirements>";
return result;
}
}
}
Loading