Class: Fetch
Instance Method Summary collapse
- #do_install(filename) ⇒ Object
- #fetch_package(package, output = true) ⇒ Object
- #get_file(url, file) ⇒ Object
-
#initialize(root = '/') ⇒ Fetch
constructor
A new instance of Fetch.
- #install_package(package) ⇒ Object
Constructor Details
#initialize(root = '/') ⇒ Fetch
Returns a new instance of Fetch.
30 31 32 33 34 35 36 |
# File 'lib/fetch.rb', line 30 def initialize(root = '/') @root = root rm_r("/tmp/post") if File.exists?("/tmp/post") mkdir("/tmp/post") cd("/tmp/post") @database = PackageDataBase.new(@root) end |
Instance Method Details
#do_install(filename) ⇒ Object
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/fetch.rb', line 78 def do_install(filename) extract(filename) rm(filename) new_files = Dir["**/*"].reject {|file| File.directory?(file) } new_directories = Dir["**/*"].reject {|file| File.file?(file) } @database.install_package(".packageData", ".remove", new_files) new_directories.each { |directory| mkdir_p("#{@root}/#{directory}") } for file in new_files install(file, "#{@root}/#{file}") system("chmod +x #{@root}/#{file}") if file.include?("/bin/") end install_script = File.read(".install") eval(install_script) end |
#fetch_package(package, output = true) ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/fetch.rb', line 55 def fetch_package(package, output = true) mkdir_p("/tmp/post/#{package}") sync_data = @database.get_sync_data(package) repo_url = @database.get_url(@database.get_repo(package)) file = "#{package}-#{sync_data['version']}-#{sync_data['architecture']}.pst" url = ("#{repo_url}/#{file}") begin if url.include?('file://') url.sub!("file://", '') cp(url, "/tmp/post/#{package}/#{file}") cp(url + ".sha256", "/tmp/post/#{package}/#{file}.sha256") else get_file(url, "/tmp/post/#{package}/#{file}") get_file(url + ".sha256", "/tmp/post/#{package}/#{file}.sha256") end rescue raise IncompleteError, "Error: '#{url}' does not exist." end end |
#get_file(url, file) ⇒ Object
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/fetch.rb', line 38 def get_file(url, file) url = URI.parse(url) filename = File.basename(file) saved_file = File.open(file, 'w') Net::HTTP.new(url.host, url.port).request_get(url.path) do |response| length = response['Content-Length'].to_i saved_file_length = 0.0 response.read_body do |fragment| saved_file << fragment saved_file_length += fragment.length progress = (saved_file_length / length) * 100 end end saved_file.close() end |
#install_package(package) ⇒ Object
94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/fetch.rb', line 94 def install_package(package) cd("/tmp/post/#{package}") sync_data = @database.get_sync_data(package) filename = "#{package}-#{sync_data['version']}-#{sync_data['architecture']}.pst" file_hash = Digest::SHA256.hexdigest(open(filename, "r").read()) real_hash = File.open("#{filename}.sha256").read().strip() unless (file_hash == real_hash) raise MismatchedHash, "Error: #{filename} is corrupt." end rm("#{filename}.sha256") do_install(filename) end |