Skip to main content

Работа с комментариями

С помощью REST API можно получить доступ к комментариям в запросах на вытягивание, проблемах или фиксациях и управлять ими.

Для любого запроса на вытягивание GitHub Enterprise Cloud предоставляет три вида представлений комментариев: комментарии к запросу на вытягивание в целом, комментарии к определенной строке в запросе на вытягивание и комментарии к определенной фиксации в запросе на вытягивание.

Каждый из этих типов комментариев проходит через свою часть API GitHub. В этом руководстве мы рассмотрим, как получить доступ к каждому из них и управлять ими. Для каждого примера мы будем использовать этот пример запроса на вытягивание в репозитории octocat. Как всегда, примеры можно найти в нашем репозитории примеров для платформы.

Комментарий к запросу на вытягивание

Чтобы получить доступ к комментариям к запросу на вытягивание, вы будете использовать конечные точки для управления проблемами. На первый взгляд это может показаться нелогичным. Но как только вы понимаете, что запрос на вытягивание является просто проблемой с кодом, рекомендуется использовать эти конечные точки для создания комментариев по запросу на вытягивание.

Мы продемонстрируем получение комментариев к запросу на вытягивание путем создания скрипта Ruby с помощью Octokit.rb. Вы также хотите создать personal access token.

Следующий код поможет получить доступ к комментариям из запроса на вытягивание с помощью Octokit.rb:

require 'octokit'

# !!! DO NOT EVER USE HARD-CODED VALUES IN A REAL APP !!!
# Instead, set and test environment variables, like below
client = Octokit::Client.new :access_token => ENV['MY_PERSONAL_TOKEN']

client.issue_comments("octocat/Spoon-Knife", 1176).each do |comment|
  username = comment[:user][:login]
  post_date = comment[:created_at]
  content = comment[:body]

  puts "#{username} made a comment on #{post_date}. It says:\n'#{content}'\n"
end

Здесь мы специально вызываем API, чтобы получить комментарии (), указав имя репозитория (issue_comments), и идентификатор запроса на вытягивание, который мы заинтересованы (octocat/Spoon-Knife``1176). После этого мы просто проходим по комментариями, чтобы получить информацию о каждом из них.

Комментарии к строке запроса на вытягивание

В представлении различий можно начать обсуждение определенного аспекта отдельного изменения, внесенного в запрос на вытягивание. Эти комментарии находятся в отдельных строках в измененном файле. URL-адрес конечной точки для этого обсуждения поступает из конечной точки для управления проверка запроса на вытягивание.

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

require 'octokit'

# !!! DO NOT EVER USE HARD-CODED VALUES IN A REAL APP !!!
# Instead, set and test environment variables, like below
client = Octokit::Client.new :access_token => ENV['MY_PERSONAL_TOKEN']

client.pull_request_comments("octocat/Spoon-Knife", 1176).each do |comment|
  username = comment[:user][:login]
  post_date = comment[:created_at]
  content = comment[:body]
  path = comment[:path]
  position = comment[:position]

  puts "#{username} made a comment on #{post_date} for the file called #{path}, on line #{position}. It says:\n'#{content}'\n"
end

Вы заметите, что это очень похоже на приведенный выше пример. Различия между этим представлением и комментарием к запросу на вытягивание кроются в направлении беседы. Комментарий, сделанный в запросе на вытягивание, должен относиться к общему направлению кода. Комментарий, сделанный в рамках проверки запроса на вытягивание, должен касаться реализации конкретного изменения в файле.

Комментарии к фиксации

Последний тип комментариев относится к отдельным фиксациям. По этой причине они используют конечную точку для управления комментариями фиксации.

Чтобы получить комментарии к фиксации, необходимо использовать SHA1 фиксации. Другими словами, вы не будете использовать идентификатор, связанный с запросом на вытягивание. Приведем пример:

require 'octokit'

# !!! DO NOT EVER USE HARD-CODED VALUES IN A REAL APP !!!
# Instead, set and test environment variables, like below
client = Octokit::Client.new :access_token => ENV['MY_PERSONAL_TOKEN']

client.commit_comments("octocat/Spoon-Knife", "cbc28e7c8caee26febc8c013b0adfb97a4edd96e").each do |comment|
  username = comment[:user][:login]
  post_date = comment[:created_at]
  content = comment[:body]

  puts "#{username} made a comment on #{post_date}. It says:\n'#{content}'\n"
end

Обратите внимание, что этот вызов API извлечет комментарии к одной строке, а также комментарии для всей фиксации.