class RepoMate::Package
Class for reading debian packages
Attributes
architecture[R]
basename[R]
component[R]
controlfile[R]
fullname[R]
name[R]
newbasename[R]
suitename[R]
version[R]
Public Class Methods
new(fullname, suitename, component)
click to toggle source
Init
# File lib/repomate/package.rb, line 17 def initialize(fullname, suitename, component) @fullname = fullname @suitename = suitename @component = component @basename = File.basename(fullname) @mtime = File.mtime(fullname) @pkgdbfile = File.join(Cfg.rootdir, "packages.db") @pkgdb = Database.new(@pkgdbfile) check_package create_table @controlfile = read_controlfile @name = @controlfile['Package'] @version = @controlfile['Version'] @architecture = @controlfile['Architecture'] @newbasename = "#{@name}-#{@version}_#{@architecture}.deb" end
Public Instance Methods
create_checksums()
click to toggle source
Creates the checksums for a package
# File lib/repomate/package.rb, line 61 def create_checksums # puts "Ins: #{@basename}" md5 = Digest::MD5.file(@fullname).to_s sha1 = Digest::SHA1.file(@fullname).to_s sha256 = Digest::SHA2.new(256).file(@fullname).to_s @pkgdb.query("insert into checksums values ( datetime('now'), '#{@basename}', '#{@suitename}', '#{@mtime.iso8601}', '#{md5}', '#{sha1}', '#{sha256}' )") end
create_table()
click to toggle source
Create the package table
# File lib/repomate/package.rb, line 37 def create_table sql = "create table if not exists checksums ( date varchar(25), basename varchar(70), suitename varchar(20), mtime varchar(25), md5 varchar(32), sha1 varchar(40), sha256 varchar(64) )" @pkgdb.query(sql) end
delete_checksums()
click to toggle source
Gets checksums for the given package
# File lib/repomate/package.rb, line 70 def delete_checksums # puts "Del: #{@basename}" @pkgdb.query("delete from checksums where basename = '#{@basename}'") end
load_checksums()
click to toggle source
Gets checksums for the given package
# File lib/repomate/package.rb, line 51 def load_checksums result = [] @pkgdb.query("select md5, sha1, sha256 from checksums where basename = '#{@basename}' and mtime = '#{@mtime.iso8601}' and suitename = '#{@suitename}'").each do |row| result = row end result end
Protected Instance Methods
check_package()
click to toggle source
Checks if the given package is a debian package
# File lib/repomate/package.rb, line 78 def check_package unless `file --dereference #{@fullname}` =~ /Debian binary package/i puts "File does not exist or is not a Debian package!" false end end
read_controlfile()
click to toggle source
Extracts the controlfile and returns is
# File lib/repomate/package.rb, line 86 def read_controlfile gzbasename = "control.tar.gz" basename = "control" tmpdir = File.expand_path "#{Dir.tmpdir}/#{Time.now.to_i}#{rand(1000)}/" gzfullname = File.join(tmpdir, gzbasename) fullname = File.join(tmpdir, basename) controlfile = {} FileUtils.mkdir_p(tmpdir) begin raise "Could not untar" unless system "ar -p #{@fullname} #{gzbasename} > #{gzfullname}" raise Errno::ENOENT, "Package file does not exist" unless File.exists?(gzfullname) raise "Could not untar" unless system "tar xfz #{gzfullname} -C #{tmpdir}" File.open(fullname) do |file| while(line = file.gets) line =~ %r{([a-zA-Z\-]+):\s(.*)} controlfile[$1] = $2 end end ensure FileUtils.rm_rf(tmpdir) end controlfile end