/// <summary> /// Creates a new instance of the <see cref="IssuesState"/> class. /// </summary> /// <param name="context">The Cake context.</param> /// <param name="repositoryInfoProviderType">Defines how information about the Git repository should be determined.</param> public IssuesState( IssuesContext context, RepositoryInfoProviderType repositoryInfoProviderType) { if (context == null) { throw new ArgumentNullException(nameof(context)); } this.BuildRootDirectory = context.MakeAbsolute(context.Directory("./")); context.Information("Build script root directory: {0}", this.BuildRootDirectory); this.ProjectRootDirectory = this.BuildRootDirectory.Combine("..").Collapse(); context.Information("Project root directory: {0}", this.ProjectRootDirectory); this.RepositoryInfo = DetermineRepositoryInfoProvider(context, repositoryInfoProviderType); this.RepositoryRootDirectory = this.RepositoryInfo.GetRepositoryRootDirectory(context, this.BuildRootDirectory); context.Information("Repository root directory: {0}", this.RepositoryRootDirectory); this.BuildServer = DetermineBuildServer(context); if (this.BuildServer != null) { this.RepositoryRemoteUrl = BuildServer.DetermineRepositoryRemoteUrl(context, this.RepositoryRootDirectory); context.Information("Repository remote URL: {0}", this.RepositoryRemoteUrl); this.CommitId = BuildServer.DetermineCommitId(context, this.RepositoryRootDirectory); context.Information("CommitId: {0}", this.CommitId); this.PullRequestSystem = DeterminePullRequestSystem( context, this.RepositoryRemoteUrl); } }