Для любого запроса на вытягивание GitHub предоставляет три вида представлений комментариев: комментарии к запросу на вытягивание в целом, комментарии к определенной строке в запросе на вытягивание и комментарии к определенной фиксации в запросе на вытягивание.
Каждый из этих типов комментариев проходит через свою часть 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 извлечет комментарии к одной строке, а также комментарии для всей фиксации.