/// <summary>
        /// Initializes a new instance of the <see cref="GitRepositoryIssuesProvider"/> class.
        /// </summary>
        /// <param name="log">The Cake log context.</param>
        /// <param name="fileSystem">The file system.</param>
        /// <param name="environment">The Cake environment.</param>
        /// <param name="processRunner">The process runner.</param>
        /// <param name="toolLocator">The tool locator.</param>
        /// <param name="issueProviderSettings">Settings for the issue provider.</param>
        public GitRepositoryIssuesProvider(
            ICakeLog log,
            IFileSystem fileSystem,
            ICakeEnvironment environment,
            IProcessRunner processRunner,
            IToolLocator toolLocator,
            GitRepositoryIssuesSettings issueProviderSettings)
            : base(log)
        {
            fileSystem.NotNull(nameof(fileSystem));
            environment.NotNull(nameof(environment));
            processRunner.NotNull(nameof(processRunner));
            toolLocator.NotNull(nameof(toolLocator));
            issueProviderSettings.NotNull(nameof(issueProviderSettings));

            this.IssueProviderSettings = issueProviderSettings;
            this.runner = new GitRunner(fileSystem, environment, processRunner, toolLocator);

            this.allFiles =
                new Lazy <IEnumerable <string> >(
                    new Func <IEnumerable <string> >(
                        () => this.GetAllFilesFromRepository()));
            this.textFiles =
                new Lazy <IEnumerable <string> >(
                    new Func <IEnumerable <string> >(
                        () => this.GetTextFilesFromRepository()));
            this.binaryFiles =
                new Lazy <IEnumerable <string> >(
                    new Func <IEnumerable <string> >(
                        () => this.DetermineBinaryFiles(this.allFiles.Value, this.textFiles.Value)));
        }
        public static IIssueProvider GitRepositoryIssues(
            this ICakeContext context,
            GitRepositoryIssuesSettings settings)
        {
            context.NotNull(nameof(context));
            settings.NotNull(nameof(settings));

            return
                (new GitRepositoryIssuesProvider(
                     context.Log,
                     context.FileSystem,
                     context.Environment,
                     context.ProcessRunner,
                     context.Tools,
                     settings));
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="GitRepositoryIssuesProvider"/> class.
        /// </summary>
        /// <param name="log">The Cake log context.</param>
        /// <param name="fileSystem">The file system.</param>
        /// <param name="environment">The Cake environment.</param>
        /// <param name="processRunner">The process runner.</param>
        /// <param name="toolLocator">The tool locator.</param>
        /// <param name="issueProviderSettings">Settings for the issue provider.</param>
        public GitRepositoryIssuesProvider(
            ICakeLog log,
            IFileSystem fileSystem,
            ICakeEnvironment environment,
            IProcessRunner processRunner,
            IToolLocator toolLocator,
            GitRepositoryIssuesSettings issueProviderSettings)
            : base(log)
        {
            fileSystem.NotNull(nameof(fileSystem));
            environment.NotNull(nameof(environment));
            processRunner.NotNull(nameof(processRunner));
            toolLocator.NotNull(nameof(toolLocator));
            issueProviderSettings.NotNull(nameof(issueProviderSettings));

            this.IssueProviderSettings = issueProviderSettings;
            this.runner = new GitRunner(fileSystem, environment, processRunner, toolLocator);
        }