Class: DebImporter::Release
- Inherits:
-
Object
- Object
- DebImporter::Release
- Defined in:
- lib/deb_importer.rb
Overview
This module imports information about packages of a Linux distribution that uses the DEB package format like Debian, Ubuntu or Mint.
It starts by loading the Release file of a release to get information about available components and architectures.
Next it loads the Packages lists (prefers bz2, falls back to .gz or even the uncompressed version).
Instance Attribute Summary collapse
-
#architectures ⇒ Object
readonly
Returns the value of attribute architectures.
-
#codename ⇒ Object
readonly
Returns the value of attribute codename.
-
#components ⇒ Object
readonly
Returns the value of attribute components.
-
#description ⇒ Object
readonly
Returns the value of attribute description.
-
#files ⇒ Object
readonly
Returns the value of attribute files.
-
#origin ⇒ Object
readonly
Returns the value of attribute origin.
-
#version ⇒ Object
readonly
Returns the value of attribute version.
Instance Method Summary collapse
-
#find_and_open_compressed_url(base_url) ⇒ Object
Look for the file or URL in various compressed formats (e.g. bz2, gz) and fall back to plain text format.
-
#i18n(component, language) ⇒ Object
Get package information from translation (i18n) files.
-
#initialize(dist_url) ⇒ Release
constructor
Load and parse a Release file of an APT repository.
-
#packages(component, architecture) ⇒ Object
Try to load the Packages file for a certain component (e.g. “main”) and architecture (e.g. “amd64”).
Constructor Details
#initialize(dist_url) ⇒ Release
Load and parse a Release file of an APT repository
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/deb_importer.rb', line 20 def initialize(dist_url) @dist_url = dist_url release_url = dist_url + "/Release" Rails.logger.debug "Loading Release file from #{release_url}" open(release_url) do |release_data| fields = get_fields(release_data) @architectures = fields[:Architectures] @components = fields[:Components] @description = fields[:Description] @codename = fields[:Codename] @origin = fields[:Origin] @version = fields[:Version] # TODO: check sizes and checksums end # open end |
Instance Attribute Details
#architectures ⇒ Object (readonly)
Returns the value of attribute architectures.
17 18 19 |
# File 'lib/deb_importer.rb', line 17 def architectures @architectures end |
#codename ⇒ Object (readonly)
Returns the value of attribute codename.
17 18 19 |
# File 'lib/deb_importer.rb', line 17 def codename @codename end |
#components ⇒ Object (readonly)
Returns the value of attribute components.
17 18 19 |
# File 'lib/deb_importer.rb', line 17 def components @components end |
#description ⇒ Object (readonly)
Returns the value of attribute description.
17 18 19 |
# File 'lib/deb_importer.rb', line 17 def description @description end |
#files ⇒ Object (readonly)
Returns the value of attribute files.
17 18 19 |
# File 'lib/deb_importer.rb', line 17 def files @files end |
#origin ⇒ Object (readonly)
Returns the value of attribute origin.
17 18 19 |
# File 'lib/deb_importer.rb', line 17 def origin @origin end |
#version ⇒ Object (readonly)
Returns the value of attribute version.
17 18 19 |
# File 'lib/deb_importer.rb', line 17 def version @version end |
Instance Method Details
#find_and_open_compressed_url(base_url) ⇒ Object
Look for the file or URL in various compressed formats (e.g. bz2, gz) and fall back to plain text format.
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/deb_importer.rb', line 51 def find_and_open_compressed_url(base_url) Rails.logger.debug "Looking for files at URL #{base_url} with different compressions" for suffix in ['.bz2', '.gz', ''] begin begin url = "#{base_url}#{suffix}" Rails.logger.debug "Checking if file at #{url} is available" file = open(url) rescue OpenURI::HTTPError => e Rails.logger.debug "Loading #{url} lead to error #{e}. skipping." next end # Decompress file depending on its filename suffix case suffix when '.bz2' file = Bzip2::Reader.new(file) when '.gz' file = Zlib::GzipReader.new(file) end Rails.logger.debug "File containing translations is: #{file}" return file rescue Errno::ENOENT Rails.logger.debug "URL #{url} could not be opened. Skipping." end end Rails.logger.error "No file found at #{url} and various compression extensions." return nil end |
#i18n(component, language) ⇒ Object
Get package information from translation (i18n) files. Returns an enumerator of packages.
39 40 41 42 43 44 45 46 47 |
# File 'lib/deb_importer.rb', line 39 def i18n(component, language) url = "#{@dist_url}/#{component}/i18n/Translation-en" file = find_and_open_compressed_url(url) if file return get_paragraphs(file) else return [] end end |
#packages(component, architecture) ⇒ Object
Try to load the Packages file for a certain component (e.g. “main”) and architecture (e.g. “amd64”)
85 86 87 88 89 90 91 |
# File 'lib/deb_importer.rb', line 85 def packages(component, architecture) # create path like "main/binary-amd64/Packages" packages_path = "#{@dist_url}/#{component}/binary-#{architecture}/Packages" Rails.logger.debug "Loading packages from #{packages_path}" file = find_and_open_compressed_url(packages_path) return get_paragraphs(file) end |