Pour toutes les demandes de tirage, GitHub fournit trois types de commentaires : les commentaires sur la demande de tirage dans son ensemble, les commentaires sur une ligne spécifique de la demande de tirage et les commentaires sur un commit spécifique de la demande de tirage.
Chacun de ces types de commentaires passe par une partie différente de l’API GitHub. Dans ce guide, nous allons voir comment accéder à chacun d’eux et comment les manipuler. Pour chaque exemple, nous allons utiliser cet exemple de Pull Request effectuées sur le dépôt « octocat ». Comme toujours, vous trouverez des exemples dans notre dépôt platform-samples.
Commentaires sur les pull requests
Pour accéder aux commentaires d'une Pull Request, vous utiliserez les points de terminaison pour gérer les problèmes. Au premier abord, cela peut sembler contre-intuitif. Toutefois, une fois que vous comprenez qu'une Pull Request n'est qu'une Issue avec du code, il est logique d'utiliser ces points de terminaison pour créer des commentaires sur une Pull Request.
Nous allons démontrer comment récupérer les commentaires d’un pull request en créant un script Ruby avec Octokit.rb. Vous souhaiterez également créer un personal access token.
Le code suivant doit vous aider à accéder aux commentaires d'un pull request à l'aide d'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
Ici, nous appelons spécifiquement l'API pour obtenir les commentaires (issue_comments), en fournissant le nom du référentiel (octocat/Spoon-Knife) et l'ID du pull request qui nous intéresse (1176). Après cela, il s’agit simplement de parcourir les commentaires pour récupérer les informations sur chacun d’eux.
Commentaires sur une ligne d'un Pull Request
Dans la vue différentielle, vous pouvez commencer une discussion à propos d’un aspect particulier d’une modification apportée à la demande de tirage. Ces commentaires apparaissent sur les lignes d’un fichier modifié. L’URL du point de terminaison de cette discussion provient du point de terminaison pour gérer les révisions de pull request.
Le code suivant récupère tous les commentaires de pull request effectués sur les fichiers, à partir d’un seul numéro de pull request.
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
Vous remarquerez qu’il est très similaire à l’exemple ci-dessus. La différence entre cette vue et le commentaire de Pull Request est l'objet de la conversation. Les commentaires concernant une Pull Request devraient être réservés aux discussions ou aux idées sur l'orientation générale du code. Les commentaires faits dans le cadre d'une révision de pull request doivent concerner spécifiquement la façon dont une modification a été implémentée dans un fichier.
Commentaires de Commit
Le dernier type de commentaires se produit spécifiquement sur des commits individuels. Pour cette raison, ils utilisent le point de terminaison pour gérer les commentaires de validation.
Pour récupérer les commentaires concernant un commit, vous devez utiliser le SHA1 du commit. En d’autres termes, vous n’utiliserez aucun identifiant lié au Pull Request. Voici un exemple :
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
Notez que cet appel d’API récupérera aussi bien les commentaires concernant une seule ligne que les commentaires concernant l’intégralité d’un commit.