-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgithub_clone_all.rb
More file actions
executable file
·45 lines (42 loc) · 1.4 KB
/
github_clone_all.rb
File metadata and controls
executable file
·45 lines (42 loc) · 1.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#!/usr/bin/env ruby
#-------------------------------------------------------------------------------
# github_clone_all - clone all of your repositories hosted on github
#
# requires: json gem and client machine's public key registered on github
#
# usage: ./github_clone_all.rb username
# or enter username at prompt
#-------------------------------------------------------------------------------
require 'rubygems'
require 'open-uri'
require 'json'
# get username -----------------------------------------------------------------
username = ""
if ARGV[0] then
username = ARGV[0]
else
print "github username: "
while (c = STDIN.getc).chr != "\n"
username += c.chr
end
end
# get repositories -------------------------------------------------------------
#response = Net::HTTP.get(URI.parse("https://api.github.com/users/#{username}/repos"))
response = ""
open("https://api.github.com/users/#{username}/repos?per_page=1024") { |io|
response = io.read
}
repositories = JSON.parse(response)
# clone repositories -----------------------------------------------------------
if repositories.kind_of?(Array)
puts "found #{repositories.size} repositories"
repositories.each{ |r|
repo_name = r["name"]
repo_addr = "git@github.com:#{username}/#{repo_name}.git"
puts "\ncloning #{repo_addr}"
result = %x[git clone #{repo_addr}]
puts "\t#{result}"
}
else
puts "Error: " + response
end