QualiSystems / FluentTc

:ocean: :two_men_holding_hands: :office: Integrate with TeamCity fluently
https://www.nuget.org/packages/fluenttc
Apache License 2.0
44 stars 35 forks source link

Get Changes by ChangeId and By BuildLocator #112

Open sebingel opened 6 years ago

sebingel commented 6 years ago

Feature Request

Expose a method from which i can get changes from the TeamCity API. Something like IConnectedTc.GetChanges(IChangesHavingBuilder having) Changes are already present but are only accessible from an IBuild. It would be nice to i.e. retrieve changes by the corresponding git commit hash: /app/rest/changes/version:GITHASH or get pending changes for a branch in a buildconfiguration: /app/rest/changes?locator=buildType:(id:BUILDCONFIGID),pending:true,branch:BRANCHNAME


[Test]
public void GetChangesByChangeId()
{
    var changes = new RemoteTc(c=>c.ToHost("HOST").AsGuest())
        .GetChanges(c => c.ChangeId("GITHASH"))
}

[Test]
public void GetChangesByBuildLocator()
{
    var changes = new RemoteTc(c=>c.ToHost("HOST").AsGuest())
        .GetChanges(
            c => c.Build( 
                b => b.BuildConfiguration(
                    t => t.Id("BUILDCONFIGID"))
                .IsPending()
                .OnBranch(b => b.Name("BRANCHNAME"))
        )
    );
}

Affected versions

Product Version
FluentTc 0.0.0.249
TeamCity 2017.2.2 (build 50909)
Autofac
EasyHttp
SharpZipLib
System.IO.Abstractions
TeamCity.ServiceMessages
borismod commented 6 years ago

@sebingel thank you for opening this issue. Does the tests I've added make sense?

sebingel commented 6 years ago

@borismod sort of. Test 1 should be .GetChanges(c => c.Version("GITHASH")). TeamCity API calls the VCS revision Version. Although a .GetChanges(c => c.ChangeId("CHANGEID")) would be nice too.

In Test 2 it looks like you want to get the changes for a certain build. Am i right? The API call /app/rest/changes?locator=buildType:(id:BUILDCONFIGID),pending:true,branch:BRANCHNAME gets changes for a certain buildconfiguration and branch and pending refers to the changes too, not the build.

var changes = new RemoteTc(c=>c.ToHost("HOST").AsGuest())
                .GetChanges(c => c.BuildConfiguration(bc => bc.Id("BUILDCONFIGID"))
                .IsPending().OnBranch("BRANCHNAME"));

I hope that makes some sense.