#!/usr/bin/ruby require 'rubygems/package' module RubyGemsReq module Helpers # Keep only '!=' requirements. def self.conflicts(requirements) conflicts = requirements.select {|r| r.first == '!='} end # Converts Gem::Requirement into array of requirements strings compatible # with RPM .spec file. def self.requirement_versions_to_rpm(requirement) self.conflicts(requirement.requirements).map do |op, version| version == Gem::Version.new(0) ? "" : "= #{version}" end end end # Report conflicting gem dependencies including their version. def self.gem_depenencies(specification) specification.runtime_dependencies.each do |dependency| conflict_strings = Helpers::requirement_versions_to_rpm(dependency.requirement).map do |requirement| requirement_string = "rubygem(#{dependency.name}) #{requirement}" end if conflict_strings.length > 0 conflict_string = conflict_strings.join(' with ') conflict_string.prepend('(').concat(')') if conflict_strings.length > 1 puts conflict_string end end end # Reports all conflicts specified by all provided .gemspec files. def self.conflicts while filename = gets filename.strip! begin specification = Gem::Specification.load filename gem_depenencies(specification) rescue => e # Ignore all errors. end end end end if __FILE__ == $0 RubyGemsReq::conflicts end