如何以编程方式将AzureDevOps PullRequest设置为自动完成?

时间:2018-08-26 10:39:17

标签: c# autocomplete azure-devops pull-request

在创建拉取请求时(如下面的代码所示),我还希望将其设置为自动完成。这意味着当满足所有完成条件时,拉取请求会自动完成,因此作者不必通过vsts界面手动完成它。

任何建议如何执行?在创建请求请求时,我似乎没有任何可能。换句话说,用于创建提取请求的界面不会显示任何用于自动完成的选项。

这是我的示例代码:

public static void CreatePullRequestAndSetAutoComplete(GitHttpClient gitHttpClient, string repositoryId, GitPullRequest pullRequest, string mergeCommitMessage)
        {
            pullRequest = gitHttpClient.CreatePullRequestAsync(
                pullRequest, 
                repositoryId, 
                cancellationToken: CancellationToken.None).Result;
}

1 个答案:

答案 0 :(得分:1)

这是一个两步过程。首先,您需要创建一个拉取请求,然后通过设置其自动完成程序的标识以及其他一些可选参数(如下面的代码所示)来对其进行更新。

using System.Threading;
using Microsoft.TeamFoundation.SourceControl.WebApi;
using Microsoft.VisualStudio.Services.WebApi;

namespace CreateVstsPullRequestAndSetAutoComplete
{
    public class PullRequestAutoCompleter
    {
        /// <summary>
        /// Creates a pull request, and then sets it to auto complete. 
        /// </summary>
        /// <param name="gitHttpClient">GitHttpClient that is created for accessing vsts repo, and codebase.</param>
        /// <param name="repositoryId">The unique identifier of the repository</param>
        /// <param name="pullRequest">The pull request to be created, and then set autocomplete.</param>
        /// <param name="mergeCommitMessage">Provides text to post, when the pull request is completed and merged.</param>
        public static GitPullRequest CreatePullRequestAndSetAutoComplete(GitHttpClient gitHttpClient, string repositoryId, GitPullRequest pullRequest, string mergeCommitMessage)
        {
            // 1- Create the pull request.
            pullRequest = gitHttpClient.CreatePullRequestAsync(
                pullRequest, 
                repositoryId, 
                cancellationToken: CancellationToken.None).Result;

            //2- Set autocomplete.
            pullRequest = EnableAutoCompleteOnAnExistingPullRequest(gitHttpClient, pullRequest, mergeCommitMessage);

            return pullRequest;
        }

        /// <summary>
        /// Sets an existing (meaning created earlier) pullrequest to complete automatically, 
        /// once all of its completion conditions are resolved.
        /// (i.e., a(many) reviewer(s) has(have) approved the pull request, the author has resolved all the commits, and etc)
        /// </summary>
        /// <param name="gitHttpClient">GitHttpClient that is created for accessing vsts repo, and codebase.</param>
        /// <param name="pullRequest">Is an existing pull request, meaning it was created before.</param>
        /// <param name="mergeCommitMessage">Provides text to post, when the pull request is completed and merged.</param>
        /// <returns>An updated pull request, where the update is maninly about setting the autocomplete on it. </returns>
        public static GitPullRequest EnableAutoCompleteOnAnExistingPullRequest(GitHttpClient gitHttpClient, GitPullRequest pullRequest, string mergeCommitMessage)
        {
            var pullRequestWithAutoCompleteEnabled = new GitPullRequest
            {
                AutoCompleteSetBy = new IdentityRef { Id = pullRequest.CreatedBy.Id },
                CompletionOptions = new GitPullRequestCompletionOptions
                {
                    SquashMerge = true,
                    DeleteSourceBranch = true, // false if prefered otherwise
                    MergeCommitMessage = mergeCommitMessage
                }
            };

            GitPullRequest updatedPullrequest = gitHttpClient.UpdatePullRequestAsync(
                pullRequestWithAutoCompleteEnabled, 
                pullRequest.Repository.Id, 
                pullRequest.PullRequestId).Result;

            return updatedPullrequest;
        }
    }
}