Skip to content

Instantly share code, notes, and snippets.

@obelisk68
Last active May 2, 2017 08:22
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 obelisk68/30310187063e0cc922d6b955dd048914 to your computer and use it in GitHub Desktop.
Save obelisk68/30310187063e0cc922d6b955dd048914 to your computer and use it in GitHub Desktop.
Created by RubyPico at Tue May 02 17:21:13 2017
def bget(url, token)
if token
ret = Browser.get(url, header: { "Authorization" => "token #{token}"})
else
ret = Browser.get(url)
end
JSON::parse(ret)
end
def mkdir_p(dir)
Dir.mkdir(dir) unless File.exists?(dir)
end
def github_download(name, dir, token=nil)
url = "https://api.github.com/repos/#{name}/git/trees/master?recursive=1"
ret = bget(url, token)
raise "truncated == true" if ret["truncated"]
ret["tree"].each do |e|
case e["type"]
when "blob"
puts e["path"]
tree = bget(e["url"], token)
raise unless tree["encoding"] == "base64"
File.open(File.join(dir, e["path"]), "w") do |f|
data = Base64.decode(tree["content"].gsub("\n", ""))
# p tree["content"]
# p data
f.write(data)
end
when "tree"
dst = File.join(dir, e["path"])
mkdir_p(dst)
end
end
end
# Initialize
begin
token = "***"
rescue NameError
# token is nil
end
# Mainloop
loop do
args = "obelisk68/rubypico -u".split
opts = {}
args.delete_if do |e|
if e == "-u"
opts[:update] = true
true
else
false
end
end
args.each do |repo_name|
dirname = File.basename(repo_name)
repo_name = "rubypico/#{repo_name}" if dirname == repo_name
dir = File.join(Dir.documents, dirname)
if opts[:update] || !File.exists?(dir)
mkdir_p(dir)
github_download(repo_name, dir, token)
else
puts "Already exits '#{dirname}'."
end
end
break
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment