Skip to content

Instantly share code, notes, and snippets.

@jlopp
Created March 14, 2020 12:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jlopp/5aa87ed33e97ad58f54ace65e9b0ece3 to your computer and use it in GitHub Desktop.
Save jlopp/5aa87ed33e97ad58f54ace65e9b0ece3 to your computer and use it in GitHub Desktop.
Find all the closed unmerged PRs for a given repository and count their total lines of code
# For a given repository this script iterates over all closed PRs
# and sums up the total number of lines of code from unmerged PRs
# that had been proposed to be added and deleted.
# This script requires installing a dependency: pip install PyGithub
from github import Github
import time
import sys
# Visual progress bar since this script takes ~1 second per PR to run
def progress(count, total):
bar_len = 60
filled_len = int(round(bar_len * count / float(total)))
percent = round(100.0 * count / float(total), 1)
bar = '=' * filled_len + '-' * (bar_len - filled_len)
sys.stdout.write('[%s] %s%s\r' % (bar, percent, '%'))
sys.stdout.flush()
# Authenticate and query for closed PRs in a given repository
g = Github("yourGithubTokenGoesHere")
repo = g.get_repo("bitcoin/bitcoin")
pulls = repo.get_pulls(state='closed', base='master')
# Variables for which we want to keep track
count = 0
totalCount = pulls.totalCount
unmergedPRCount = 0
totalAdditions = 0
totalDeletions = 0
for pr in pulls:
if (pr.merged == False):
unmergedPRCount += 1
totalAdditions += pr.additions
totalDeletions += pr.deletions
# Slow down if we are approaching the hourly query limit
if (int(pr._headers["x-ratelimit-remaining"]) < 600):
time.sleep(6)
count += 1
progress(count, totalCount)
print("Found " + str(unmergedPRCount) + " unmerged closed PRs")
print(str(totalAdditions) + " total added lines of code")
print(str(totalDeletions) + " total deleted lines of code")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment