Sur l'API GitHub - quel est le meilleur moyen d'obtenir le dernier message de validation associé à chaque fichier?
Donc autant que je le comprends, les messages sont associés avec s'engage. Mais quand vous regardez un repo GitHub il obligeamment listes le message par chaque fichier, date de sa dernière modification.
Je voudrais répliquer que dans un site web vue d'une mise en pension, j'ai. En regardant le GitHub de l'api, il me semble que la seule façon d'obtenir cette info est à télécharger tous les commits (qui peut être paginée), et de travailler à partir de les plus récents attribution des messages de commit des fichiers dans votre cache local, d'aller plus loin, et plus loin, jusqu'à ce que vous avez le message pour chaque fichier, éventuellement, pour la première commettre, si l'un des fichiers n'ont pas été modifiés depuis la première commettre
Question est, est-ce le bon moyen de le faire? N'est-ce pas tuer même les 5000/h quota?
source d'informationauteur Marcos Scriven
Vous devez vous connecter pour publier un commentaire.
Ok, après, s'imaginant que ce que vous avez besoin est le dernier message de validation pour chaque fichier, voici ce que vous pouvez faire.
Tout d'abord, obtenir la liste des fichiers dans votre référentiel. Pour ce faire, vous devez:
1) extraction de l'objet de référence de la branche que vous souhaitez ajouter à la liste des fichiers:
Vous souhaitez sans doute la branche master, c'est donc un exemple de la demande que vous ferez:
La réponse que vous recevrez ressembler à ceci:
2) récupérer l'objet commit que les points de référence, à l'aide de la
object.url
propriété de la réponse que vous avez reçue à l'étape précédente:La réponse que vous recevrez ressembler à ceci:
3) récupérer l'objet de l'arborescence de la livraison de l'objet récupéré dans l'étape précédente. Vous pourrez le faire en suivant les
tree.url
lien fourni dans la réponse de l'étape précédente:La réponse ressemblera à ceci:
Ils sont tous les fichiers et dossiers dans le référentiel. Notez cependant que pour les dossiers, vous aurez besoin de façon récursive de récupérer le dossier de l'arborescence de l'objet pour obtenir la liste des fichiers dans le dossier. Dans la réponse ci-dessus, le
examples
est un dossier que vous pouvez voir par l'arbre de la valeur de la propriété type. Donc, vous le feriez pour une autre requête GET sur l'url fournie avec le dossier:Une approche alternative est d'obtenir la liste des tous les fichiers (dans tous les dossiers) avec juste une demande, à l'aide de la
recursive=1
paramètre, tel que décrit ici. Je vous suggère d'utiliser cette approche car elle nécessite juste une simple requête HTTP.Prochaine, maintenant que vous avez la liste des fichiers et dossiers dans le repo, vous obtenir le dernier commit qui a changé de chacun des fichiers/dossiers. Pour le faire, cela demande
Ainsi, par exemple, ceci est une demande pour récupérer le s'engage pour la
examples
dossier mentionné ci-dessus:La réponse, vous obtiendrez une liste d'objet commit, et il vous suffit de regarder le premier objet de la liste (puisque vous êtes intéressé par ce dernier de s'engager pour le fichier) et de récupérer les
commit.message
propriété afin d'obtenir le message dont vous avez besoin:Dans ce cas, le message pour le dernier commit qui a changé le dossier
examples
est "changer de mode".Donc, fondamentalement, vous avez besoin de faire 3 requêtes HTTP pour récupérer la liste des fichiers, puis 1 de la requête HTTP pour chaque fichier et dossier. La mauvaise nouvelle est que si vous avez beaucoup de fichiers, vous allez faire beaucoup de requêtes HTTP. La bonne nouvelle est que vous pouvez mettre en cache les réponses, de sorte que vous n'avez pas besoin de faire des demandes si rien n'a changé (voir ici pour plus d'info). Aussi, vous ne serez pas récupérer tous les messages de validation à la fois, vous pourrez les récupérer en tant que l'utilisateur navigue à travers les dossiers (comme sur GitHub que vous cliquez sur les dossiers). Vous devriez donc être en mesure de rester dans la limite de 5000 demandes facilement.
Espérons que cette aide! Et laissez-moi savoir si vous trouvez un moyen plus facile de le faire :). Je ne sais pas si il y a un moyen de réaliser cela avec juste 1-2 demandes, ce qui est probablement ce que vous attendiez.
Je suis d'inscription s'engage sur le référentiel et que l'accaparement de la première et de la lecture, c'est SHA et il fonctionne très bien:
https://developer.github.com/v3/repos/commits/#list-commits-on-a-repository
En Aller, il ressemble à quelque chose comme ceci:
À la recherche de la construction des liens permanents, j'ai trouvé un de la manière la plus simple pour récupérer les commettre sha consiste à analyser le code html de la page.
Avantages:
Il y a un lien appelé
Permalink
sur chaque page du fichier.Si vous êtes à la recherche de moyens pour identifier ce lien
il s'agit de la classe
.js-permalink-shortcut
et aussi ladata-hotkey="y"
attribut, tel que décrit dans Obtenir des liens permanents vers des fichiers - Github.Donc, dans cet exemple, le sha est
a6f4038336ff41463ad527b4ff4fda45642ebc6d
.Note, il sera toujours rendu, même si vous êtes déjà sur ce commit.
Dans le cas où quelqu'un aime à construire un permalien, le hachage de l'url (par exemple, la ligne des références comme
#L437-L441
) doit être maintenu (en annexe) manuellement.