Заметки консультанта

Шамрай Александр Владимирович

Azure DevOps Rest Api. 22. Завершение запросов на включение кода

Posted by Shamrai Alexander на 7 августа, 2019

Для взаимодействия с объектами версионного контроля GIT используется клиент GitHttpClient. В рамках данной статьи мы рассмотрим методы:

  • Добавление ревьювера при создании запроса на включение кода.
  • Добавление комментария к запросу на изменение
  • Отклонение запроса на включение кода.
  • Завершение запроса на включение кода и закрытые комментариев.

Добавление ревьювера при создании запроса на включение кода

Создание запроса на включение кода рассматривалось здесь: Создание и просмотр запросов на включение кода. В данном случае, мы создадим новый запрос на включение кода с ревьером. Для того, чтобы добавить ревьюера, необходимо получить его идентификатор через TeamHttpClient. Получение состава команды проекта рассматривалось здесь: Управление командами проекта. Ниже приведен пример получение идентификатора пользователя из главной команды проекта:

List<TeamMember> teamMembers = TeamClient.GetTeamMembersWithExtendedPropertiesAsync(TeamProjectName, TeamProjectName + » Team»).Result;
var users = from x in teamMembers where x.Identity.DisplayName == UserDisplayName select x.Identity.Id;

if (users.Count() == 1) return users.First();

Набор ревьюверов находится в свойстве Reviewers класса GitPullRequest в виде массива объектов IdentityRefWithVote. Пример создания запроса на включение кода с один ревьювером:

GitPullRequest pr = new GitPullRequest();
pr.Title = pr.Description = String.Format(«PR from {0} into {1} «, SourceRef, TargetRef);

pr.SourceRefName = SourceRef;

pr.TargetRefName = TargetRef;

if (ReviewerId != «»)

{

IdentityRefWithVote[] identityRefWithVotes = { new IdentityRefWithVote { Id = ReviewerId } };

pr.Reviewers = identityRefWithVotes;

}

var newPr = GitClient.CreatePullRequestAsync(pr, TeamProjectName, RepoName).Result;

Добавление комментария к запросу на включение кода

Создание потока комментариев выполнятся через класс GitPullRequestCommentThread, который содержит следующие основные свойства:

  • Id – идентификатор потока комментариев
  • Status – состояние потока комментариев
  • Comments – список комментариев. Первый комментарий – это тема потока комментариев, а каждый следующий является ответом по данной теме.

Добавление потока комментариев выполняется через метод CreateThreadAsync, который принимает следующие параметры:

  • commentThread – экземпляр класса GitPullRequestCommentThread, который описывает новый поток комментариев.
  • project – наименование проекта.
  • repositoryId – наименование репозитория GIT.
  • pullRequestId – идентификатор запроса на включение кода.

Пример создания потока комментариев для существующего запроса на включение кода:

GitPullRequest pr = GitClient.GetPullRequestAsync(TeamProjectName, RepoName, PrId).Result;
GitPullRequestCommentThread gitThread = new GitPullRequestCommentThread();

gitThread.Status = Status;

List<Microsoft.TeamFoundation.SourceControl.WebApi.Comment> comments = new List<Microsoft.TeamFoundation.SourceControl.WebApi.Comment>();

comments.Add(new Microsoft.TeamFoundation.SourceControl.WebApi.Comment{ Content = Title });

gitThread.Comments = comments;

var thread = GitClient.CreateThreadAsync(gitThread, TeamProjectName, RepoName, PrId).Result;

Отклонение запроса на включение кода

Для отклонения запроса на включение кода, необходимо обновить его состояние в Abandoned. Состояние запроса на включение кода описывается свойством Status класса GitPullRequest. Набор состояний можно увидеть в перечислении PullRequestStatus. При этом нужно создать новый объект класса GitPullRequest, в котором нужно указать обновляемые свойства. Далее вызывается метод UpdatePullRequestAsync, который принимает следующие параметры:

  • gitPullRequestToUpdate – обновления для существующего запроса на включение кода в виде объекта класса GitPullRequest.
  • project – наименование командного проекта.
  • repositoryId – наименование репозитория GIT.
  • pullRequestId – идентификатор существующего запроса на включение кода.

Пример отклонения запроса на включение кода:

CreateNewCommentThread(TeamProjectName, RepoName, PrId, «Reject this PR»);
GitPullRequest prUdated = new GitPullRequest();

prUdated.Status = PullRequestStatus.Abandoned;

prUdated = GitClient.UpdatePullRequestAsync(prUdated, TeamProjectName, RepoName, PrId).Result;

Завершение запроса на включение кода и закрытые комментариев

Для завершения запроса на включение кода, необходимо обновить состояние его состояние в Succeeded. Выполняется это также, как и при отклонении запроса на включение кода. При этом при завершении запроса на включение кода желательно закрыть активные комментарии, т.к. этого могут требовать политики ветви. Для этого необходимо установить статус Fixed для потока комментариев через метод UpdateThreadAsync. Который принимает следующие параметры:

  • updatedThread – обновления для существующего потока комментариев. При этом в свойство Comments можно добавить дополнительные комментарии.
  • project – наименование командного проекта.
  • repositoryId – наименование репозитория GIT.
  • pullRequestId – идентификатор существующего запроса на включение кода.
  • pullRequesThreadtId – идентификатор существующего потока комментариев.

Пример разрешения потока комментариев и добавление нового комментария в поток:

GitPullRequest pr = GitClient.GetPullRequestAsync(TeamProjectName, RepoName, PrId).Result;
List<GitPullRequestCommentThread> threads = GitClient.GetThreadsAsync(TeamProjectName, RepoName, PrId).Result;

foreach (var thread in threads)

{


if (thread.Status == CommentThreadStatus.Active)

{

GitPullRequestCommentThread updatedThread = new GitPullRequestCommentThread();

updatedThread.Status = CommentThreadStatus.Fixed;

Microsoft.TeamFoundation.SourceControl.WebApi.Comment[] comments = { new Microsoft.TeamFoundation.SourceControl.WebApi.Comment { Content = «Task is completed.» } };

updatedThread.Comments = comments;

updatedThread = GitClient.UpdateThreadAsync(updatedThread, TeamProjectName, RepoName, PrId, thread.Id).Result;

}

}

Для завершения запроса на включение кода также необходимо указать LastMergeSourceCommit, который можно получить из исходного запроса на включение кода:

GitPullRequest pr = GitClient.GetPullRequestAsync(TeamProjectName, RepoName, PrId).Result;
GitPullRequest prUdated = new GitPullRequest();

prUdated.Status = PullRequestStatus.Completed;

prUdated.LastMergeSourceCommit = pr.LastMergeSourceCommit;

prUdated = GitClient.UpdatePullRequestAsync(prUdated, TeamProjectName, RepoName, PrId).Result;

Пример тестового приложения можно посмотреть здесь:

https://github.com/ashamrai/TFRestApi/tree/master/22.TFRestApiAppCompletePullRequests

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google photo

Для комментария используется ваша учётная запись Google. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s

 
%d такие блоггеры, как: