Skip to content

Instantly share code, notes, and snippets.

@yershalom
Created December 17, 2017 13:19
Show Gist options
  • Save yershalom/a7c08f9441d1aadb13777bce4c7cdc3b to your computer and use it in GitHub Desktop.
Save yershalom/a7c08f9441d1aadb13777bce4c7cdc3b to your computer and use it in GitHub Desktop.
Easy way to calculate commits count from the github api
import requests
base_url = 'https://api.github.com'
def get_all_commits_count(owner, repo, sha):
first_commit = get_first_commit(owner, repo)
compare_url = '{}/repos/{}/{}/compare/{}...{}'.format(base_url, owner, repo, first_commit, sha)
commit_req = requests.get(compare_url)
commit_count = commit_req.json()['total_commits'] + 1
print(commit_count)
return commit_count
def get_first_commit(owner, repo):
url = '{}/repos/{}/{}/commits'.format(base_url, owner, repo)
req = requests.get(url)
json_data = req.json()
if req.headers.get('Link'):
page_url = req.headers.get('Link').split(',')[1].split(';')[0].split('<')[1].split('>')[0]
req_last_commit = requests.get(page_url)
first_commit = req_last_commit.json()
first_commit_hash = first_commit[-1]['sha']
else:
first_commit_hash = json_data[-1]['sha']
return first_commit_hash
def main():
owner = 'getredash'
repo = 'redash'
# Took the last commit, Can do it automatically also but keeping it open
sha = '5ba15ef35074a88daa5032ec4bec34d3a22a607e'
get_all_commits_count(owner, repo, sha)
if __name__ == '__main__':
main()
@0penBrain
Copy link

@shashi1iitk Humm that's what is in my Gist in my comment above (2 years ago) and that most probably inspire your answer on SO. I may be mistaken, but quoting the source there would be fair.

@arye321
Copy link

arye321 commented Aug 9, 2023

need api key tho

import requests

owner = "yt-dlp"
name = "yt-dlp"
access_token = "YOUR_ACCESS_TOKEN"

query = f'''
{{
  repository(owner: "{owner}", name: "{name}") {{
    defaultBranchRef {{
      target {{
        ... on Commit {{
          history(first: 0) {{
            totalCount
          }}
        }}
      }}
    }}
  }}
}}
'''

headers = {'Authorization': f'Bearer {access_token}'}
url = 'https://api.github.com/graphql'

response = requests.post(url, json={'query': query}, headers=headers)
data = response.json()

commits_count = data['data']['repository']['defaultBranchRef']['target']['history']['totalCount']
print(f"Number of commits: {commits_count}")

@eonist
Copy link

eonist commented Sep 22, 2023

here is one if you want total commits for a user the last 24h across all repos on GitHub.

#!/bin/bash

# Prompt the user to enter their GitHub username
read -p "Enter your GitHub username: " username

# Get the total commit count for the user
commit_count=$(curl -s "https://api.github.com/users/$username/events" | grep -c "PushEvent")

# Print the total commit count
echo "Total commit count for $username: $commit_count"

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment