module Polisher::RPM::SpecParser::ClassMethods
Public Instance Methods
default_metadata()
click to toggle source
# File lib/polisher/rpm/spec/parser.rb, line 14 def default_metadata {:contents => "", :requires => [], :build_requires => [], :pkg_excludes => {}, :pkg_files => {}, :changelog => "", :changelog_entries => []} end
parse(spec)
click to toggle source
Parse the specified rpm spec and return new RPM::Spec
instance from metadata
@see [Polisher::RPM::SpecConstants::METADATA_IDS] @param [String] string contents of spec to parse @return [Polisher::RPM::Spec] spec instantiated from rpmspec metadata
# File lib/polisher/rpm/spec/parser.rb, line 29 def parse(spec) in_subpackage = false in_changelog = false in_files = false subpkg_name = nil meta = default_metadata.merge(:contents => spec) spec.each_line do |l| if l =~ RPM::Spec::COMMENT_MATCHER # TODO: support optional gem prefix elsif l =~ RPM::Spec::GEM_NAME_MATCHER meta[:gem_name] = $1.strip meta[:gem_name] = $1.strip elsif l =~ RPM::Spec::SPEC_NAME_MATCHER && $1.strip != "%{gem_name}" meta[:gem_name] = $1.strip elsif l =~ RPM::Spec::SPEC_VERSION_MATCHER meta[:version] = $1.strip elsif l =~ RPM::Spec::SPEC_RELEASE_MATCHER meta[:release] = $1.strip elsif l =~ RPM::Spec::SPEC_SUBPACKAGE_MATCHER subpkg_name = $1.strip in_subpackage = true elsif l =~ RPM::Spec::SPEC_REQUIRES_MATCHER && !in_subpackage meta[:requires] << RPM::Requirement.parse($1.strip) elsif l =~ RPM::Spec::SPEC_BUILD_REQUIRES_MATCHER && !in_subpackage meta[:build_requires] << RPM::Requirement.parse($1.strip) elsif l =~ RPM::Spec::SPEC_CHANGELOG_MATCHER in_changelog = true elsif l =~ RPM::Spec::SPEC_FILES_MATCHER subpkg_name = nil in_files = true elsif l =~ RPM::Spec::SPEC_SUBPKG_FILES_MATCHER subpkg_name = $1.strip in_files = true elsif l =~ RPM::Spec::SPEC_CHECK_MATCHER meta[:has_check] = true elsif in_changelog meta[:changelog] << l elsif in_files tgt = subpkg_name.nil? ? meta[:gem_name] : subpkg_name if l =~ RPM::Spec::SPEC_EXCLUDED_FILE_MATCHER sl = Regexp.last_match(1) meta[:pkg_excludes][tgt] ||= [] meta[:pkg_excludes][tgt] << sl unless sl.blank? else sl = l.strip meta[:pkg_files][tgt] ||= [] meta[:pkg_files][tgt] << sl unless sl.blank? end end end # Ensure pkg_files hash exists meta[:changelog_entries] = meta[:changelog].split("\n\n") if meta[:changelog] meta[:changelog_entries].collect! { |c| c.strip }.compact! new meta end