Skip to content

Instantly share code, notes, and snippets.

@jamesbrink
Last active August 29, 2015 13:57
Show Gist options
  • Save jamesbrink/9924246 to your computer and use it in GitHub Desktop.
Save jamesbrink/9924246 to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby
# Simple script to pull down all the repositories of a github user
require 'net/http'
require 'json'
@github_api_base_uri = 'https://api.github.com/users'
def get_repos(username,page)
uri = URI.parse("#{@github_api_base_uri}/#{username}/repos")
uri.query = URI.encode_www_form({:page => page})
puts "Pulling data from #{uri}"
get_request = Net::HTTP::Get.new(uri)
get_request['Content-Type'] = 'application/json'
get_request['Accept'] = 'application/vnd.github.v3+json'
http_request = Net::HTTP.new(uri.hostname, uri.port)
http_request.use_ssl = true
response = http_request.start do |http|
http.request(get_request)
end
repos = JSON.parse(response.body)
if repos.count > 0
repos.each do |repo|
clone_repo(repo)
end
page += 1
get_repos(username,page)
end
end
def clone_repo(repo)
username = repo['owner']['login']
if not File.directory?(username)
Dir.mkdir(username)
`cd #{username} && git init`
end
if not File.directory?("#{repo['name']}")
clone = system("cd #{username} && git submodule add #{repo["git_url"]}")
end
end
if ARGV.empty?
puts "Usage #{__FILE__} [github.com username]"
puts "Example: #{__FILE__} jamesbrink"
puts "This will create a directory jamesbrink in your current directory"
puts "All repositories will be added into that directory as submodules."
else
ARGV.each do |username|
get_repos(username,1)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment