Azure Repos REST API 获取合并请求中已更改文件的列表

Azure Repos REST API to get list of changed files in merge request

目标:每当拉取请求获得批准并且审阅者在 Azure 存储库中完成(合并)拉取请求时,我想确定该合并请求中的文件列表。基于文件扩展名,我必须触发相应的构建管道。

问题: 到目前为止,从 azure devOps 门户似乎不可能,我需要 REST API 才能这样做。请指向 API/APIs 帮助我确定合并请求中已更改文件的列表

分析:我也看到了Get Merge Requests但不确定从哪里获取管道中的mergeOperationId。

作为解决方法,您可以找到已完成的 PR 并检查它们的提交。 .NET client libraries for Azure DevOps Services .

的 GitHttpClient 示例
private static void ViewPullRequests(string TeamProjectName, string GitRepo, bool ClosedPRs = false, string TargetRef = "")
{
    if (ClosedPRs && TargetRef == "")
    {
        Console.WriteLine("Define a target branch reference");
        return;
    }

    var pullRequests = (ClosedPRs)? 
        GitClient.GetPullRequestsAsync(TeamProjectName, GitRepo, new GitPullRequestSearchCriteria { Status = PullRequestStatus.Completed, TargetRefName = TargetRef }, top: 10).Result : 
        GitClient.GetPullRequestsAsync(TeamProjectName, GitRepo, null ).Result;

    foreach (var pullRequest in pullRequests)
    {
        var commits = GitClient.GetPullRequestCommitsAsync(TeamProjectName, GitRepo, pullRequest.PullRequestId).Result;

        foreach (var commit in commits)
        {
            Console.WriteLine("{0} {1}", commit.CommitId.Substring(0, 8), commit.Comment);
            GitCommitChanges changes = GitClient.GetChangesAsync(TeamProjectName, commit.CommitId, GitRepo).Result;

            foreach(var change in changes.Changes)
                Console.WriteLine("{0}: {1}", change.ChangeType, change.Item.Path);
        }
    }
}

休息Api方法:

  1. Pull Requests - Get Pull Requests

  2. Pull Request Commits - Get Pull Request Commits

  3. Commits - Get Changes

您可以从 UI 页面获取合并请求中已更改文件的列表。

如果想通过restapi获取修改过的文件列表,那么需要使用Shamrai Aleksander.[=17=提供的方法]

首先你需要使用 Pull Request Commits rest api 来获取 pull request Commits。

GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/pullRequests/{pullRequestId}/commits?api-version=5.1

然后根据Commits-Get Changesrestapi读取path参数获取变化文件,循环获取变化文件列表

GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/commits/{commitId}/changes?api-version=5.1