File indexing completed on 2024-12-01 10:56:11

0001 module Debian
0002   # debian/source representation
0003   class Source
0004     # Represents a dpkg-source format. See manpage.
0005     class Format
0006       attr_reader :version
0007       attr_reader :type
0008 
0009       def initialize(str)
0010         @version = '1'
0011         @type = nil
0012         parse(str) if str
0013       end
0014 
0015       def to_s
0016         return @version unless type
0017         "#{version} (#{type})"
0018       end
0019 
0020       private
0021 
0022       def parse(str)
0023         str = str.read if str.respond_to?(:read)
0024         str = File.read(str) if File.exist?(str)
0025         data = str.strip
0026         match = data.match(/(?<version>[^\s]+)(\s+\((?<type>.*)\))?/)
0027         @version = match[:version]
0028         @type = match[:type].to_sym if match[:type]
0029       end
0030     end
0031 
0032     attr_reader :format
0033 
0034     def initialize(package_path)
0035       @package_path = package_path
0036       raise 'not a package path' unless Dir.exist?("#{package_path}/debian")
0037       parse
0038     end
0039 
0040     private
0041 
0042     def parse
0043       @format = Format.new("#{@package_path}/debian/source/format")
0044     end
0045   end
0046 end