【问题标题】:Complete TFS Pull Request programmatically以编程方式完成 TFS 拉取请求
【发布时间】:2018-04-30 13:12:30
【问题描述】:

使用 Microsoft.TeamFoundationServer.Client (15.112.1) 连接到 TFS 2017 Update 2 服务器,我们可以获得有关现有 PR 的详细信息,如下所示:

var connection = new VssConnection(collectionUri, credentials);
var client = connection.GetClient<GitHttpClient>();
var pr = await client.GetPullRequestByIdAsync(pullRequestId);

另外,我们可以像这样创建新的 PR:

var pr = await client.CreatePullRequestAsync(
        new GitPullRequest
        {
          SourceRefName = "master",
          TargetRefName = "develop",
          Title = "[Automatic Merge]"
        },
        projectName, repositoryName);

另外,我们可以这样对 PR 进行投票:

var pr = await client.CreatePullRequestReviewerAsync(
            reviewer, projectName, repositoryName, pullRequestId, authorizedIdenity.Id.ToString());

有没有办法完成 PR(覆盖或不存在的分支 政策)并继续进行合并操作?

【问题讨论】:

标签: tfs azure-devops tfs-sdk azure-devops-rest-api


【解决方案1】:

GitHttpClient 有一个 UpdatePullRequestAsync 方法。

要完成拉取请求,您需要更新拉取请求的 Status 属性。并使用 UpdatePullRequestAsync 方法完成您的 PR。

请确保设置 CompletionOptions 属性以指定是否要合并提交、删除源分支等。

所以你的代码如下所示

pr.Status = PullRequestStatus.Completed
pr.CompletionOption = new GitPullRequestCompletionOption() { SquashMerge = true };
client.UpdatePullRequest(pr, repositoryId, pullRequestId);

编辑:

ByPassPolicy 尚不适用于 Microsoft.TeamFoundationServer.ExtendedClient 的已发布版本。

但是,如果您安装库 Microsoft.TeamFoundationServer.ExtendedClient 的预发布 NuGet 包 v15.122.1-preview,您将看到选项 ByPassPolicy 作为属性在 GitPullrequestCompletionOptions 类中。您可以将其设置为 true 以绕过策略。

【讨论】:

  • 我已经这样做了,并且在没有违反任何政策的情况下工作得很好。知道如何使用客户端覆盖策略或如何设置自动完成功能吗?
  • ByPassPolicy 尚不适用于 Microsoft.TeamFoundationServer.ExtendedClient 的已发布版本。但是,如果您安装预发布的 NuGet 包 v15.122.1-preview,您将看到选项 ByPassPolicy 作为 GitPullrequestCompletionOptions 类中的属性。您可以将其设置为 true 以绕过策略。
猜你喜欢
  • 2020-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-02
  • 2018-03-25
  • 1970-01-01
  • 2017-01-14
  • 2014-01-16
相关资源
最近更新 更多