-
-
Save akumria/3405534 to your computer and use it in GitHub Desktop.
| #!/usr/bin/env python | |
| import os | |
| import urllib2 | |
| import json | |
| import subprocess | |
| user=None | |
| repo=None | |
| github_cmd="git config --get remote.github.url".split(" ") | |
| origin_cmd="git config --get remote.origin.url".split(" ") | |
| # we want to determine the user / repository name | |
| # my convention is that my own projects use 'github' as the remote | |
| # origin when I created it. And, obviously, a clone will use 'origin'. | |
| # so try them each | |
| try: | |
| github = subprocess.check_output(github_cmd).strip() | |
| user, repo = github.split('/')[-2:] | |
| user = user.lstrip('git@github.com:') | |
| repo = repo.rstrip('.git') | |
| except subprocess.CalledProcessError: | |
| pass # ok, so no remote called 'github', let's try origin | |
| if user is None and repo is None: | |
| try: | |
| origin = subprocess.check_output(origin_cmd).strip() | |
| user, repo = origin.split('/')[-2:] | |
| repo = repo.rstrip('.git') | |
| except subprocess.CalledProcessError: | |
| print("Could not determine user or repo.") | |
| os.exit(-1) | |
| github_url='https://api.github.com/repos/%s/%s/forks' | |
| resp = urllib2.urlopen(github_url % (user, repo)) | |
| if resp.code == 200: | |
| content = resp.read() | |
| data = json.loads(content) | |
| for remote in data: | |
| remote_add_cmd="git remote add %s %s" % (remote['owner']['login'], remote['clone_url']) | |
| print remote_add_cmd | |
| subprocess.call(remote_add_cmd.split(" ")) | |
| fetch_all_cmd="git fetch --all" | |
| print fetch_all_cmd | |
| subprocess.call(fetch_all_cmd.split(" ")) |
Github forks api returns this header, so the script does not get all results
Link: https://api.github.com/repositories/6755841/forks?page=2; rel="next", https://api.github.com/repositories/6755841/forks?page=11; rel="last"
I've added a module find_forks based on this gist with python 3 support and it gets all forks.
This API might not have been available when this gist was created:
https://developer.github.com/v3/repos/forks/
curl -i https://api.github.com/repos/firebase/firepad/forks
I made a little bash + nodejs script to add all the forks as remotes, so we can pull down all the forks at once.
It generates commands like this:
git remote add ... git://..........
git remote add ... git://..........
git fetch --all
After running the script, you can use something like this to get an overview of what changed on all the different forks:
git log --remotes --stat --oneline --graph
Got the 404 like @johndpope but fixed it by changing:
user.lstrip('git@github.com:')into
user.replace('git@github.com:', '')@mdamien, the gist is fairly old. You might want to use the repository instead:
See: https://github.com/akumria/findforks or https://gitlab.com/akumria/findforks
this is working https://gist.github.com/JanX2/f7fd01bbd37a863cbd0c6c3db6c37ca2
when I clone this repo https://github.com/muhku/calendar-ui.git - it fails. couldn't work it out I'm afraid.
but this url definitely works
https://api.github.com/repos/muhku/calendar-ui/
File "./find-forks.py", line 35, in
resp = urllib2.urlopen(github_url % (user, repo))
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 126, in urlopen
return _opener.open(url, data, timeout)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 400, in open
response = meth(req, response)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 513, in http_response
'http', request, response, code, msg, hdrs)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 438, in error
return self._call_chain(_args)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 372, in _call_chain
result = func(_args)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 521, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 404: Not Found