Class: Gitballs::Compressor
- Inherits:
-
Object
- Object
- Gitballs::Compressor
- Defined in:
- lib/gitballs/compressor.rb
Instance Attribute Summary collapse
-
#output_dir ⇒ Object
readonly
Returns the value of attribute output_dir.
-
#purl ⇒ Object
readonly
Returns the value of attribute purl.
-
#quiet ⇒ Object
readonly
Returns the value of attribute quiet.
Instance Method Summary collapse
- #cleanup_tarballs ⇒ Object
- #clear_working_dir ⇒ Object
- #commit_versions(versions) ⇒ Object
- #dir_size(path) ⇒ Object
- #download_tarballs(versions) ⇒ Object
- #fetch_and_sort_versions ⇒ Object
- #find_tarball(version_number) ⇒ Object
- #git_add_and_commit(version_number) ⇒ Object
- #init_git_repo ⇒ Object
-
#initialize(purl_string, output: nil, quiet: false) ⇒ Compressor
constructor
A new instance of Compressor.
- #log(message) ⇒ Object
- #optimize_repo ⇒ Object
- #run ⇒ Object
- #setup_directories ⇒ Object
- #stats ⇒ Object
- #tarball_extension(url) ⇒ Object
Constructor Details
#initialize(purl_string, output: nil, quiet: false) ⇒ Compressor
Returns a new instance of Compressor.
11 12 13 14 15 16 17 18 |
# File 'lib/gitballs/compressor.rb', line 11 def initialize(purl_string, output: nil, quiet: false) @purl = Purl.parse(purl_string) @output_dir = output || File.join(".", "gitballs", @purl.name) @quiet = quiet @client = Client.new @registry = Registry.new(@purl.type) @tarball_dir = File.join(@output_dir, ".tarballs") end |
Instance Attribute Details
#output_dir ⇒ Object (readonly)
Returns the value of attribute output_dir.
9 10 11 |
# File 'lib/gitballs/compressor.rb', line 9 def output_dir @output_dir end |
#purl ⇒ Object (readonly)
Returns the value of attribute purl.
9 10 11 |
# File 'lib/gitballs/compressor.rb', line 9 def purl @purl end |
#quiet ⇒ Object (readonly)
Returns the value of attribute quiet.
9 10 11 |
# File 'lib/gitballs/compressor.rb', line 9 def quiet @quiet end |
Instance Method Details
#cleanup_tarballs ⇒ Object
102 103 104 |
# File 'lib/gitballs/compressor.rb', line 102 def cleanup_tarballs FileUtils.rm_rf(@tarball_dir) end |
#clear_working_dir ⇒ Object
106 107 108 109 110 111 112 |
# File 'lib/gitballs/compressor.rb', line 106 def clear_working_dir Dir.chdir(@output_dir) do Dir.children(".").reject { |f| f == ".git" || f == ".tarballs" }.each do |entry| FileUtils.rm_rf(entry) end end end |
#commit_versions(versions) ⇒ Object
80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/gitballs/compressor.rb', line 80 def commit_versions(versions) log "Committing versions..." versions.each_with_index do |version, index| number = version["number"] tarball = find_tarball(number) next unless tarball log " [#{index + 1}/#{versions.size}] #{number}" clear_working_dir @registry.extract(tarball, @output_dir) git_add_and_commit(number) end end |
#dir_size(path) ⇒ Object
36 37 38 39 40 |
# File 'lib/gitballs/compressor.rb', line 36 def dir_size(path) return 0 unless File.directory?(path) `du -sk #{path}`.strip.split.first.to_i * 1024 end |
#download_tarballs(versions) ⇒ Object
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/gitballs/compressor.rb', line 59 def download_tarballs(versions) log "Downloading #{versions.size} versions..." versions.each_with_index do |version, index| number = version["number"] url = version["download_url"] next unless url log " [#{index + 1}/#{versions.size}] #{number}" extension = tarball_extension(url) destination = File.join(@tarball_dir, "#{number}#{extension}") @client.download_tarball(url, destination) rescue Error => e log " skipping: #{e.message}" end end |
#fetch_and_sort_versions ⇒ Object
48 49 50 51 52 53 54 55 56 57 |
# File 'lib/gitballs/compressor.rb', line 48 def fetch_and_sort_versions log "Fetching versions..." versions = @client.fetch_versions(@purl.to_s) versions.sort_by do |v| Vers::Version.new(v["number"]) rescue ArgumentError Vers::Version.new("0.0.0") end end |
#find_tarball(version_number) ⇒ Object
121 122 123 |
# File 'lib/gitballs/compressor.rb', line 121 def find_tarball(version_number) Dir.glob(File.join(@tarball_dir, "#{version_number}.*")).first end |
#git_add_and_commit(version_number) ⇒ Object
114 115 116 117 118 119 |
# File 'lib/gitballs/compressor.rb', line 114 def git_add_and_commit(version_number) Dir.chdir(@output_dir) do system("git", "add", "-A", out: File::NULL, err: File::NULL, exception: true) system("git", "commit", "-m", version_number, "--allow-empty", out: File::NULL, err: File::NULL, exception: true) end end |
#init_git_repo ⇒ Object
75 76 77 78 |
# File 'lib/gitballs/compressor.rb', line 75 def init_git_repo log "Initializing git repository..." system("git", "init", @output_dir, out: File::NULL, err: File::NULL, exception: true) end |
#log(message) ⇒ Object
136 137 138 |
# File 'lib/gitballs/compressor.rb', line 136 def log() puts unless @quiet end |
#optimize_repo ⇒ Object
94 95 96 97 98 99 100 |
# File 'lib/gitballs/compressor.rb', line 94 def optimize_repo log "Optimizing repository..." Dir.chdir(@output_dir) do system("git", "gc", "--aggressive", "--prune=now", out: File::NULL, err: File::NULL, exception: true) system("git", "rm", "-rf", ".", out: File::NULL, err: File::NULL, exception: true) end end |
#run ⇒ Object
20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/gitballs/compressor.rb', line 20 def run setup_directories versions = fetch_and_sort_versions download_tarballs(versions) @tarball_size = dir_size(@tarball_dir) init_git_repo commit_versions(versions) optimize_repo cleanup_tarballs stats end |
#setup_directories ⇒ Object
42 43 44 45 46 |
# File 'lib/gitballs/compressor.rb', line 42 def setup_directories FileUtils.rm_rf(@output_dir) FileUtils.mkdir_p(@output_dir) FileUtils.mkdir_p(@tarball_dir) end |
#stats ⇒ Object
32 33 34 |
# File 'lib/gitballs/compressor.rb', line 32 def stats Stats.new(@output_dir, @tarball_size) end |
#tarball_extension(url) ⇒ Object
125 126 127 128 129 130 131 132 133 134 |
# File 'lib/gitballs/compressor.rb', line 125 def tarball_extension(url) case url when /\.gem$/ then ".gem" when /\.tgz$/ then ".tgz" when /\.tar\.gz$/ then ".tar.gz" when /\.zip$/ then ".zip" when /\.nupkg$/ then ".nupkg" else ".tar.gz" end end |