Para qualquer pull request, GitHub Enterprise Server fornece três tipos de visualizações de comentários: comentários no Pull Request como um todo, comentários em uma linha específica dentro do Pull Request, e comentários em um commit específico dentro do Pull Request.
Cada um desses tipos de comentários passa por uma parte diferente da GitHub Enterprise Server API. Neste guia, vamos explorar como você pode acessar e manipular cada um. Para cada exemplo, usaremos esta amostra de Pull Request feita no repositório de "octocat". Como sempre, as amostras podem ser encontradas no nosso repositório platform-samples.
Comentários do Pull Request
Para acessar comentários em um Pull Request, você passará pela API de Problemas. A princípio, isso pode parecer contraintuitivo. Mas depois que você entender que um Pull Request é apenas um problema com o código, faz sentido usar a API de problemas para criar comentários em um Pull Request.
Nós demonstraremos como buscar comentários de Pull Request criando um script do Ruby usando Octokit.rb. Você também deverá criar um token de acesso pessoal.
O código a seguir deve ajudá-lo a começar a acessar comentários de um pedido de Pull Request usando 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
Aqui, estamos especificamente chamando a API de problemas para obter os comentários (issue_comments
), fornecendo o nome do repositório (octocat/Spoon-Knife
) e o ID do Pull Request no qual estamos interessados (1176
). Depois disso, trata-se simplesmente de um assunto de iteração através dos comentários para buscar informações sobre cada um.
Comentários em uma linha de Pull Request
Na visualização de diferenças, você pode iniciar uma discussão sobre um aspecto específico de uma mudança singular feita dentro do Pull Request. Estes comentários ocorrem nas linhas individuais dentro de um arquivo alterado. A URL do ponto de extremidade para esta discussão vem da API da revisão de pull request.
O código a seguir busca todos os comentários de pull request feitos em arquivos, dado um único número 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
Você perceberá que ele é incrivelmente semelhante ao exemplo acima. A diferença entre esta visualização e o comentário de Pull Request é o foco da conversa. Um comentário feito em um Pull Request deve ser reservado para discussão ou ideias sobre a direção geral do código. Um comentário feito como parte de uma revisão de Pull Request deve lidar especificamente com a forma como uma determinada alteração foi implementada em um arquivo.
Comentários de commit
O último tipo de comentários ocorre especificamente nos commits individuais. Por esta razão, eles usam a API de comentário de commit.
Para recuperar os comentários em um commit, você deverá usar o SHA1 do commit. Em outras palavras, você não usará nenhum identificador relacionado ao Pull Request. Aqui está um exemplo:
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
Observe que esta chamada de API recuperará comentários de linha única, bem como comentários feitos em todo o commit.