コード例 #1
0
        /// <summary>
        ///     Gets commits for the repository and branch
        /// </summary>
        /// <param name="repositoryName"></param>
        /// <param name="branchName"></param>
        /// <param name="skip"></param>
        /// <param name="top"></param>
        /// <returns></returns>
        public IEnumerable <GitCommitRef> GetCommits(
            string repositoryName,
            string branchName,
            int?skip = null,
            int?top  = null)
        {
            Logger.Trace("Entering");

            var repositoryId = GetRepositoryId(repositoryName);

            var info = $"{nameof(repositoryName)}: {repositoryName}";

            var searchCriteria = new GitQueryCommitsCriteria
            {
                ItemVersion = new GitVersionDescriptor
                {
                    VersionType = GitVersionType.Branch,
                    Version     = branchName
                }
            };

            var result =
                WaitAndRetryPolicyAsync.ExecuteAndCaptureAsync(
                    _ =>
                    _client.Value.GetCommitsAsync(_vsTsTool.ProjectName, repositoryId, searchCriteria, skip, top),
                    MakeContext(info)).Result;

            HandlePolicyResult(result, info);

            var output = result.Result;

            Logger.Trace("Exiting");

            return(output);
        }
コード例 #2
0
        // todo Make a version of this for searching?
        /// <inheritdoc />
        public IEnumerable <GitItem> GetItems(SourceInformation searchInformation)
        {
            Validators.AssertIsNotNull(searchInformation, nameof(searchInformation));
            searchInformation.AssertIsValid();

            Logger.Trace("Entering");

            var info = $"{nameof(searchInformation)}: {searchInformation}";

            var result =
                WaitAndRetryPolicyAsync.ExecuteAndCaptureAsync(
                    _ => _client.Value.GetItemsAsync(
                        includeContentMetadata: true,
                        project: _vsTsTool.ProjectName,
                        repositoryId: searchInformation.GitRepositoryName,
                        recursionLevel: VersionControlRecursionType.Full,
                        versionDescriptor: MakeVersionDescriptor(searchInformation)
                        ),
                    MakeContext(info)
                    ).Result;

            HandlePolicyResult(result, info);

            var output = result.Result;

            Logger.Trace("Exiting");

            return(output);
        }
コード例 #3
0
        /// <summary>
        ///     Get All Policy Configurations
        /// </summary>
        /// <returns></returns>
        public IEnumerable <PolicyConfiguration> GetPolicyConfigurations()
        {
            Logger.Trace("Entering");

            var result =
                WaitAndRetryPolicyAsync.ExecuteAndCaptureAsync(
                    _ =>
                    _client.Value.GetPolicyConfigurationsAsync(_vsTsTool.ProjectName)
                    , MakeContext()
                    )
                .Result;

            HandlePolicyResult(result);

            var output = result.Result;

            return(output);
        }
コード例 #4
0
        /// <summary>
        ///     Get all Release definitions.
        /// </summary>
        /// <param name="definitionName">Name of the definition. Optional.</param>
        /// <param name="path">Path to the Releases. Optional.</param>
        /// <remarks>
        ///     Use GetReleaseDefinitionReferences if you don't need all the fields in the full Release definitions. It is
        ///     faster.
        /// </remarks>
        /// <returns>Collection of <see cref="ReleaseDefinition" /></returns>
        /// <remarks>This returns VariableGroups as empty even if there are variable groups used in the actual definition</remarks>
        public IEnumerable <ReleaseDefinition> GetReleaseDefinitions(
            string definitionName = null,
            string path           = null)
        {
            Logger.Trace("Entering");

            var info = $"{nameof(definitionName)}: {definitionName}, {nameof(path)}: {path}";

            var result =
                WaitAndRetryPolicyAsync.ExecuteAndCaptureAsync(_ =>
            {
                if (definitionName != null)
                {
                    return(_client.Value.GetReleaseDefinitionsAsync(
                               searchText: definitionName,
                               isExactNameMatch: true,
                               path: path,
                               project: _vsTsTool.ProjectGuid,
                               expand:
                               ReleaseDefinitionExpands,
                               propertyFilters: PropertyFilters
                               ));
                }

                return(_client.Value.GetReleaseDefinitionsAsync(
                           path: path,
                           project: _vsTsTool.ProjectGuid,
                           expand:
                           ReleaseDefinitionExpands,
                           propertyFilters: PropertyFilters
                           )
                       );
            }, MakeContext(info)
                                                               )
                .Result;

            HandlePolicyResult(result, info);

            var output = result.Result;

            return(output.ToList());
        }
コード例 #5
0
        /// <summary>
        ///     Get the Id of a repository by its name.
        /// </summary>
        /// <param name="repositoryName"></param>
        /// <returns></returns>
        public Guid GetRepositoryId(string repositoryName)
        {
            Logger.Trace("Entering");

            Guid output;

            Interlocked.Increment(ref _repositoryIdCacheSearchCount);

            if (_repositoryIdCache.ContainsKey(repositoryName))
            {
                //Logger.Debug($"Cache hit for {repositoryName}.");
                Interlocked.Increment(ref _repositoryIdCacheHitCount);
                output = _repositoryIdCache[repositoryName];
            }
            else
            {
                //Logger.Debug($"Cache miss for {repositoryName}. Looking up value.");

                var info = $"{nameof(repositoryName)}: {repositoryName}";

                var result =
                    WaitAndRetryPolicyAsync.ExecuteAndCaptureAsync(
                        _ => _client.Value.GetRepositoryAsync(
                            _vsTsTool.ProjectName,
                            repositoryName
                            ),
                        MakeContext(info)).Result;

                HandlePolicyResult(result, info);

                output = result.Result.Id;

                _repositoryIdCache.AddOrUpdate(repositoryName, output, (_, v) => v);
            }

            //Logger.Debug($"Repository Cache for {repositoryName}: Hits {_repositoryIdCacheHitCount * 100.0 / _repositoryIdCacheSearchCount:0.00}% (Hits {_repositoryIdCacheHitCount}, Searches {_repositoryIdCacheSearchCount})");

            Logger.Trace("Exiting");

            return(output);
        }
コード例 #6
0
        /// <summary>
        ///     Get a Policy Configuration
        /// </summary>
        /// <param name="configurationId"></param>
        /// <returns></returns>
        public PolicyConfiguration GetPolicyConfiguration(int configurationId)
        {
            Logger.Trace("Entering");

            var info = $"{nameof(configurationId)}: {configurationId}";

            var result =
                WaitAndRetryPolicyAsync.ExecuteAndCaptureAsync(
                    _ =>
                    _client.Value.GetPolicyConfigurationAsync(_vsTsTool.ProjectName, configurationId)
                    ,
                    MakeContext(info)
                    )
                .Result;

            HandlePolicyResult(result, info);

            var output = result.Result;

            return(output);
        }
コード例 #7
0
        /// <summary>
        ///     Gets a collection of branches for this repository.
        /// </summary>
        /// <param name="repositoryId"></param>
        /// <returns>Collection of <see cref="GitRef" /></returns>
        public IEnumerable <GitRef> GetBranches(Guid repositoryId)
        {
            Validators.AssertIsNotNull(repositoryId, nameof(repositoryId));

            Logger.Trace("Entering");

            var info = $"{nameof(repositoryId)}: {repositoryId}";

            var result =
                WaitAndRetryPolicyAsync.ExecuteAndCaptureAsync(
                    _ => _client.Value.GetBranchRefsAsync(repositoryId),
                    MakeContext(info)).Result;

            HandlePolicyResult(result, info);

            var output = result.Result;

            Logger.Trace("Exiting");

            return(output);
        }
コード例 #8
0
        /// <summary>
        ///     Get All
        /// </summary>
        /// <returns></returns>
        public IEnumerable <AgentPoolQueue> GetQueues()
        {
            Logger.Trace("Entering");

            var tempUri = new Uri(
                $"https://dev.azure.com/{_vsTsTool.OrganizationName}/{_vsTsTool.ProjectName}/_apis/distributedtask/queues?api-version=5.1-preview.1");
            var result =
                WaitAndRetryPolicyAsync.ExecuteAndCaptureAsync(
                    _ =>
                    _client.Value.GetStringAsync(tempUri)
                    ,
                    MakeContext()
                    )
                .Result;

            HandlePolicyResult(result);

            var serializer   = new JsonSerializer();
            var responseItem = serializer.Deserialize <ResponseItem>(new JsonTextReader(new StringReader(result.Result)));

            return(responseItem.Value);
        }
コード例 #9
0
        /// <summary>
        ///     Get Tags
        /// </summary>
        /// <param name="repositoryName"></param>
        /// <returns></returns>
        public IEnumerable <GitRef> GetTags(string repositoryName)
        {
            Logger.Trace("Entering");

            var repositoryId = GetRepositoryId(repositoryName);

            var info = $"{nameof(repositoryName)}: {repositoryName}";

            var result =
                WaitAndRetryPolicyAsync.ExecuteAndCaptureAsync(
                    _ =>
                    _client.Value.GetTagRefsAsync(repositoryId),
                    MakeContext(info)).Result;

            HandlePolicyResult(result, info);

            var output = result.Result;

            Logger.Trace("Exiting");

            return(output);
        }
コード例 #10
0
        /// <summary>
        ///     List repositories with ignored repositories removed.
        /// </summary>
        /// <param name="repositoriesToIgnore">A collection of Regex for repository names to ignore.</param>
        /// <returns></returns>
        public IEnumerable <GitRepository> GetRepositories(IEnumerable <Regex> repositoriesToIgnore = null)
        {
            Logger.Trace("Entering");

            var info = $"RepositoriesToIgnore: {(repositoriesToIgnore == null ? "Null" : "Not Null")}";

            var result =
                WaitAndRetryPolicyAsync.ExecuteAndCaptureAsync(
                    _ => _client.Value.GetRepositoriesAsync(_vsTsTool.ProjectName),
                    MakeContext(info)
                    ).Result;

            HandlePolicyResult(result, info);

            var results = result.Result;

            var output = results
                         .Where(x => repositoriesToIgnore?.All(y => !y.IsMatch(x.Name)) != false);

            Logger.Trace("Exiting");

            return(output);
        }
コード例 #11
0
        /// <summary>
        ///     Get one by Id
        /// </summary>
        /// <param name="queueId"></param>
        /// <returns></returns>
        public AgentPoolQueue GetQueue(int queueId)
        {
            Logger.Trace("Entering");

            var info = $"{nameof(queueId)}: {queueId}";

            var tempUri = new Uri(
                $"https://dev.azure.com/{_vsTsTool.OrganizationName}/{_vsTsTool.ProjectName}/_apis/distributedtask/queues/?queueIds={queueId}&api-version=5.1-preview.1");
            var result =
                WaitAndRetryPolicyAsync.ExecuteAndCaptureAsync(
                    _ =>
                    _client.Value.GetStringAsync(tempUri)
                    ,
                    MakeContext(info)
                    )
                .Result;

            HandlePolicyResult(result, info);

            var serializer   = new JsonSerializer();
            var responseItem = serializer.Deserialize <ResponseItem>(new JsonTextReader(new StringReader(result.Result)));

            return(responseItem.Value.FirstOrDefault());
        }
コード例 #12
0
        /// <summary>
        ///     Get a Release definition.
        /// </summary>
        /// <param name="definitionId"></param>
        /// <returns></returns>
        public ReleaseDefinition GetReleaseDefinition(int definitionId)
        {
            Logger.Trace("Entering");

            var info = $"{nameof(definitionId)}: {definitionId}";

            var result =
                WaitAndRetryPolicyAsync.ExecuteAndCaptureAsync(
                    _ =>
                    _client.Value.GetReleaseDefinitionAsync(
                        _vsTsTool.ProjectGuid,
                        definitionId,
                        PropertyFilters
                        ),
                    MakeContext(info)
                    )
                .Result;

            HandlePolicyResult(result, info);

            var output = result.Result;

            return(output);
        }