/// <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); }
// 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); }
/// <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); }
/// <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()); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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()); }
/// <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); }