Как я могу получить количество коммитов из Github API до определенной ветки

Я хочу узнать, сколько коммитов было сделано до создания определенной ветки из Github API.

Например, в git cli я делаю: git log --no-merges --oneline ${branchHash} | wc -l и вижу номер.

В API Github есть ограничение в 100, поэтому, если у меня больше 100 коммитов, я не могу получить их все.

Есть ли какое-нибудь решение в этом случае?


person yershalom    schedule 10.12.2017    source источник


Ответы (2)


Я написал небольшую вещь, чтобы решить эту проблему:

Gist «Простой способ подсчитать количество коммитов с помощью GitHub API».

Он основан на использовании compare URL GitHub Commit API, используя поле total_commits:

compare_url = '{}/repos/{}/{}/compare/{}...{}'.format(base_url, owner, repo, first_commit, sha)

commit_count = commit_req.json()['total_commits'] + 1
person yershalom    schedule 17.12.2017
comment
+1. Ответы, содержащие только ссылки, не приветствуются (meta.stackexchange.com/q/8231/6309), поэтому я взял Можете добавить несколько ссылок, ссылок и деталей: пожалуйста, отредактируйте еще немного, если вы думаете, что я что-то пропустил. - person VonC; 17.12.2017

Чтобы избежать выполнения нескольких запросов, вы можете использовать GraphQL one, аналогичный этот или this one: он получит все коммиты для данной ветки, что позволит вам их подсчитать.

{
  repository(name: "sickvim", owner: "jonathansick") {
    ref(qualifiedName: "master") {
      target {
        ... on Commit {
          id
          history(first: 5) {
            pageInfo {
              hasNextPage
            }
            edges {
              node {
                oid
              }...
person VonC    schedule 10.12.2017
comment
Спасибо, дружище, но я попробовал что-то вроде этого и получил следующий ответ: { "data": null, "errors": [ { "message": "Requesting 101 records on the connection exceeds the `first` limit of 100 records." } ] } - person yershalom; 10.12.2017
comment
Привет, Использовал это: { repository(name: "sickvim", owner: "jonathansick") { ref(qualifiedName: "master") { target { ... on Commit { id history(first: 101) { pageInfo { hasNextPage } edges { node { messageHeadline oid message author { name email date } } } } } } } } } - person yershalom; 10.12.2017