web-dev-qa-db-fra.com

Comment puis-je obtenir une liste de toutes les demandes d'extraction pour un dépôt via l'API github?

Je veux obtenir une liste de toutes les demandes d'extraction sur un référentiel via l'API github. J'ai suivi les instructions sur http://developer.github.com/v3/pulls/ mais quand je demande '/ repos /: owner /: repo/pulls', il renvoie constamment moins de demandes de pull que celles affichées sur le site Web.

Par exemple, lorsque j'interroge le référentiel torvalds/linux, je reçois 9 demandes de tirage ouvertes (il y en a 14 sur le site Web). Si j'ajoute '? State = closed', j'obtiens un ensemble différent de 11 demandes de tirage fermées (le site Web affiche environ 20).

Est-ce que quelqu'un sait d'où vient cet écart et s'il existe un moyen d'obtenir une liste complète des demandes d'extraction pour un dépôt via l'API?

21
ResearchMills

Vous pouvez obtenir toutes les demandes d'extraction (fermées, ouvertes, fusionnées) via la variable state.

Réglez simplement state=all dans la requête GET, comme ceci->

https://api.github.com/repos/:owner/:repo/pulls?state=all

Pour plus d'informations: consultez le tableau des paramètres sur https://developer.github.com/v3/pulls/#list-pull-requests

Edit: Selon le commentaire de Tomáš Votruba:

la valeur par défaut de "per_page = 30". Le maximum est per_page = 100. Pour obtenir plus de 100 résultats, vous devez l'appeler plusieurs fois: "& page = 1", "& page = 2" ...

12
akshaynagpal

PyGithub ( https://github.com/PyGithub/PyGithub ), une bibliothèque Python pour accéder à l'API GitHub v3, vous permet d'obtenir des ressources paginées.

Par exemple,

g = Github(login_or_token=$YOUR_TOKEN, per_page=100)
r = g.get_repo($REPO_NUMBER)

for pull in r.get_pulls('all'):
    # You can access pulls

Voir la documentation ( http://pygithub.readthedocs.io/en/latest/index.html ).

8
Daisuke SHIBATO
  1. Si vous souhaitez récupérer toutes les demandes d'extraction (commits, commentaires, problèmes, etc.), vous devez utiliser la pagination. https://developer.github.com/v3/#pagination

  2. La requête GET "pulls" ne renverra que les pull-requests ouvertes.

  3. Si vous souhaitez obtenir toutes les demandes d'extraction, vous définissez l'état du paramètre sur tous ou vous utilisez des problèmes.

Informations supplémentaires

Si vous avez besoin d'autres données de Github, telles que des problèmes, vous pouvez identifier les demandes d'extraction des problèmes, et vous pouvez ensuite récupérer chaque demande d'extraction, qu'elle soit fermée ou ouverte. Il vous donnera également quelques autres attributs (fusionnable, fusionné, merge-commit-sha, nr de commits, etc.) Si un problème est une pull-request, il contiendra cet attribut. Sinon, ce n'est qu'un problème.

À partir de l'API: https://developer.github.com/v3/pulls/#labels-assignees-and-milestones =

"Chaque demande d'extraction est un problème, mais pas chaque problème n'est une demande d'extraction. Pour cette raison, des actions" partagées "pour les deux fonctionnalités, telles que la manipulation des destinataires, des étiquettes et des jalons, sont fournies dans l'API Issues."

Edit Je viens de découvrir que les problèmes se comportent de la même manière que les pull-requests, il faudrait donc tout récupérer en définissant le paramètre state sur all

3
scas

Il existe un moyen d'obtenir une liste complète et vous le faites. Qu'utilisez-vous pour communiquer avec l'API? Je soupçonne que vous ne faites pas quelque chose correctement. Par exemple (il n'y a que 13 demandes de tirage ouvertes actuellement) en utilisant mon wrapper API (github3.py), j'obtiens toutes les demandes de tirage ouvertes. Un exemple de la façon de le faire sans mon wrapper dans python est:

import requests
r = requests.get('https://api.github.com/repos/torvalds/linux/pulls')
len(r.json()) == 13

et je peux aussi obtenir ce résultat (vaguement) dans cURL en comptant les résultats moi-même: curl https://api.github.com/repos/torvalds/linux/pulls.

Cependant, si vous rencontrez un référentiel avec plus de 25 (ou 30) demandes d'extraction, c'est un problème entièrement différent, mais ce n'est certainement pas ce que vous rencontrez maintenant.

2

L'API de recherche doit aider: https://help.github.com/enterprise/2.2/user/articles/searching-issues/

q = repo: org/nom est: pr ...

1
sibidiba

GitHub fournit un en-tête "Link" qui spécifie l'URL précédente, suivante et dernière pour récupérer les valeurs. Eg, réponse d'en-tête de lien, <https://api.github.com/repos/:owner/:repo/pulls?state=all&page=2>; rel="next", <https://api.github.com/repos/:owner/:repo/pulls?state=all&page=15>; rel="last"rel = "next" suggère le prochain ensemble de valeurs.

0
Neha Gupta